Как записать звук на микросхему
В этом переводе представлена реализация записи, хранения и воспроизведения звука на основе микроконтроллера AVR, имеющего на борту АЦП, микросхемы памяти AT45DB161B DataFlash и нескольких внешних компонентов (перевод апноута [1]).
Апноут [1] демонстрирует использование АЦП AVR для оцифровки звука, интерфейса SPI для подключения к внешней памяти DataFlash, а также ШИМ (Pulse Width Modulation, PWM) для воспроизведения записанного звука. Это может использоваться и в других приложениях — логгеры температуры, автоматы ответа на телефонные звонки, цифровые диктофоны и т. п.
Параметры демонстрационного проекта:
• Реализован простой цифровой диктофон.
• Звук записывается в 8-битном формате.
• Частота оцифровки 8 кГц.
• Полоса записываемого звука до 4000 Гц.
• Максимальное время записи 4 минуты 15 секунд.
• Очень простая схема.
• Код занимает меньше 700 байт.
Микросхема AT45DB161B DataFlash это память с интерфейсом SPI, работающая только от одного напряжения 2.7V. Её память 16 мегабит организована в 4096 страниц по 528 байт каждая. Дополнительно к этой основной энергонезависимой памяти, DataFlash содержит два буфера данных SRAM по 528 байт каждый. Буферы позволяют осуществить виртуально непрерывный записываемый поток данных в DataFlash.
Через SPI в AT45DB161B осуществляется последовательный доступ к данным. Этот интерфейс упрощает аппаратуру и разводку сигналов подключения, увеличивает надежность системы, снижает шумовые переходные процессы и уменьшает размеры используемых корпусов микросхем и количество их выводов. Типовое применение такой памяти — хранилище данных лога или звуковых данных. DataFlash работает на тактовой частоте SPI до 20 МГц, с типовым током потребления около 4 мА. AT45DB161B работает от одного источника питания (напряжением от 2.7V до 3.6V) как для операций чтения, так и для операций записи.
Последовательный интерфейс SPI AT45DB161B совместим с режимами 0 и 3 интерфейса SPI микроконтроллера AVR. В этом апноуте AVR AT90S8535 используется для оцифровки аналоговых выборок сигнала звука и преобразования их в цифровые значения с помощью встроенного АЦП. Аппаратный SPI микроконтроллера управляет данными, посылаемыми в память DataFlash и из неё. Функция аппаратного ШИМ (PWM) микроконтроллера AVR используется для воспроизведения, обратного преобразования цифровых выборок в аналоговый сигнал звука. Размер кода очень маленький, так что приложение поместится в младшие модели AVR.
[Принцип работы]
Перед тем, как аналоговый сигнал (рис. 1) можно будет сохранить в DataFlash, он должен быть преобразован в цифровой сигнал. Это делается за несколько шагов.
Рис. 1. Пример аналогового сигнала.
Сначала аналоговый сигнал (рис. 1) преобразуется в запоминаемые на определенных, одинаковых интервалах времени выборки аналогового сигнала, этот процесс называется дискретизацией по времени (рис. 2). Интервал времени между двумя соседними выборками сигнала называется период дискретизации (sampling period), и обратная этому периоду величина называется частотой дискретизации (sampling frequency). В соответствии с теоремой выборок (теорема Найквиста-Котельникова) для достоверной оцифровки сигнала (чтобы его можно было восстановить почти без потерь) необходимо выполнение условия, чтобы частота дискретизации была как минимум вдвое выше самой высокой частоты в спектре сигнала. В противном случае продолжающееся повторение выборок приведет к завороту верхней части спектра в область низких частот, что называется «алиасингом» (aliasing). Такой неправильно оцифрованный сигнал не может быть корректно восстановлен из своих выборок.

Рис. 2. Сигнал, дискретизированный по времени.
Голосовой спектр содержит основную информацию в пределах полосы частот ниже 3000 Гц. Таким образом, чтобы ограничить полосу сигнала, можно использовать фильтр низких частот (ФНЧ). Такой фильтр часто называют «антиалисинговым».
Для идеального ФНЧ с частотой среза на 3000 Гц (с прямоугольным резким спадом на верхней предельной частоте) частота дискретизации должна быть 6000 Гц. В зависимости от реализации фильтра его спад амплитудной характеристики будет более или менее пологим, но никогда не идеальным. Особенно пологая характеристика у простейшего RC-фильтра первого порядка, поэтому нужно выбрать намного большую частоту дискретизации. При этом верхний предел такой частоты ограничивается возможностями АЦП, быстродействием микроконтроллера и доступной памятью для хранения цифровых выборок.
Определение цифровых значений для представления аналоговых выборок, которые берутся из аналогового сигнала на частоте дискретизации, называется квантованием уровня (quantization). Аналоговый сигнал квантуется таким образом, что определенным уровням напряжения присваиваются ближайшие допустимые цифровые значения (рис. 3). Количество таких возможных цифровых значений называется разрешающей способностью (resolution), и оно всегда ограничено. Например, это будет 256 различных вариантов уровня для 8-битного цифрового сигнала, или, как в примере на рисунке 3, это 10 допустимых значений. Таким образом, квантования по уровню аналогового сигнала всегда приводит к потере некоторой части исходной информации. Эти потери называются ошибкой квантования (quantization error), и они обратно пропорциональны разрешающей способности цифрового сигнала. Ошибка квантования вносит в оцифрованный сигнал шум, который называют «шумом квантования». Также потери квантования обратно пропорциональны динамическому диапазону сигнала, в примере на рис. 3 это минимальное значение 3 и максимальное 8. АЦП микроконтроллера AT90S8535 можно подстроить к динамическому диапазону сигнала путем установки уровней AGND и AREF в соответствие с максимом и минимумом уровней входного сигнала.

Рис. 3. Квантование сигнала по уровню.
Другой способ подстройки динамического диапазона под АЦП — использование усилителя на его входе. У AVR также есть свой программируемый в некоторых пределах усилитель сигнала для АЦП, что будет рассмотрено позже. Любые (корректные) подгонки рабочего диапазона АЦП под динамический диапазон сигнала снижают ошибку квантования.
Рис. 4 показывает цифровые выборки сигнала, которые представляют аналоговый сигнал. Эти цифровые значения вычитываются из АЦП в процессе его периодических (с интервалом дискретизации) преобразований.

Рис. 4. Цифровой сигнал.
В этом приложении сигнал должен иметь минимально допустимое и максимально допустимое значения, которые нельзя превышать. Части сигнала, которые переходят за эти уровни, не несут полезной информации. Они могут быть удалены из выходных данных для экономии памяти. Это делается смещением всех выборок сигнала вниз, и отбрасыванием «максимальных» значений (рис. 5).

Рис. 5. Цифровой сигнал с ограниченным количеством бит.
В этом приложении результирующий сигнал имеет разрядность 8 бит. Эта разрядность выборок максимально удобна как для обработки внутри AVR, так и для сохранения в DataFlash.
DataFlash не требует отдельного цикла стирания перед программированием. Когда используются команды, работающие с SRAM-буфером DataFlash (команды «Buffer to Main Memory Page Program with Built-In Erase» или «Main Memory Page Program Through Buffer»), микросхема DataFlash будет автоматически стирать указанную страницу в памяти перед программированием в неё реальных данных. В системах, которые требуют более скоростных передач данных для записи (больше 200 килобит/сек), основной массив памяти может быть предварительно стерт, чтобы уменьшить общее время программирования. Предоставляются опциональные команды «Page Erase» для очистки одной страницы памяти и «Block Erase» для очистки 8 страниц памяти за 1 раз. Когда в памяти есть предварительно очищенные области данных, команда «Buffer to Main Memory Page Program without Built-In Erase» должна использоваться для максимально быстрого программирования.
Первый метод (без предварительной очистки) более эффективен по размеру кода, потому что не нужно делать программные циклы очистки. Однако в этом апноуте используется очистка памяти блоками, чтобы продемонстрировать, как могут быть предварительно очищены большие порции памяти, если это необходимо. Очистка все памяти целиком займет несколько секунд.
После того, как память была очищена, данные могут в неё записываться до заполнения всех страниц.
[Как работает демонстрационная программа]
Для записи в DataFlash используется Buffer 1. Когда этот буфер заполнился (528 выборками), он записывается в основную память во время осуществления 529-го преобразования. Данные записываются до тех пор, пока не будет отпущена кнопка «Record», или пока не заполнится вся память. Если вся память заполнена, то новые данные не могут быть записаны в DataFlash до её очистки. Если память заполнена только частично, и кнопка «Record» нажата второй раз, то новые данные будут добавлены непосредственно за уже записанными.
Воспроизведение всегда начинается от начала DataFlash. Воспроизведение останавливается, когда все записанные данные были проиграны, или когда была отпущена кнопка «Playback».
DataFlash позволяет вычитывать данные либо напрямую из основной памяти, или путем копирования страницы в один из двух буферов, и последующего чтения из этого буфера. Метод прямого доступа не подходит для таких приложений, как двухадресные, с одним адресом для номера страницы, и другим для позиции байта, когда применяется длинная последовательность инициализации, передаваемая в DataFlash для каждого отдельного байта. Такие обращения к памяти происходят обычно намного дольше, чем один такт ШИМ, который занимает 510 периодов тактов для 8-битного сигнала ШИМ.
Таким образом, одна страница памяти копируется в один из двух буферов. Пока данные вычитываются из этого буфера, следующая страница памяти копируется в другой буфер. Когда все данные прочитаны из первого буфера, продолжается чтение из второго буфера, пока первый буфер перезагружается новой порцией данных.
Чтение данных из буфера DataFlash синхронизировано с частотой ШИМ.
Цифровые значения воспроизводятся с помощью ШИМ (PWM). На рис. 6 показаны примеры выборок сигнала 2 и 3. Один цикл PWM состоит из счета счетчика вверх до максимального значения, заданного максимальной разрешающей способностью (8 в этом примере), после чего снова происходит счет вниз. Выходной сигнал PWM переключается в лог. 1, когда счетчик PWM достигает значения цифрового сигнала, и переключается в лог. 0, когда значение счетчика снова оказывается меньше значения цифрового сигнала. Таким образом, темная часть на рисунке представляет мощность (уровень) сигнала для этой выборки.

Рис. 6. Два примера циклов ШИМ (PWM).
На рис. 7 показан пример выходного сигнала PWM.

Рис. 7. Фильтрованный сигнал ШИМ.
Частота PWM должна быть как минимум в два раза выше частоты сигнала. Рекомендуется использовать частоту PWM как минимум в 4 раза выше частоты сигнала, что зависит от выходного фильтра. Чем выше частота ШИМ, тем проще реализация фильтра с требуемыми параметрами.
С помощью ШИМ осуществляется обратное преобразование цифрового сигнала в аналоговую форму (ЦАП). Повышение точности такого преобразования может быть достигнуто повышением разрядности счетчика ШИМ, повышением частоты ШИМ, либо снижением полосы спектра выходного сигнала.
В этом приложении частота среза выходного фильтра установлена на 4000 Гц, что грубо составляет четверть от частоты ШИМ (15686 Гц). Системная тактовая частота микроконтроллера и разрешающая способность ШИМ определяют частоту ШИМ. При системной тактовой частоте 8 МГц частота 10-битного разрешения ШИМ составит 3922 Гц (8 МГц / 2 • 210 = 3922 Гц), 7843 Гц для 9-битного разрешения и 15686 Гц для 8-битного разрешения. Только последнее значение достаточно высокое, чтобы работать в качестве частоты несущей для сигнала со спектром 4000 Гц. Таким образом, оригинальная 10-битная цифровая выборка преобразуется в 8 бит.
Выходной фильтр сглаживает импульсы выходного сигнала ШИМ, удаляя из него высокочастотную несущую 15686 Гц. Результирующий выходной сигнал получится подобным сигналу на рис. 8. За исключением ошибок квантования (которые очень большие в этом примере, потому что в примере на рис. 8 используются только лишь 8 цифровых значений), сигнал выглядит похоже на исходный (рис. 1).

Рис. 8. Выходной сигнал ШИМ.
Пользователь может управлять системой звука тремя кнопками: «Стереть» (Erase), «Запись» (Record) и «Воспроизвести» (Playback). Если кнопка не нажата, то внутренними верхними подтягивающими резисторами (pull-up) на входах портов кнопок (PD0, PD1, PD2) устанавливается высокий уровень VCC.
Для обратной связи с пользователем имеется светодиод LED, показывающий состояние системы.
Микросхема памяти DataFlash напрямую подключена к микроконтроллеру AVR с помощью шины SPI. Эта же шина SPI используется для внутрисхемного перепрограммирования (ISP) микроконтроллера AVR, в этом случае сигнал выборки микросхемы памяти DataFlash (Chip Select, CS) подтягивается к высокому уровню pull-up резистором 10 кОм, что предотвращает активацию DataFlash. Если ISP не используется, то этот резистор можно не устанавливать.

Рис. 9. Схема устройства.
Аналоговое напряжение AVCC подключено к VCC через ФНЧ на RC-цепочке. Это напряжение используется как опорное для АЦП.
Кварцевый резонатор с двумя корректирующими конденсаторами используются для генерации системной частоты AVR.
В качестве микрофонного усилителя используется простой инвертирующий каскад на операционном усилителе LM324 (U1A). Его усиление устанавливается резисторами R1 и R9 (коэффициент усиления = R1 / R9). R4 используется для подачи питания на микрофон, и C1 блокирует прохождение постоянной составляющей сигнала микрофона на вход усилителя. R2 и R3 устанавливают смещение усилителя по постоянному току. R5 и C8 формируют цепочку ФНЧ первого порядка. Дополнительно R5 защищает выход операционного усилителя U1A от короткого замыкания.

Рис. 10. Схема микрофонного усилителя и выходного усилителя.
Схема для подачи сигнала на динамик/наушники состоит из ФНЧ 5-го порядка с характеристикой Чебышева (U1B, U1C) и буферного повторителя (U1D). Фильтр построен на двух каскадах ФНЧ Чебышева 2-го порядка (R6, R7, R8, C2, C7 и R7, R10, R11, C9, C5) и пассивной цепочки ФНЧ (R11, C4). Частоты среза первых двух каскадов немного сдвинуты друг относительно друга, чтобы ограничить провалы общей АЧХ. Общая частота среза ФНЧ установлена на 4000 Гц, что грубо составляет четвертую часть от частоты ШИМ (15686 Гц).
Буферный каскад с одиночным усилением (U1D) обеспечивает развязку фильтра от выходной нагрузки. C3 блокирует постоянную составляющую на выходе буферного усилителя от попадания на динамик или наушники.
[Программная реализация]
Первоначальные установки. При включении питания запускается программа микроконтроллера, и она настраивает его порты GPIO. Это делает подпрограмма setup.
В протоколе SPI определено, что одно из устройств на шине должно работать как главное (master), и другие устройства как подчиненные (slave) [2, 3]. В нашем случае микроконтроллер AVR AT90S8535 работает как master, а микросхема DataFlash как slave. Поскольку AT90S8535 работает только как master, вывод SS может использоваться как обычный порт ввода/вывода (GPIO).
SPI AT90S8535 привязан к альтернативной функции ножек порта B (PB5, PB6 и PB7). Также настраиваются порты GPIO PB0, PB1 и PB4 для сигналов управления DataFlash. Ножка порта PB3 используется для управления светодиодом LED. Для функционирования SPI master сигналы тактов (Serial Clock, SCK), выход последовательных данных (Master Out/Slave In, MOSI), выборка микросхемы (Chip Select,
CS), защита от записи (Write Protect, WP) и сброс (Reset, RST) настраиваются у микроконтроллера AVR как выходы, и сигналы входа последовательных данных (Master In/Slave Out, MISO) и готовность/занятость (Ready/Busy, RDY/BSY) настраиваются как входы. Также порт PB3 светодиода настраивается как выход, поэтому в регистр DDRB записывается значение 0xBD.
Затем в регистр PORTB записывается значение, устанавливающее все выходы в лог. 1, и подключающие на всех входах внутренние pull-up резисторы.
Встроенный АЦП AT90S8535 подключен к выводам порта A. Поэтому порт A настроен как вход с высоким сопротивлением.
Порт D обслуживает входы кнопок и выход для вывода сигнала ШИМ. Для формирования ШИМ используется функция PWM таймера Timer1 на выходе PD4.
В завершение разрешаются прерывания. В этом приложении используются два прерывания — АЦП и переполнение таймера 1 (ADC и Timer1 Overflow), которые разрешаются и запрещаются в подпрограмме, когда это необходимо.
Цикл функции main. В бесконечном цикле main опрашиваются три кнопки. Если какая-нибудь из них нажата, зажигается LED чтобы показать, что система занята действием и вызвана соответствующая подпрограмма. Выполняется дополнительный цикл, пока кнопка не будет отпущена, в качестве программного подавления дребезга контактов кнопок Erase и Playback. Светодиод LED гаснет, чтобы показать переход системы в состояние ожидания.

Рис. 11. Алгоритм бесконечного цикла.
Очистка памяти. Память микросхемы DataFlash может быть опционально очищена (Erase).

Рис. 12. Алгоритм Erase.
Когда вызывается подпрограмма Erase, устанавливается флаг, который показывает, что следующий цикл записи новых данных будет начинаться от начала DataFlash. SPI должен быть настроен для доступа к DataFlash. Здесь не используются прерывания (они запрещены). SPI master AT90S8535 настраивается на порядок следования бит при обращении к DataFlash такой, что старший бит (Most Significant Bit, MSB) идет первым. DataFlash воспринимает сигнал лог. 0 SCK, когда
CS переходит от лог. 1 к лог. 0 (SPI Mode 0), или лог. 1 SCK, когда
CS переходит от лог. 1 до лог. 0 (SPI Mode 3) в положительной фазе тактов. В этом приложении SPI настраивается в Mode 3. Чтобы осуществить максимально быструю передачу данных, выбирается самый маленький коэффициент деления тактовой частоты, при этом шина SPI работает на частоте 2 МГц, если используется кварцевый резонатор 8 МГц.
Для выполнения очистки блоками (block erase), сигнал
CS переводится в лог. 0, и в DataFlash загружается код операции 0x50, за которыми идут два зарезервированных нулевых бита, 9-битный адрес блока, и 13 бит, которые не имеют значения. Эта последовательность передается байтами в подчиненное устройство DataFlash. После каждого байта регистр состояния SPI (SPI Status Register, SPSR) проверяется на установку флага прерывания SPI, показывающего завершение последовательной передачи. После того, как вся эта последовательность записана, начинается стирание блока, когда сигнал
CS переводится в лог. 1. Вывод Ready/Busy переводится микросхемой DataFlash в лог. 0, пока блок не будет очищен. Затем точно так же будет очищен следующий блок, как был только что очищен текущий. Это повторяется, пока не будут очищены все 512 блоков. Очищенные байты DataFlash читаются как 0xFF.
Запись. Подпрограмма оцифровки звука состоит из настройки АЦП и пустого цикла, который повторяется, пока нажата кнопка Record. Ножка ADC0 используется как вход для аналогового сигнала, поэтому регистр мультиплексора АЦП (ADC Multiplexer Select Register, ADMUX) должен быть установлен в 0. В регистре управления и состояния (ADC Control and Status Register, ADCSR) АЦП разрешается с коэффициентов деления тактов 32, настраивается режим одиночного преобразования (single conversion mode), разрешаются прерывания, и очищается флаг прерывания. Немедленно запускается преобразование АЦП. Первое преобразование происходит дольше, чем последующие преобразования (832 тактов генератора вместо 448). После этого времени произойдет прерывание АЦП, которое показывает, что преобразование завершилось, и результат оцифровки можно прочитать из регистра данных АЦП (ADC Data Register).
Аналоговый сигнал на выходе микрофонного усилителя оцифровывается на частоте дискретизации 15686 Гц. Та же самая частота используется в качестве несущей ШИМ (PWM).
Чтобы достичь частоты дискретизации 15686 Гц, выборка сигнала с АЦП происходит через каждые 510 тактов системной частоты (15686 Гц x 510 = 8 МГц). Чтобы получить результат преобразования АЦП, через каждые 510 тактов АЦП запускается на одиночное преобразование с коэффициентом деления тактов ADC, равным 32. Одиночное преобразование занимает 14 тактов АЦП. Таким образом, результат преобразования будет готов через 14 x 32 = 448 тактов.
Когда преобразование завершается, происходит прерывание. Обработчик прерывания выполняет цикл для заполнения остальных 62 тактов (510 — 448 = 62) перед запуском нового преобразования АЦП.
10-битный результат преобразования представляет значение уровня аналогового сигнала на входе АЦП после 2 тактов от момента запуска преобразования. Эти 10 перекрывают диапазон уровней от AGND до AREF, что в этом приложении соответствует уровням от 0V до 5V. Однако сигнал на выходе микрофонного усилителя ограничен диапазоном от 2.3V до 3.5V. Таким образом, из 10-битного результата преобразования вычитается значение, соответствующее минимальному входному напряжению. Это значение равно 0x1D5 для минимального напряжения 2.3V. Часть данных, представляющая значения выше 3.5V, удаляется из результата путем обнуления двух старших бит 10-битного результата преобразования. Это делается автоматически, когда результат преобразования обрабатывается подпрограммой записи во FLASH, так как её переменная flash_data определена как char (имеет разрядность 8 бит). Конечные 8-битные данные затем записываются в DataFlash перед тем, как произойдет следующее прерывание АЦП.

Рис. 13. Алгоритм оцифровки сигнала (запись).
Запись данных в DataFlash осуществляется сначала в буфер, и потом этот буфер полностью записывается в страницу основной памяти.
В подпрограмме write_to_flash переменная j представляет номер байта в буфере и переменная k номер страницы, в которую будет записан буфер. Если флаг new-data показывает, что память DataFlash чистая, то оба счетчика устанавливаются в 0. Если память уже содержит какие-то данные, то эти переменные содержат следующую свободную ячейку в памяти, что гарантирует, что новые данные будут непосредственно добавлены к уже имеющемся данным звука в памяти.
Чтобы сохранить значение этих переменных между вызовами двух функций, они декларированы как static.
Чтобы записать данные в буфер, сигнал
CS переводится в лог. 0, и код операции 0x84 загружается в микросхему DataFlash. За этим следуют ничего не означающие 14 бит, и 10-битный адрес позиции в буфере. Затем идут 8-битные данные.
Эта последовательность передается по байтам. После каждого байта проверяется регистр состояния SPI (SPI Status Register, SPSR), пока флаг прерывания SPI не покажет, что последовательная передача завершилась. После записи всей последовательности сигнал
CS переводится в лог. 1.
Если буфер заполнился, и еще есть чистые страницы, то буфер копируется в следующую страницу DataFlash. Так как память была стерта раньше, данные можно записывать без дополнительной операции стирания.
Если вся память заполнена, выполняется цикл, пока не будет отпущена кнопка Record. Любые оцифрованные данные при этом не запишутся и не будут потеряны.

Рис. 14. Алгоритм записи в DataFlash.
Воспроизведение. В подпрограмме Playback, содержимое DataFlash считывается, и прочитанные данные модулируют 8-битный ШИМ, работающий на 15686 Гц. Чтобы достичь более высокой скорости, данные не вычитываются напрямую из памяти, вместо этого перемещаются в один из двух буферов, и затем чтение происходит из буфера. Тем временем следующая страница памяти копируется в другой буфер. Для ШИМ используется 16-битный Timer/Counter1, сигнал ШИМ выводится на OC1B. Это настраивается в регистрах таймера Timer/Counter Control Register A (TCCRA) и Timer/Counter Control Register B (TCCRB). Чтобы запустить ШИМ а самой большой возможной частоте, делитель тактов PWM установлен в 1.
Когда настройка завершена, первая страница копируется в Buffer 1 путем перевода сигнала
CS в лог. 0 и передачи соответствующих команд в микросхему DataFlash. Перемещение данных из страницы в буфер (page-to-buffer transfer) начинается, когда сигнал
CS снова возвращается в лог. 1. Когда сигнал занятости Ready/Busy переведен микросхемой DataFlash в лог. 1, Buffer 1 содержит достоверные данные. Затем запускается перемещение данных в Buffer 2. Так как оба буфера не зависят один от другого, данные из буфера 1 могут читаться, пока DataFlash занята копированием следующей страницы в буфер 2.
Для чтения байта из буфера, в микросхему DataFlash записывается пустое, ничего не значащее значение (dummy value). Операция записи со стороны устройства master SPI приводит к тому, что подчиненное устройство выдвигает на шину SPI свои данные, которые появятся после завершения записи в регистре данных SPI (SPI Data Register, SPDR). После записи dummy-байта в DataFlash регистр SPDR микроконтроллера AVR содержит выходные данные, прочитанные из DataFlash.

Рис. 15. Алгоритм воспроизведения.
Когда счетчик PWM содержит значение 0, происходит прерывание переполнения таймера 1 (Timer1 overflow interrupt). Это прерывание используется для синхронизации вывода данных из DataFlash с частотой ШИМ. Когда значение из буфера выдвигается через SPI в микроконтроллер AVR, выполняется цикл до момента возникновения прерывания таймера 1. Тогда данные, записанные в регистр сравнения B таймера (Timer/Counter1 Output Compare Register B, OCR1B), автоматически защелкиваются на выход ШИМ, когда счетчик содержит свое максимальное значение (255 для 8-битного ШИМ).
После того, как из буфера будет прочитано последнее значение, происходит переключение на другой буфер.
Когда вся память проиграна, все прерывания запрещаются, и Timer/Counter1 останавливается.

Рис. 16. Алгоритм перемещения следующей страницы в следующий буфер.

Рис. 17. Алгоритм вывода активного буфера на динамик.
Описанное здесь приложение может быть протестировано и изменено для своих целей на основе STK200 Development Board. В этом случае следует сделать несколько замечаний.
Сокет чипа. Это приложение использует встроенное АЦП микроконтроллера. Таким образом микроконтроллер, устанавливаемый в сокет, должен иметь на борту аппаратный АЦП, и выход микрофонного усилителя подключается к контактам разъема, помеченного «Analog».
Перемычки. Перемычки должны быть установлены в соответствии с используемыми кнопками и светодиодом LED.
Резисторы SPI. Чтобы избежать ненужно влияния друг на друга SPI микроконтроллера и устройств, подключенных к коннектору порта B, вставляются резисторы 10 кОм между сокетом чипа и выводами PB5 .. PB7 коннектора Port B. Если DataFlash подключается к этим контактам коннектора, резисторы замыкаются мостиками припоя на обратной стороне STK200.
Использование встроенного AVR SPI. Замыкание резисторов между сокетом чипа и коннектором Port B может вызвать некоторые проблемы, если Вы используете SPI для загрузчки и проверки программы (через ISP), когда устройство памяти подключается к контактам разъема Port B. Если такие проблемы возникают, то помочь может отключение устройства во время работы ISP, или путем установки резистора 10 кОм между PB4 и VCC, как показано на рис. 9.
[Оптимизация и модификации]
Уровень сигнала на выходе микрофона может зависеть от его типа. Чтобы достичь самых лучших результатов, важно подобрать усиление микрофонного усилителя так, чтобы максимальный уровень сигнала на выходе микрофонного усилителя был близок к уровню AREF.
Данные, вычитываемые из АЦП, без изменений записываются в DataFlash. Может понадобиться компрессия данных, если нужно увеличить время записи или если нужна запись стереосигнала.
В этом приложении показаны два способа реализации флага состояния. В одном из них используется глобальная переменная (например переменная wait применена в подпрограмме playback). Другой способ реализации флага подразумевает применение не используемого бита в регистре, что полезно для экономии оперативной памяти. В подпрограмме erase бит ACIS1 регистра управления и состояния аналогового компаратора (Analog Comparator Control And Status Register, ACSR) используется как индикатор сохранения новых данных. Пока аналоговый компаратор не используется, это не окажет никаких негативных эффектов на работу программы и освободит память, которая потребовалась бы для еще одной глобальной переменной.
Частота выборок 15686 Гц, соответствующая 510 тактам системной частоты, генерируется на основе прерывания АЦП и цикла задержки. Эта реализация может быть заменена на независимом таймере (Timer/Counter0 или Timer/Counter2), если он не используется для каких-нибудь других целей.
Исходный код проекта [4] может быть легко портирован на любой другой микроконтроллер AVR, у которого на борту есть аппаратный АЦП и SPI.
Говорилка для авто на модуле записи и воспроизведения звука ISD1820

За частую в спешке не глядя на табло автомобиля(там есть световой индикатор включенного ручного тормоза) трогаешь с места в невыключенным ручным тормозом.В результате уменьшается ресурс сцепления, тормозных дисков ит.д.Решил себе в авто добавить голосовой сигнализатор включенного ручника.
Электронный модуль ISD1820 предназначен для записи и воспроизведения краткого голосового сообщения.
Предназначен для установки в различные системы. Например, в автомобилях и холодильниках становится возможным достаточно просто реализовать функцию речевого сигнала «Дверь не закрыта!»или «Ручной тормоз включен!», в охранных системах упростить подачу сообщений, например «Нарушена охраняемая зона!». Добавив модуль в блок питания можно получать голосовые сообщения «Перегрузка по току!». Благодаря наличию микрофона звукозаписывающий модуль (с микрофоном на плате) ISD1820 позволяет не только воспроизвести, но и записать речевое сообщение.
Питание 3 – 5 В. Длительность записи или воспроизведения 10 сек.
Кнопки управления: REC кнопка записи (нажать и удерживать кнопку для записи);
RLAYE кнопка воспроизведения всей записи;
PLAYL кнопка воспроизведение фрагмента записи (нажать и удерживать для воспроизведения нужного фрагмента).
RPL перемычка для организации циклического воспроизведения.
FT перемычка для организации прямого воспроизведения звука через микрофон.
Используя управляющие сигналы модуль можно ввести в состав более сложных приборов или осуществить управление от Arduino, Raspberry, Pi, .
Чтобы было погромче подключил усилитель РАМ8403 и советский динамик.

Питание от бортовой сети авто через плату понижающую.Все смонтировано в корпус от старого звонка. Включение блока происходит от выключателя установленного в рычаге стояночного тормоза.
В перспективе можно будет собрать озвучку на авто на звуковом модуле JQ6500-пять звуковых каналов.
Подробнее можно посмотреть в видео
Модуль записи / воспроизведения звука ISD1820
ISD1820 — это микросхема предназначенная для записи и воспроизведения звуковых сигналов длительностью до 20 секунд. Она имеет миниатюрный размер и широко используется в различных электронных устройствах, таких как дверные звонки, автомобильные системы безопасности, а также игрушках, которые играют музыку.
Введение
ISD1820 состоит из аналогового входа, усилителя, АЦП, цифровой памяти и ЦАП. Она может работать с частотой дискретизации до 8 кГц и имеет 8 бит для записи и воспроизведения звука. Также она имеет вход для подключения микрофона и выход для наушников или динамика.
В работе с ISD1820 можно выделить несколько основных этапов: запись аудиофайлов на интегральную схему, воспроизведение аудиосигналов из памяти и управление выводом звука. Для записи звука необходимо подать на вход микрофона аудиосигнал, после этого вход будет заблокирован, чтобы предотвратить случайную запись. Затем с помощью кнопки «Запись» можно начать запись. После окончания записи аудиофайл сохраняется в памяти интегральной схемы.
Для воспроизведения аудиосигналов из памяти необходимо нажать кнопку «Воспроизведение». При этом на выходе появится аудиосигнал, который можно услышать через наушники или динамик.
Для управления выводом звука предусмотрен вывод Vref, который можно использовать для определения уровня громкости звука. Также можно подключить к выводу наушники или динамик с помощью усилителя мощности.
ISD1820 – это удобный и простой в использовании способ записи и воспроизведения аудиосигналов на микроконтроллере. Она имеет небольшой размер и низкое энергопотребление, что делает ее отличным выбором для различных электронных устройств.
Характеристики
- Питание 3 – 5 В
- Длительность записи или воспроизведения 10 с
- Предельное расстояние для записи голоса не более 0,2 м
- Динамик 0,5 Вт, 8 Ом
- Предельная температура окружающего воздуха 0 – 50 °C
- Размер платы 38 x 42,5 мм
Устройство модуля и его принципиальная схема
Основные компоненты модуля показаны на схеме ниже
- 12 пиновый разъем для подключения к микроконтроллеру и настройки режима работы
- микрофон
- Резистор регулировки длительности записи
- Светодиод индикации работы
- Микросхема ISD1820
- Разъем для подключения динамика
- Воспроизведение записи при удержании кнопки
- Воспроизведение всей записи при однократном нажатии кнопки
- Кнопка записи
Для управления модулем используется и подключения к микроконтроллеру используется 12 пиновый разъем.
Левый столбец контактов используется для подключения к микроконтроллеру, а правом установлены 2 джампера для переключения режимов работы.
Левый столбец контактов
- VCC — питание модуля
- GND — контакт заземления
- FT — вывод с микрофона на динамик во время подачи сигнала HIGH (режим мегафона)
- P-L — воспроизведение голосового сообщения во время действия сигнала HIGH
- P-E — воспроизведение голосового сообщения по сигналу HIGH
- REC — запись голосового сообщения с микрофона по сигналу HIGH
Правый столбец контактов
В нем установлено 2 перемычки
- Перемычка FT — при замыкании 1-2 контактов сверху сигнал с микрофона будет напрямую идти на динамик без записи в EEPROM микросхемы. При подсоединении внешнего усилителя к разъему динамика можно использовать как мегафон.
- Перемычка P-E— при замыкании 5-6 контактов снизу будет запущено циклическое воспроизведение записанного голосового сообщения
Принципиальная схема модуля представлена ниже
Длительность звучания для звуковой микросхемы регулируется величиной сопротивления резистора R4, смонтированного на печатной плате.
Изменяя номинал резистора от 80 кОм до 200 кОм, можно изменять длительность записи и, соответственно воспроизведения, от 8 секунд до 20 секунд с незначительным изменением качества записи.
Тест работы модуля
Небольшое видео с тестом работы модуля
Примеры использования
Разберем 2 простых примера использования данного модуля
Пример 1. Сигнализация при входе человека в запретную зону
Для проекта вам понадобятся:
- Плата Arduino Nano – 1 шт;
- Модуль ISD1820 – 1 шт;
- Динамик – 0,5 Вт, 8 Ом – 1 шт;
- Датчик расстояния HC SR-04 – 1 шт;
- Провода.
Далее собираем проект по схеме ниже
Запишем на модуль ISD1820 фразу для оповещения, например: "Внимание. Вы зашли в запретную зону, просьба срочно покинуть".
При обнаружении ультразвуковым датчиком расстояния объекта в радиусе 100 см, подаем сигнал HIGH на контакт 12. При этом будет воспроизводиться данная фраза. Следующий замер расстояния через 10 секунд.
Затем копируем в Arduino IDE данный скетч и загружаем его в Arduino Nano
Пример 2. Голосовой информатор в автомобиль
В этом примере мы будем использовать ISD1820 как голосовой информатор о какои либо событии в вашем автомобиле. Например поднятый рычаг стоночного тормоза, низкое давление масла, включение заднего хода и т.п.
Для проекта вам понадобятся:
- плата звукового модуля на ISD1820 -1шт;
- пластмассовый корпус -1шт;
- громкоговоритель 0,5 Вт, сопротивление 8 Ом -1шт;
- понижающая плата на LM2596 или любая аналогичная—1шт;
- усилитель PAM8403-1шт;
- источник питания;
- соединительные провода -паяльник;
Для более качественной записи звука могут еще понадобится:
- разъем Джек 3,5мм-1шт;
- резисторы 500 кОм и 50 кОм -1шт;
Прежде всего настраиваем выходное напряжение LM2596 в диапазоне 3В — 5.5В
Соединяем компоненты по схеме
Если линейный вход для записи и передачи звука использовать не планируется, то упрощаем схему
Подключаем выводы 12в LM2596 параллельно концевику стояночного тормоза, фонарей заднего хода, концевику дверей или еще куда либо в зависимости от события которое вы хотите озвучить
Активируем концевик, подняв рычаг стояночного тормоза или включив задний ход. В общем все зависит от того куда вы подключили модуль. Нажав кнопку REC записываем сообщение. Например: "Поднят стояночный тормоз!". Либо же, если вы использовали схему с линейным входом, подключить модуль к выходу 3.5 мм телефона воспроизвести заранее скачанное сообщение с него.
Нажав кнопку P-E на модуле прослушайте записанное сообщение
Если результат вас устроил, то установите перемычку P-E на 5-6 контакты 2 столбца контактной группы модуля ISD1820
Теперь при срабатывании концевика на модуль будет подаваться напряжение, после чего будет постоянно произносится записанная вами фраза
ISD1820 микросхема голосовых сообщений (+ обзор ISD1760).
Возможность озвучивания каких либо действий собственной электронной схемы, для многих радиолюбителей такая тема актуальна.
Как вариант ISD1820, не дорого и эффективно.
Микросхема ISD18B20, которая является у стройством записи / воспроизведения одного сообщения .


Обзор Модуля ISD1760


ISD1760 Однокристальные микросхемы записи/воспроизведения голосовых сообщений


Общее описание
ISD1700 — серия ИС ChipCorder®, представляющих собой полностью интегрированное, однокристальное решение для записи/воспроизведения нескольких голосовых сообщений и предназначенных для использования в разнообразных электронных системах. Длительность сообщения задается пользователем в пределах 26…120 секунд (зависит от типа ИС). Возможность задания внешним резистором частоты преобразования в диапазоне 4…12 кГц еще больше увеличивает гибкость по выбору длительности сообщений. ИС способны работать при напряжении питания от 2.4 до 5.5 В, что делает возможным их использование в применениях, как с батарейным питанием, так и с питанием от сети переменного тока.
В ИС серии ISD1700 учтена возможность автономной и совместной работы с микроконтроллером через интерфейс SPI. В ИС входит оригинальная система управления сообщениями, которая позволяет им автоматически управлять адресами нескольких сообщений. Данная уникальная особенность позволяет, при управлении обычными кнопками, реализовать интеллектуальные функции управления сообщениями. В ИС также входят тактовый генератор (управляется внешним резистором), микрофонный предусилитель с АРУ, вспомогательный аналоговый вход, фильтры, энергонезависимая память для хранения аналоговых выборок, схема управления громкостью, усилитель мощности класса D, а также токовый/вольтажный выход.
ИС ISD1700 поддерживают опциональную возможность «vAlert», которую можно использовать для голосовой сигнализации получения нового сообщения. Помимо функции vAlert, о приходе нового сообщения также сигнализирует мигание внешнего светодиода. И кроме того, для подтверждения таких операций, как «Старт записи», «Останов записи», «Стирание», «Вперед», «Общее стирание» и др., предусмотрено четыре звуковых сигнала.
Записи сберегаются во встроенной флэш-памяти, т.о. для их хранения питание не требуется. Появление данного однокристального решения стало возможным, благодаря запатентованной Winbond технологии многоуровневого хранения. Аудиоданные хранятся в твердотельной памяти в их естественном виде (без цифрового сжатия), чем достигается высокое качество воспроизведения голоса и музыки.
Голосовые сигналы могут поступать во флэш-память по двух независимым трактам: через дифференциальные входы микрофонного усилителя и через несимметричный аналоговый вход. Для вывода звуковой информации у ISD1700 предусмотрены усилитель мощности класса D (ШИМ) и параллельно работающий с ним отдельный аналоговый выход. Усилитель мощности может напрямую управлять 8-омным динамиком, а дополнительный аналоговый выход может быть сконфигурирован, как токовый или вольтажный, и предназначен для работы с внешним усилителем.
Когда ИС ISD1700 работают в автономном режиме, они автоматически переходят в дежурный режим работы по завершении каждого рабочего цикла.
В режиме SPI внешний микроконтроллер через последовательный интерфейс получает все функции управления, в т.ч. доступ к любой области внутренней памяти по заданным начальному и конечному адресам. В режиме SPI также имеется возможность доступа к регистру конфигурации аналоговых каскадов (APC).
Данный регистр позволяет гибко настроить аудиокаскады, входы, выходы и микширование. При необходимости изменить настройку по умолчанию регистра APC, нужно сохранить требуемое состояние APC в энергонезависимый регистр NVCFG, содержимое которого перезаписывается в APC во время инициализации.
Т.о. образом ИС ISD1700 обладают всеми возможностями, позволяющие быстро и гибко реализовать голосовые функции в высококачественной продукции.
Отличительные особенности:
Однокристальное решение со встроенной системой управления сообщениями для применений с кнопочным управлением
/REC: вход управления записью с активизацией по уровню
/PLAY: вход управления воспроизведением с активизацией по фронту (воспр. отдельного сообщения) или по уровню (воспр. по кругу)
/ERASE: вход управления стиранием с активизацией по фронту (стирание первого или последнего сообщения) или по уровню (стирание всех сообщений)
/FWD: вход управления переходом к следующему сообщению или быстрым прослушиванием сообщения во время его воспроизведения (активизация по уровню)
/VOL: вход 8-уровневого управления громкостью звучания
RDY/INT: вход сигнализации готовности или занятости
RESET: вход управления возвратом в исходное состояние
Автоматический переход в дежурный режим по завершении каждого рабочего цикла
Выборочная частота преобразования, задаваемая внешним резистором

Выборочная длительность сообщений
Возможность выбора длительностей от 20 до 480 сек, в зависимости от заданной частоты преобразования

Сигнализация сообщений и режимов работы
Четыре выборочных звуковых эффекта для звуковой сигнализации
Опциональная голосовая сигнализации (vAlert) наличия новых сообщений
Управление светодиодным индикатором, который непрерывно включен во время записи и мигает во время воспроизведения, переходов и стирания
Два режима работы
Автономный режим:
Встроенные функции управления сообщениями
Автоматический переход в дежурный режим по завершении каждого цикла
Режим SPI:

— Управление и настройка полностью осуществляются пользователем через регистр APC и с помощью различных команд, передаваемых по интерфейсу SPI
Два отдельных входных канала
MIC+/MIC-: входы дифференциального усилителя с АРУ для подключения микрофона
AnaIn: несимметричный вспомогательный аудио-вход для записи или прослушивания в динамике (режим FT)
Два выходных канала
Дифференциальный усилитель мощности класса D (ШИМ), позволяющий напрямую управлять 8-омным динамиком
Однотактный выходной каскад для работы с внешним усилителем ЗЧ; поддерживаются конфигурация AUD (ток) или AUX (напряжение)
Стандартные особенности для ИС ChipCorder
Высококачественное, естественное воспроизведение голоса и музыки
Напряжение питания 2.4…5.5В
Хранение сообщения в течение 100 лет (типичное значение)
100 тыс. циклов записи (типичное значение)
Исполнения по температурному диапазону:
Коммерческое: 0…+50°C (кристалл); 0…+70°C (для ИС в корпусе)
Промышленное: -40…+85°C (для ИС в корпусе)
Доступные типы корпусов: в виде кристалла, PDIP, SOIC и TSOP
Опции для корпусных исполнений: корпуса без содержания свинца
http://catalog.gaw.ru/index.php?page=component_detail&id=18544

REC:
Нажмите и удерживайте кнопку REC , индикатор ( d1 ) загорается . Говорите в микрофон , голос или звук будет записываться в модуле.
Отпустите кнопку после записи , индикатор гаснет.
Новое нажатие позволяет сделать следующую запись .
PLAY ИГРАТЬ
После записи указатель воспроизведения остается на адрес последней записанной сегмента , чтение будет сделано на этой последней записи.
Режим EDGE . Нажмите кнопку воспроизведения , индикатор ( d1 ) мигает во время воспроизведения до конца записи .
Режим триггера Уровень . Воспроизвести все сообщения , пока вы не отпустите кнопку .
FWD
Переход к началу следующей записи .
ERASE Стереть
Одна запись в то время, первый или последний исчезает. Нажмите кнопку 1 сек. Светодиодный индикатор мигает дважды.
Нажмите эту кнопку в течение 3 секунд , чтобы удалить все внезапно. Светодиод мигает 2 раза затем 7 раз , чтобы указать общее стирание .
RESET
Нажмите RESET, чтобы отменить операцию .
VOL
Регулировка громкости звука ( максимальная после перезагрузки) не на 4 дБ . Один клик для изменения таким образом , двойной щелчок для изменения в противоположном направлении , изменения цикличны 8 уровней ( от 0 до -28 дБ) .
FT
Нажатие кнопки FT ( сквозной проход звука) отправить аналоговый вход непосредственно к динамику. Во время записи аналоговый сигнал записан.
