РадиоКот :: Контроллер домашней аудиосистемы с анализатором спектра
Например TDA7294

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

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

Контроллер домашней аудиосистемы с анализатором спектра

Автор: WiseLord, wiselord1983@gmail.com
Опубликовано 08.12.2015
Создано при помощи КотоРед.

Вступление

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

Изначально проект должен был быть простым регулятором тембров на базе TDA7439 с возможностью отображения спектра аудиосигнала, но по просьбам форумчан Радиокота в него постепенно добавлялись новые функции, поддержка нового железа, и т.д. Да и самому мне было интересно развивать этот проект - лично я сам сделал на его базе два стереоусилителя на TDA7293.

По мере увеличения функционала проект перестал вмещаться в 16кБайт Flash-памяти изначально выбранного микроконтроллера ATmega16. Поэтому в какой-то момент пришлось сменить контроллер на ATmega32, и основной веткой развития стала считаться таковая именно на нём. При этом, что важно, схемотехника не поменялась, то есть достаточно было сдуть феном в старом проекте ATmega16, заменить её на ATmega32 - и получить новое, более функциональное, устройство.

Старая ветка кода на ATmega16 на данный момент больше не развивается, как и появившаяся чуть позднее ветка на ATmega8 (упрощённая, с одним каналом для анализа спектра).

Дополнительно переход на ATmega32 дал возможность использовать половину ОЗУ этого контроллера (килобайт из двух) для реализации кадрового буфера, что позволило очень быстро рисовать на экране разные вкусности без использования функций задержек.

В результате эволюции получился своего рода конструктор, позволяющий без особых усилий собрать своё сочетание разных железок в одну полноценную систему.

Данная статья - попытка полностью описать функционал устройства, чтобы на форуме не задавались постоянно одни и те же вопросы. Ибо на форуме информация оказалась "размазана" по страницам темы, а ведь не все любят читать тему форума целиком - подавай им прямо ответ прямо сейчас.

Именно поэтому в статье много текста и большое количество картинок и пояснений.

Варианты схемы устройства

Поддерживаемые дисплеи

В качестве основного дисплея используется монохромный LCD на базе контроллера KS0108.

Дисплеи на контроллере KS0108, как правило, бывают двух видов - тип А (как на картинке выше) и тип B. Второй вариант - чуть поменьше размером и имеет другую цоколёвку и противоположную полярность сигналов CS1/CS2.

Схема устройства на базе KS0108A:

Схема устройства на базе KS0108B:

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

Также сравнительно недавно была добавлена поддержка более известных и простых знакосинтезирующих дисплеев на базе контроллера KS0066 (он же HD44780) размером 16x2. Причём подключать их можно как напрямую, так и через I²C переходник на базе PCF8574, которые (как отдельно, так и в виде готовых для подключения к этим дисплеям плат) легко за копейки найти на том же Aliexpress.

Схема устройства на базе KS0066:

Таким образом, можно использовать один из пяти вариантов:

  • Графический дисплей 128x64 на базе KS0108A;
  • Графический дисплей 128x64 на базе KS0108B;
  • Графический дисплей 128x64 на базе ST7920;
  • Символьный дисплей на базе KS0066;
  • Символьный дисплей на базе KS0066 по шине I²C через переходник PCF8574.

Но, уж поверьте мне, на графическим дисплее всё выглядит гораздо красивее, поэтому рекомендую использовать всё же именно один из них. Для каждого из вариантов дисплея существует своя прошивка. Таким образом, всего имеется 5 HEX-файлов с соответствующими именами.

Пояснения по схемам

Выходы расширения (EXTensions) - PC2/PC3/PC4. В зависимости от необходимости, могут использоваться в одной из трёх ролей:

  • Термоконтроль. PC2 в этом случае - шина 1-wire, на которую вешаются два датчика DS12B20, по сигналам от которых на выводах PC3/PC4 появляются сигналы (активный уровень - лог. 1) для управления вентиляторами охлаждения радиаторов УНЧ. В случае выбора режима термоконтроля нельзя использовать LM7001 и PGA2310.
  • Управление LM7001. В этом случае EXT-входы - программный SPI для управления этим синтезатором частот. Термоконтроль в этом случае невозможен, как и использование регулятора громкости на базе PGA2310.
  • Управление PGA2310. Здесь аналогично - программный SPI для управления этим регулятором громкости. Термоконтроль и работа с LM7001 в этом случае невозможна.

Необходимый режим выбирается с помощью редактора EEPROM, описанном ниже.

Устройство поддерживает работу с различными аудиопроцессорами и FM-тюнерами. В зависимости от их аппаратного функционала будет различаться и функционал конечного устройства.

Поддерживаемые аудиопроцессоры:

  • TDA7439 - 4 стерео входа (с подстройкой уровня), громкость, тембры НЧ, СЧ и ВЧ, баланс, стерео выход. Это мой основной вариант.
  • TDA7312 - 4 стерео входа, громкость, тембры НЧ и ВЧ, баланс, стерео выход.
  • TDA7313 - 3 стерео входа (с подстройкой уровня), громкость, тембры НЧ и ВЧ, фронтальный и боковой баланс, тонкоррекция, квадро выход.
  • TDA7314 - 1 стерео вход (с подстройкой уровня), громкость, тембры НЧ и ВЧ, фронтальный и боковой баланс, тонкоррекция, квадро выход.
  • TDA7315 - 1 стерео вход, громкость, тембры НЧ и ВЧ, баланс, стерео выход.
  • TDA7318 - 4 стерео входа (с подстройкой уровня), громкость, тембры НЧ и ВЧ, фронтальный и боковой баланс, квадро выход.
  • PT2314 - 4 стерео входа (с подстройкой уровня), громкость, тембры НЧ и ВЧ, фронтальный и боковой баланс, тонкоррекция, квадро выход.
  • TDA7448 - 6-тиканальный вход, громкость, фронтальный и боковой баланс, центральный канал, канал сабвуфера, 6-тиканальный выход.
  • PT2323/PT2322 - 4 стерео входа, 5.1 вход, громкость, тембры НЧ, СЧ и ВЧ, фронтальный и боковой баланс, центральный канал, канал сабвуфера, поддержка эмуляции псевдо 3D (из стерео), 3D эффект, режим работы в обход темброблока, 5.1 выход.
  • PGA2310 - высококачественный стерео регулятор громкости.

Все аудиопроцессоры, кроме PGA2310, подключаются по шине I²C.

Поддерживаемые FM-тюнеры:

  • Работа без тюнера.
  • Тюнер на базе микросхемы TEA5767.
  • Тюнер на базе микросхемы RDA5807 с поддержкой приёма RDS.
  • Модуль TUX032, извлекаемого из автомагнитол SONY.
  • Любой тюнер на базе синтезатора частот LM7001.

Все тюнеры, кроме LM7001, подключаются по шине I²C.

Необходимый аудиопроцессор и тюнер выбираются также с помощью редактора EEPROM, там же настраиваются необходимые их параметры.

Входы IN_L и IN_R - это входы собственно анализатора спектра. Проходя через ОУ, они формируют на аналоговых входах микроконтроллера сигнал, который он оцифровывает, и, проведя анализ Фурье, выводит в виде спектра на экран. Подстроечные резисторы на входах могут понадобиться для ограничения уровня входного сигнала, если столбики спектра "зашкаливают". Но, как правило, при типичных входных уровнях сигнала эти резисторы не так уж и нужны.

Сравнительно важно обеспечить на аналоговых входах МК ровно половину его питания (это обеспечивается резистивным делителем на "+" входе ОУ). В противном случае МК будет считать не равный половине питания уровень как наличие очень низкочастотного сигнала (0 Гц) и отображать это в виде одного-двух НЧ-столбиков. В любом случае, некоторую подстройку можно осуществить в редакторе EEPROM, о котором речь пойдёт чуть позднее.

Входы анализатора спектра подключаются, как правило, к аудиопроцессору в точке, в которой мультиплексируется сигнал от всех входов аудиопроцессора, но его уровень ещё не затронут регулировками тембров/громкости и т.д. В общем, смотрите в даташиты микросхем, чтобы понять, куда именно надо подключать. На моих платах темброблоков эти точки обозначены выводами с подписями LSP и RSP.

Устройство управляется с передней панели с помощью пяти кнопками и механического энкодера. Использовать можно практически любой энкодер, число фаз на щелчок настраивается в редакторе EEPROM. Кнопка энкодера, если у такового она имеется, может дублировать или заменить кнопку 5 передней панели.

Также для управления можно использовать ИК пульт ДУ, работающий по протоколу RC5 или NEC. Это наиболее часто встречающиеся протоколы, так что, думаю, проблем с поиском подходящего пульта не будет. Использовать пульт желательно, так как в этом случае появляется возможность использовать все доступные функции, которые сложно адекватно разместить на пяти кнопках передней панели. Так, например, тонкоррекция, 3D эффект, скорость падения столбиков анализатора и некоторые другие вещи можно включить только с пульта - на передней панели кнопок для того недостаточно.

Управление устройством в ждущем режиме

Ждущий режим

Итак, Вы решились и собрали этот проект и прошили соответствующей дисплею прошивкой. Если всё спаяно верно, то, как принято было когда-то писать в журналах типа "Радиолюбитель", устройство в наладке не нуждается. И в самом деле, при верной сборкой максимум, что может понадобиться - это подстройка контрастности экрана соответствующим переменным резистором.

При первом включении мы попадаем на экран "Ждущий режим". В этом режиме яркость дисплея устанавливается на минимум, а на экране отображается текущее время:

Кроме того, на выходах MUTE и STBY присутствует логический 0. Этими выводами можно управлять оконечным усилителем. Как правило, УНЧ на микросхемах (я, повторюсь, использовал TDA7293) имеют подобные управляющие входы. Также вывод STBY можно использовать для управления реле, которое обесточивает в ждущем режиме всё устройство (тюнер, аудиопроцессор, УНЧ), кроме описываемого в статье блока управления.

В ждущем режиме отключена обработка всех кнопок пульта, кроме кнопки включения устройства.

Также в ждущем режиме отключатся почти все кнопки на передней панели. Остаются работать только:

  • Кнопка 1 - выход из ждущего режима по короткому нажатию, то есть, включение устройства.
  • Сочетание кнопок 1+2 - вход в режим обучения пульта ДУ по длинному нажатию.
  • Сочетание кнопок 1+3 - вход в режим настройки порога включения вентиляторов охлаждения радиаторов УНЧ.

Режим обучения пульта ДУ

 

В этом режиме отображается состояние входов кнопок и энкодера (вторая строка), а также код кнопки на пульте, связанной с текущей функции. Например, на картинке выше можно видеть, что для функции "Standby mode" задействован пульт RC5 с адресом 0x00 и кодом кнопки 0x0C.

Если нажать на пульте какую-нибудь кнопку, то её код команды, код адреса и тип протокола отобразятся на экране. Для сохранения этих параметров в EEPROM нужно нажать кнопку 5 на передней панели. После этого обучение функции "Standby mode" будет считаться законченным, и на экране отобразятся данные для следующей функции, "Mute". И так, нажимая попеременно кнопки на пульте и кнопку 5 передней панели, можно пройтись по всем доступным функциям и связать их со своим пультом.

Если одна и та же кнопка на пульте будет применена к разным функциям, будет срабатывать только первое назначение в списке. Поэтому "лишние" функции лучше повесить на кнопку пульта "STANDBY", как самую первую в списке фунций.

Выйти из режима обучения можно длительным нажатием кнопки 1 или же подождав несколько секунд, ничего не нажимая.

Режим настройки температурного порога

В этом режиме отображаются температуры от датчиков и порог включения вентиляторов охлаждения выходных каскадов УНЧ. При этом предусмотрен гистерезис в 5°C. Значение порога включения (63°C на картинке) настраивается энкодером.

Выйти из этого режима можно также длительным нажатием кнопки 1 или подождав несколько секунд.

Управление устройством в основном режиме

Нажав в ждущем режиме кнопку 1 на передней панели (или кнопку "STANDBY" пульта), мы попадаем в основной рабочий режим. При этом выход STBY, а затем, с некоторой задержкой, MUTE, переходят в состояние лог. 1.

Повторное короткое той же кнопки снова переведёт схему в ждущий режим. При этом сначала в лог. 0 уходит выход MUTE, а затем - STBY, что позволяет "мягко", без щелчков в колонках, выключить усилитель.

Экран по умолчанию

В основном режиме на дисплее при бездействии пользователя может отображаться один из следующих экранов, между которыми можно циклически переключаться соответствующей кнопкой пульта ДУ, либо длинным нажатием кнопки 2 на передней панели.

  • Экран с текущим временем (как и в ждущем режиме, но уже на большей яркости):

  • Экран FM-тюнера (только если выбран вход тюнера).

  • Экран со спектром сигнала:

В свою экран спектра может отображать не только стереоспектр, но и смешанный от обоих каналов:

Или уровни сигнала по левому и правому каналам:

Между этими тремя вариантами экрана спектра можно переключаться кнопкой на пульте или с передней панели коротким нажатием кнопки 3.

Экран по умолчанию назван так потому, что именно на него возвращается устройство после любых регулировок через несколько секунд.

Отрегулировать яркость можно энкодером, вход в настройку яркости осуществляется удержанием кнопки 1 (или соответствующейй кнопки пульта ДУ).

Выбор входа

Нажатием соответствующе обученной кнопки пульта или коротким нажатием кнопки 2 на передней панели можно выбрать текущий вход.

Первый (иногда он же единственный) вход любого аудиопроцессора - это всегда вход тюнера. Только при выборе первого входа задействуются функции управления FM-тюнерами и появляется возможность выставить экран тюнера как экран по умолчанию.

Другие входы могут быть подключены к другим устройствам. Например, можно на том же Aliexpress купить какой-нибудь Bluetooth аудио девайс и подключить его внутри усилителя к соответствующему вход аудиопроцессора:

Или же, подключить наш умный усилитель к телевизору:

Некоторые из поддерживаемых аудиопроцессоров позволяют подстраивать усиление по входам, что позволяет выровнять сигналы от разных устройств, чтобы на спектрограмме они отображались более-менее равномерно. Если это возможно для данного входа данного аудиопроцессора, то такая регулировка производится энкодером:

Основные регулировки звука

С помощью энкодера или сответствующих кнопок пульта из экрана по умолчанию можно начать регулировку громкости, которая является основным регулируемым аудиопараметром. При этом экран сменяется на экран регулировки громкости:

Также из любого основного режима (кроме радио) нажатием кнопки "MUTE" на пульте или коротким нажатием кнопки 4 можно временно отключить звук:

Кнопкой "MENU" на пульте или коротким нажатием кнопки 5 можно пройтись по другим аудиопараметрам и отрегулировать их. Экраны перебираются в следующем порядке.

Тембр НЧ:

Тембр СЧ:

Тембр ВЧ:

Предусиление:

Баланс фронт/тыл:

Баланс левый/правый:

Уровень центрального канала:

Уровень канала сабвуфера:

Если аудиопроцессор не поддерживает какой-то из параметров, этот экран просто пропускается.

Также некоторые аудиопроцессоры поддерживают параметры с двумя состояниями (вкл/выкл). Эти параметры переключаются только с пульта ДУ.

Тонкоррекция (TDA7313, TDA7314, PT2314):

Псевдоквадрафонический звук (PT2323):

3D эффект (PT2322)

Сигнал в обход регулятора тембров (PT2322)

Если функция не поддерживается на выбранном аудиопроцессоре, соответствующую кнопку пульта можно просто не обучать.

Управление FM тюнером.

Если выбран вход 1 ("Тюнер"), в качестве основного экрана можно выбрать экран FM-тюнера. При этом на экране будет отображаться текущая частота, уровень сигнала, факт наличия стереоприёма, номер сохранённой станции, номер "любимой" станции:

Номер "любимой" станции - это привязка некоторой частоты к одной из 10 цифровых кнопок пульта. Такая функция позволяет быстро выбрать одну из 10 "любимых" станций.

Кроме этого, можно просто сохранить до 50 частот в EEPROM. Станции всегда упорядочены по возрастанию частоты. Если некоторая частота не сохранена в EEPROM, на месте её номера будут отображаться прочерки:

В режиме радио кнопки на передней панели имеют несколько отличное назначение. Так, например, кнопки 3 и 4 в этом случае позволяют "прыгать" по сохранённым частотам вверх и вниз. Также для этого используются отдельные кнопки пульта ДУ.

Длительное нажатие кнопки 4 (или специальной кнопки на пульте ДУ) переводит устройство в режим настройки частот, что индицируется символами <<>> в правой нижней части экрана. Повторное длительное нажатие кнопки 4 выводит устройство из режима настройки частот.

В режиме настройки частот энкодер выполняет функцию перемещения по частотной шкале с шагом 0.1МГц, кнопки 3 и 4 - перемещение с шагом 1МГц. Длительное нажатие кнопки 5 сохраняет текущую частоту в EEPROM или же удаляет, если она была сохранена туда ранее. Цифровые кнопки пульта назначают текущую частоту как любимую, или же отменяют уже имеющееся такое назначение.

В случае использования модуля RDA5807 в качестве FM-тюнера система пытается задействовать имеющийся в нём RDS декодер. При наличии сигнала достаточного уровня вместо спектра будет отображаться передаваемая станцией информация:

Настройка времени.

Для отображения на экране текущего времени нужно нажать соответствующую кнопку пульта или длительно удержать кнопку 3. После этого короткие нажатия этой же кнопки введут устройство в режим настройки времени, перебирая регулируемый параметр:

Выбранный параметр настраивается энкодером. День недели не настраивается, а вычисляется из настроенной даты. После настройки года система снова переходит в режим отображения времени.

Время хранится в часах реального времени DS1307 (можно использовать также более точную DS3231 с термокомпенсацией) и за счёт литиевой батарейки не сбрасывается при обесточивании устройства.

Таймер отключения.

Ложась спать под музыку, можно настроить систему на выключение через какое-то время. Для входа в режим настройки таймера нужно вызвать экран настройки времени (см. выше) и повторным длительным нажатием кнопки 3 перейти в режим отображения таймера выключения:

Последующие короткие нажатия будут перебирать задаваемое таймеру значение. Выбираемые значения: 2 мин, 5 мин, 10 мин, 20 мин, 40 мин, 1 час, 1.5 часа, 2 часа, 3 часа, 5 часов. Через две секунды после выбора предуставленного значения таймер начинает отсчёт:

После чего через несколько секунд система начинает отображать экран по умолчанию.

Когда до отключения останется меньше 1 минуты, этот экран начнёт отображаться постоянно.

Таймер сбрасывается при выключении устройства (переходе в ждущий режим).

Кроме того, в системе поддерживается таймер тишины, который отключает систему через 10 минут отсутствия сигнала или каких-либо действий пользователя. Этот таймер настраивается через редактор EEPROM.

Будильник.

Систему можно настроить на пробуждение в определённое время, при этом указать дни недели, в которое необходимо пробуждаться, а также вход, который будет активирован при пробуждении:

Попасть на этот экран можно из экрана таймера длительным нажатием кнопки 3, либо нажатием соответствующей кнопки на пульте ДУ.

Последующие короткие нажатия этой кнопки будут перебирать регулируемый параметр, аналогично настройке времени:

Редактор EEPROM.

Все текстовые метки (вроде "Громкость", "Тембр ВЧ" и т.д.) хранятся в EEPROM, то есть их можно редактировать без необходимости смены прошивки. Также в EEPROM выбирается нужный аудиопроцессор, тюнер, настраиваются прочие параметры, которые не реализованы в меню.

Изначально редактировать файл EEPROM приходилось вручную с помощью hex-редактора. Это было не очень удобно - приходилось открывать eeprom.h исходников и менять значения по тамошним адресам. Особенным адом была правка текстовых строк, для которых для совместимости с русифицированными дисплеями на KS0066 была выбрана крайне нестандартная кодировка.

Поэтому относительно недавно я написал специальный редактор файлов EEPROM этого проекта, в котором все данные манипуляции делаются очень легко.

На первой вкладке можно отредактировать текстовые метки или, вообще, перевести проект на другой язык:

В левой части отображается содержимое EEPROM в том виде, как в любом hex-редакторе. В меню можно открыть существующий файл либо сохранить текущее состояние в новый файл.

На прочих вкладках выбираются аудиопроцессор и тюнер, а также настраиваются различные параметры устройства:

Некоторые из этих параметров можно будет изменить прямо во время работы устройства, другие же доступны только в редакторе.

Прошивка

Я для прошивки под Linux использую консольную утилиту avrdude. Она имеется в наличии и под Windows, более того, используется во многих графических программах-прошивальщиках.

В первую очередь прошивается файл FLASH под свой дисплей. Например, для KS0108A:

avrdude -p atmega32 -c stk500v2 -P avrdoper -U flash:w:flash/ampcontrol_m32_ks0108a.hex:i

После этого прошивается файл EEPROM с нужным языком, при необходимости предварительно отредактированный:

avrdude -p atmega32 -c stk500v2 -P avrdoper -U eeprom:w:eeprom/eeprom_ru.bin:r

Ну и, наконец, FUSE-биты:

avrdude -p atmega32 -c stk500v2 -P avrdoper -U lfuse:w:0x3F:m -U hfuse:w:0xC1:m

В этих примерах выбран программатор stk500v2 и порт avrdoper. Под другие программаторы - другие опции. Не спрашивайте меня, какие, лучше погуглите.

Ссылки

Если кто-то предпочитает использовать разные странные графические прошивальщики с расставлением "галочек" по каждому биту, он может воспользоваться этим сайтом.

Последняя версия редактора EEPROM для Windows, синхронизированная с последней версией исходного кода, находится на Dropbox.

Сами исходные коды проекта и редактора EEPROM доступны на GitHub. Проект написан на C под компилятор avr-gcc. Редактор EEPROM написан с использованием Qt5.

Также есть страничка проекта на английском, которую я периодически обновляю.

Как работает устройство вживую, можно посмотреть в этом видеоролике. Правда, видео снято на этапе, когда иконок ещё не было, но оценить, что к чему, вполне можно.

Там же на моём канале можно найти и другие связанные с этим проектом (и не только с ним) видеоролики.

По всем вопросам касательно проекта можно обращаться на форум.


Файлы:
Редактор EEPROM
Файлы прошивки
Печатные платы
Схема принципиальная
Проект Proteus


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




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

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

148 5 3
37 3 0