В статье рассматривается конструкция простого звукового генератора на микроконтроллере. В основе конструкции лежит проект аудиоплеера с SD картой памяти на микроконтроллере ATtiny25/45/85.
Основным элементом рассматриваемого устройства является микроконтроллер ATtiny861 производства компании Atmel, который имеет более быстрый встроенный ШИМ, по сравнению с ATtiny85. Следовательно, микроконтроллер может генерировать более чистый звук, по сравнению с другими устройствами семейства AVR.
Для хранения звуковых файлов и конфигурационного файла используется карта памяти SD (microSD), но возможно использование и карт памяти MMC с соответствующим слотом.
Дополнительно, 20-выводный микроконтроллер имеет много доступных линий ввода/вывода, что позволяет ввести систему управления генератором от внешних сигналов. Благодаря своим компактным размерам, простоте изготовления и управления, данный звуковой генератор может использоваться в качестве звукового модуля для игрушек, музыкального звонка, развлекательного устройства и пр.
Аппаратная часть
Карта памяти (microSD) используется в качестве устройства хранения и подключена к микроконтроллеру по интерфейсу SPI с использованием встроенного аппаратного модуля USI (универсальный последовательный интерфейс). Аудиосигнал генерирует встроенный ШИМ, и поэтому динамик может подключаться непосредственно к выходу ШИМ. Уровень громкости, конечно, не слишком высокий, но при использовании качественных динамиков его будет вполне достаточно.
Блок-схема микроконтроллера ATtiny861
При подключении звукового генератора к усилителю, следует помнить, что необходимо в этом случае использовать фильтр низких частот (Low Pass Filter). Подключать выход ШИМ непосредственно к усилителю нельзя, т.к. можно вывести из строя усилитель и динамик.
Для питания генератора потребуется источник напряжения 3.3 В
Принципиальная схема генератора с различными вариантами конфигурации выхода.
Как видно по схеме, имеется три различных варианта конфигурации выходного каскада:
- режим монофонического выхода (файл для прошивки sdsg_mo.hex);
- режим стереофонического выхода (файл для прошивки sdsg_st.hex);
- режим монофонического выхода с высоким разрешением (файл для прошивки sdsg_hr.hex);
- режим монофонического выхода с высоким разрешением и усилителем (файл для прошивки sdsg_hr.hex).
Следует учитывать, что для каждого варианта конфигурации выхода имеется и свое программное обеспечение, которое необходимо запрограммировать в микроконтроллер (для режима монофонического выхода с высоким разрешением и усилителем используется то же ПО, что и для режима с монофоническим выходом с высоким разрешением).
Также, следует обратить внимание на установку Fuse-битов при программировании микроконтроллера. Установки Fuse-битов содержаться в каждом .hex файле (sdsg_mo.hex/sdsg_st.hex/sdsg_hr.hex, соответствуют конфигурации выхода), однако не все программаторы поддерживают такой формат файлов. Поэтому, в такой ситуации, пользователю необходимо будет вручную установить конфигурацию Fuse-битов, а также необходимо удалить последние три строчки из .hex файла. О необходимой конфигурации Fuse-битов указано в тексте исходного кода в фале main.c, скачать который можно по ссылке в конце статьи.
Светодиод, по схеме подключенный к порту PB2, является индикатором статуса при воспроизведении звукового файла и индикатором ошибок:
- две вспышки светодиода свидетельствуют об ошибке файловой системы или аппаратной ошибке;
- три вспышки светодиода – звуковой файл не найден;
- четыре вспышки – неверный формат звукового файла.
В следующей части: прошивка микроконтроллера, форматы звуковых файлов, команды управления и режимы работы.