![]() |
![]() |
|||||||||||||||
Темброблок + анализатор спектра на базе ATmega16, графического дисплея 128x64 и TDA7439
Автор: WiseLord Будучи радиолюбителем уже достаточно давно, микроконтроллерами (Atmel) я начал увлекаться сравнительно недавно, с год назад. Как, наверное, и все, начинал с моргания светодиодом / термометра и т.п. Потом мне в руки попал графический дисплей 128x64, заведя который, мне захотелось приспособить его для чего-то интересного и полезного. Глядя на статьи, подобные этой, я захотел сделать что-то подобное, заменив в своём усилителе "аналоговую" LM1036. А поскольку дисплей графический, то в фоновом режиме выводить на него ни много ни мало - спектрограмму сигнала. В итоге это заняло не один месяц, но всё получилось. Вот как выглядит результат в составе усилителя (сразу извиняюсь за качество некоторых картинок – кроме телефона фотографировать мне не на что): Плата темброблока закреплена вертикально, плата блока управления закреплена с дисплеем на передней панели: Вот как выглядят разные режимы работы блока управления: Итак, дисплей. Мой называется SG12864, пикселы светятся оранжевым на сине-фиолетовом фоне. Вообще подобные дисплеи бывают разные, но управление у них одинаковое. Ещё на этапе знакомства с дисплеем я заменял его на "обычный", у которого чёрные пикселы на зеленовато-жёлтом фоне - всё работало без изменений кода. Вот мой дисплей: Схема блока управления: В качестве операционного усилителя (U1) я использовал MCP602T. Его "фишка" - rail-to-rail, то есть он обеспечивает неискажённый выходной сигнал практически во всём диапазоне питания (плюс-минус ~0.1В). В принципе, использовать можно любой низковольтный сдвоенный ОУ (тот же LM358 у меня тоже вполне работал), но использование rail-2-rail ОУ полезно тем, что его выходной каскад при однополярном 5В питании будет обеспечивать практически весь диапазон для аналогово-цифрового преобразователя ATmega16 (U3). Тогда как обычный ОУ при 5В питании будет выдавать корректный сигнал только в диапазоне выходного напряжения около 1.5В–3.5В. Максимальная высота "столбиков" спектроанализатора будет чуть ниже, повышение же уровня сигнала на входе ОУ приведёт к искажению сигнала и появлению гармоник в отображаемом спектре (не звуковом тракте, к счастью). Как бонус в схему добавлены часы реального времени на DS1307 (U4). Пока не реализовывал, но, вероятно, в будущем добавлю в прошивку функционал будильника. Для регулировки громкости/тембров и всего прочего используется обычный механический энкодер типа PEC12 (S6). Фотоприёмник пульта - что-то вроде TSOP1736 (я использовал более миниатюрный TSOP34836). Плата блока управления сделана под размер платы дисплея и базируется, в основном, на SMD компонентах (типоразмер 1206). Вот как она выглядит и стыкуется с дисплеем: Пульт управления я использовал самый дешёвый, который нашёл на радиорынке. Вот такой: Как самый хитрый, я заранее позаботился о том, чтобы другие подобные пульты, которые могут быть, например, от телевизора, не мешали моему девайсу. Вскрыв пульт, и с трудом прочитав надпись на микросхеме, я нашёл некое подобие даташита на неё. Как видно, вывод 14 микросхемы можно соединить с любым из выводов 3–13, получив тем самым разный код устройства. По умолчанию 14 вывод закорочен на 3-й, что даёт код устройства 0x00, используемый для телевизоров. Я просто отпаял 14-й вывод, приподнял над площадкой и проводком набросил на вывод 10: Так пульт не должен мешать телевизорам, и телевизоры пультам. На всякий случай я в архиве выложил hex-файл и для стандартного кода 0x00, но работу с ним я не проверял. В качестве темброблока используется микросхема TDA7439. Возможности у неё довольно неплохие:
Исходный код написан на C, под компилятор avr-gcc. Fuse-биты для avrdude: lfuse:w:0xff:m -U hfuse:w:0xd1:m. Я пользуюсь Linux, поэтому не знаю как там выглядят галочки в этих странных графических прошивальщиках, в любом случае подбирайте галочки по вышеуказанным битам где-нибудь здесь. Небольшой пример работы девайса на YouTube На этом, пожалуй, и всё. Удачи в повторении.
P.S. Обновлённая версия прошивки поддерживает также TDA7313 и TDA7318. Также нарисованы более красивые крупные шрифты. Подробности - на форуме, в частности, в этом посте. P.P.S. Добавлена поддержка более привычных для многих знакосинтезирующих дисплеев на базе контроллеров HD44780/KS0066. Ориентация - на размер дисплея 2x16. Подробности - всё там же на форуме. Последние версии исходного кода доступны на googlecode. Ветка master - для графических дисплеев (варианты прошивки с суффиксом _b - для WG12864B дисплея, у которого входы CS - инверсные). Ветка lcd - для знакосинтезирующих.
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |