Заставил работать встроенный на плату x-duino с мегой88 (5v) пьезо "динамик" с помощью ШИМа. Звук слышно, шипения нет, но тихо ибо он очень уж мал и для таких вещей не подходит
Звуковые файлы читаются с MMC-карты, для которой был изготовлен переходник на плату x-duino в порт SPI+ (фото). Он со встроенным стабилизатором напряжения и делителями для согласования уровней 5В->3.3В.
Скорости Mega88 хватает с избытком, пришлось серьезно притормаживать и выставлять тайминги:
-Таймер0 - 100Гц
-Таймер1 - 100кГц
-Таймер2 - ШИМ (на максимуме - частоты ШИМ не слышно) на ноге PD3.
Первые два таймера используются исключительно для формирования задержек. Вероятно, можно использовать один вместо двух.
Для чтения MMС карты использую собственные процедуры чтения FAT16, написанные на ассемблере. Прошивку выкладываю.
Для меня стал почти открытием тот факт, что звук иногда щелкает - т.к. данные с MMC приходят с некоторым количеством ошибок.
В интернете ни у кого нет об этом ни слова
3.3В версия, использующая аппаратный ЦАП тоже щелкает
Подтягивающие резисторы проблему не убирают, контрольные суммы файлов в железе и на PC немного отличаются, как-будто проскакивают FFы вместо данных. Надо разбираться.
Управляется плеер через последовательный порт. Реализованы команды DIR, PLAY <файл.wav>, DUMP <файл>, SUM <файл>.
Две последних команды выводят 16-ичный дамп файлов и считают 32-битную сумму файла, соответственно.
Вероятно, будет задействована дополнительная кнопка на плате для циклического проигрывания wav-файлов в каталоге, для чего необходимо доработать процедуру FindFirst и FindNext для FAT16
Сейчас переделываю под x-duino88-5v проект с 16-битным ЦАП-ом TDA1311 (от CD-ROM). Готово. Тестируется.