Разрабатываю небольшое устройство на МК Atmega644P. Кроме всего прочего, оно должно воспроизводить звук. Качественно.
Поэтому ШИМ вариант я отбросил. Хочу использовать 16 бит ЦАП.
Прикидки:
- МК - Atmega644P
- Питание - 5в
- Кварц на 18,432МГц (см. ниже)
- ЦАП - микросхема PT8211(аналог TDA1311) двухканальный ЦАП с SPI управлением на 16 бит
- Хранение - SD-ка на SPI, юзаю FatFS
- Выходной тракт - НЧ фильтр и усилок на LM386 с динамиком 8Ом 1Вт.
Как я вижу решение. Имеем несжатый WAV, где на каждую выборку приходится 16 бит (от -32768 до 32767). Чтобы правильно проиграть файл с дискретизацией 48кГц, мне надо раз в период отправлять эти 16 бит на ЦАП. Делать это я планирую в обработчике прерывания по совпадению таймера 1 со значением 12 (если прескаллер таймера 32). Собственно, кварц выбран именно для получения целого числа для сравнения. Получаем: 18432000/32/12 = 48000Гц (как вариант с делителем 17: 18432000/32/17 = 32000Гц, тоже используемое) К сожалению, типовая частота 44.1кГц не выйдет - делитель получается не целый (13,060...), а если его округлить до 13, то получим ~44.31кГц - боюсь, поплывёт скорость воспроизведения.
По поводу скорости. На одну выборку уходит 2 байта, при дискретизации 48кГц надо передавать на ЦАП данные со скоростью 2*48000/1024 ~= 94Кб/c.
RAM у МК всего 4кб. Вопрос - куда буфферизировать чтение с карты? Ставить микросхему SRAM под это дело? И справится ли SD в принципе с такой скоростью чтения?
Собственно вопрос - правильно ли я понимаю суть? Осуществимо ли такое?
Спасибо.


