РадиоКот :: Темброблок + анализатор спектра на базе ATmega16, графического дисплея 128x64 и TDA7439
Например TDA7294

РадиоКот >Схемы >Аудио >Разное >

Теги статьи: Добавить тег

Темброблок + анализатор спектра на базе ATmega16, графического дисплея 128x64 и TDA7439

Автор: WiseLord
Опубликовано 30.12.2013
Создано при помощи КотоРед.

Будучи радиолюбителем уже достаточно давно, микроконтроллерами (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. Возможности у неё довольно неплохие:

  • Четырёхканальный селектров входов. У себя я использую только три, четвёртый пока зарезервирован (может быть, осилю когда-нибудь цифровой FM-приёмник и добавлю).
  • Предусиление в диапазоне 0..30дБ с шагом 2дБ. В схеме для каждого входа запоминается свой уровень предусиления, который и выбирается при смене входа.
  • После этих блоков из микросхемы выведены выходы селектора/предусилителя, которые подключаются к АЦП микроконтроллера.
  • Сдвоенный (параллельно оба канала) регулятор громкости (я назвал его "Усиление", хотя это скорее ослабление) в диапазоне -47..0дБ.
  • Регуляторы тембров НЧ, СЧ, ВЧ в диапазоне -14..+14дБ с шагом 2дБ.
  • Отдельные для левого и правого каналов выходные регуляторы громкости в диапазоне -79..0дБ. Программно я оформил их в виде одного регулятора + баланса -21..+21дБ.


Ну и характеристики вроде КНИ порядка 0.01% производитель обещает неплохие.

Вот схема и внешний вид готовой платы:

Текстовые метки ("Громкость", "Баланс" и прочие) хранятся в EEPROM. В архиве лежит файл eeprom.bin, "заточенный" под русскоязычные метки. Адреса меток в bin-файле можно глянуть в исходниках в файле eeprom.h, а коды символов - в шрифте font.h, так что при желании можно подправить eeprom.bin в любом hex-редакторе под себя. Кодировка там не стандартная вроде koi8 или cp1251, а подобная кодировке в русифицированных HD-44780 дисплеях (коды русских и латинских символов с одинаковым начертанием не отличаются).

Исходный код написан на 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 - для знакосинтезирующих.


Файлы:
Архив с прошивкой и исходниками


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

128 4 0
23 2 0