Радио/ SD WAV плеер

05.05.2010

Итак, новый проект, о котором я упоминал ранее — штуковина, умеющая проигрывать WAV-файлы с SD (или microSD) карточки. Такую штуку, если сделать ее достаточно миниатюрной, можно встроить, например, в детскую игрушку или книгу.

Вообще, я не сразу пришел к этой идее. Изначально я хотел сделать «говорящую» игрушку следующим образом: взять простой 8-битный микроконтроллер и в его внутреннюю FLASH-память записать звуковой фрагмент. Но внутренняя память крайне мала по объему (менее 16 Кб), поэтому пришлось бы использовать самое низкое качество записи и довольствоваться несколькими секундами звучания.

Затем коллега на работе показал очень интересную микросхему: аппаратный декодер MP3 со встроенным ЦАП. Использование сжатого формата MP3 позволило бы сильно увеличить время записи. Начав искать примеры схем с использованием этого чипа я обнаружил, что в качестве хранилища данных предлагается использовать microSD карточку. При этом SD карты поддерживают протокол SPI, что позволяет легко работать с ней даже простому микроконтроллеру.

Объем современной, даже самой дешевой,  SD карты превышает 1 Гб, что эквивалентно трем часам непрерывного звучания несжатого звукового потока в CD качестве (16 бит, 44100 Гц). Поэтому необходимость использования MP3 отпадает сама собой, батарейка устройства (если делать его достаточно миниатюрным) закончится раньше, чем запись. Таким образом получается следующая схема: SD карта, 8-битный микроконтроллер, ЦАП, миниатюрный динамик и дисковая батарейка (как на материнских платах). К сожалению, большинство 8-битных микроконтроллеров не обладают встроенным ЦАП, поэтому необходим внешний.

Я уже начал было подбирать компоненты, когда наткнулся в Интернете на еще более элегантное решение: использовать вместо ЦАП ШИМ. ШИМ — это когда выдается прямоугольный сигнал, у которого меняется отношение периода следования импульсов к их длительности (скважность). Тогда, если посчитать среднее напряжение на выходе, оно будет меняться соответственно скважности. Таким образом получается аналог ЦАП. При этом, если подать ШИМ сигнал непосредственно на динамик, высокочастотная несущая будет отфильтрована в силу того, что динамик просто не в состоянии воспроизвести такие высокие частоты. Прелесть этого метода в том, что даже в простейших микроконтроллерах есть аппаратный выход ШИМ, что позволяет не тратить процессорное время на обработку сигнала.

Так что я решил, не мудрствуя лукаво, повторить уже готовую схему. Для экспериментов собрал схему на макетке, динамик взял от старой китайской детской игрушки, разъем для SD карточки от ридера.

В оригинальной схеме использовался микроконтроллер ATtiny85. В магазине такого не было,  и я взял ATtiny45, посчитав, что такая замена возможна, однако промахнулся. В моем контроллере оказалось в 2 раза меньше памяти, и прошивка просто не поместилась в него. Попытки залезть в код с целью уменьшить его не привели к работе устройства. Какой-то звук из динамика издается, но он совсем не похож на записанный файл. Так что пока эксперименты продолжаются.




  1. Привет, отличная идея и технология для подарка! Своими руками, не сложно и не дорого.

    Тех вопрос: сколько потребляет?

    • Потребляет дофига, миллиампер 30; я полагаю, что из-за microsd. Собственно поэтому в финальном устройстве такая огромная батарейка. Посмотри записи по тегу sd-wav.