255-голосный звуковой генератор PCM на микроконтроллере ATtiny861 Печать
Добавил(а) microsin   

Этот простой звуковой генератор основан на SD аудиоплеере [2], и построен с использованием микроконтроллера ATtiny861 компании Atmel и карты памяти microSD.

Микроконтроллер ATtiny861 имеет на борту выходы аппаратного формирования fast PWM (быстрый ШИМ), так что он, как и ATtiny85, может генерировать более чистый звук по сравнению с другими чипами AVR. В 20-выводном корпусе DIP20 чипа ATtiny861 имеется больше портов ввода/вывода GPIO, что позволяет управлять звуковым генератором внешними сигналами. Поскольку управление генератором очень простое, он может быть использован как звуковой модуль для игрушек, тональных звонков, развлекательных машин и гаджетов.

ATtiny861-SoundGenerator

[Hardware]

В качестве носителя данных для звука использовалась карта microSD, однако с таким же успехом можно применить стандартные SD и miniSD с соответствующим сокетом. Аудиосигнал, выводимый с помощью PWM (ШИМ), может быть подключен напрямую к громкоговорителю (т. е. динамик можно напрямую подключить к выходу PWM микроконтроллера). Такая нагрузка может оказаться слишком большой для порта микроконтроллера, однако максимально допустимый ток никогда не превышает установленного предела при напряжении питания 3.3 V, даже если выходной порт замкнуть на шины питания. При такой схеме подключения звук получается не очень громким, однако он хорошо слышен, если подключить настольные высокоэффективные колонки. Если Вы хотите подключить выход плеера к усилителю, то высокочастотная составляющая ШИМ должна быть отфильтрована фильтром низких частот (ФНЧ, Low Pass Filter, LPF). Не подключайте ШИМ-сигнал напрямую к аналоговому усилителю, потому что это может повредить усилитель или динамики. Выходная схема может быть собрана по трем вариантам, см. рисунок.

ATtiny861-SoundGenerator-sch

Каждый вариант схемы организации вывода звука (Mono-OCL/Stereo/Mono-HR) исключает использование других вариантов, и для каждого варианта написана отдельная модификация программы firmware. Таким образом, каждой конфигурации Mono-OCL/Stereo/Mono-HR соответствует свой HEX-файл (sdsg_mo.hex/sdsg_st.hex/sdsg_hr.hex). Значения фьюзов скомбинированы с HEX-файлами (встроены в них), однако некоторые программаторы AVR могут не поддерживать такой формат HEX. В этом случае просто удалите последние 3 строки их HEX-файла. Необходимые значения фьюзов можно найти в файле main.c.

[Firmware]

Программа firmware, написанная для микроконтроллера ATtiny861, поддерживает только формат RIFF/WAVE LPCM, 8/16bit, mono/stereo, sample rate 8..48 кГц. Звуковые файлы должны называться NNN.wav. Сочетание NNN соответствует диапазону чисел от 001 до 255. Звуковые файлы должны находиться в корневом каталоге карты памяти (root directory).

Команда на проигрывание соответствующего файла выдается через двоичный код, подаваемый на 8 контактов SW1..SW8. Например, SW1 соответствует файлу 001.wav, SW4 соответствует файлу 008.wav, и SW1+SW5 соответствуют файлу 017.wav. Имеется 4 режима работы, определяющие поведение звукового генератора при подаче команд управления, эти режимы конфигурируются с помощью файла 000.txt. Пример такого файла, который задает режим 3:

3 # Trigger mode (0..3)
  # 0:Level triggered
  # 1:Level triggered (sustained)
  # 2:Edge triggered
  # 3:Edge triggered (retriggerable)

Каждый из режимов работает следующим образом:

Mode 0 : Level trigger
Воспроизводит с автоповтором звуковой файл, который соответствует входному коду. Когда входной код меняется, меняется также и воспроизводимый файл. Когда на всех входах SW1..SW8 логический 0, то воспроизведение звука прекращается.
Mode 1 : Level trigger (sustained)
То же самое, что и mode 0, но воспроизведение продолжается только либо до окончания файла, либо до момента, когда все входы SW1..SW8 становятся в 0.
Mode 2 : Edge trigger
Однократно воспроизводит звуковой файл, соответствующий входному коду SW1..SW8. Любые изменения входных сигналов SW1..SW8 во время воспроизведения игнорируются.
Mode 3 : Edge trigger (re-triggerable)
То же самое, что и mode 2, однако изменение SW1..SW8 влияет на воспроизводимый файл. Чтобы воспроизвести файл заново, все входы SW1..SW8 должны перейти в 0, и на них должен быть снова выставлен нужный код.

Светодиодный индикатор LED показывает, что в данный момент воспроизводится звуковой файл. Количество миганий и секундная пауза соответствует определенному типу ошибки:

- двойное мигание - I/O error (ошибка аппаратуры или файловой системы).
- тройное мигание - соответствующий звуковой файл не найден.
- четырехкратное мигание - ошибка в звуковом файле, либо он имеет недопустимый формат.

[Ссылки]

1. 255-Voice PCM Sound Generator site:elm-chan.org - оригинал статьи на английском языке.
2. Простой аудиоплеер файлов на карте SD, собранный на 8-выводном микроконтроллере ATtiny85.
3. Firmware (gcc project + hex file).