Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Не сейчас, нет времени.

Оставьте задачу (issue) на github, как будет время - посмотрю

А вообще заниматься этим, не имея в железе, не самое интересное занятие. Можете своими силами попробовать, там довольно похоже на 7439 должно быть.
Аватара пользователя
kt840
Нашел транзистор. Понюхал.
Сообщения: 196
Зарегистрирован: Вт апр 05, 2011 15:39:55
Откуда: Красноярск

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение kt840 »

FOLKSDOICH У каждого свое мнение . Если есть желание переплачивать за никому не нужный (в рамках этого проекта) функционал , пожалуйста . :)
Аватара пользователя
nbo
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вт май 06, 2008 20:14:37
Откуда: Ukraine

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение nbo »

Прежде всего хочу поблагодарить автора за отличный проект.
Собрал на меге 16 - что было в наличии, RDA5807. Хочу собрать еще аудио контролер на tda7318.
Когда то по случаю купил дисплей 20*2 Noritake Itron CU20025ECPB-U1J. На нем получилась отличная картинка, так как он менее инерционен. Проект адаптировал под разрешение 20*2.
Но есть вопрос к автору: Данный дисплей умеет сам менять програмно яркость. Не могли бы Вы ткнуть носом что подправить в исходнике что бы управление яркостью шло не через ШИМ как сейчас, а использовать команды дисплея?
В приложении краткий даташит.
Спасибо.
Вложения
CU20025ECPB-U1J.rar
(24.99 КБ) 178 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Вероятно, опечатка в даташите. При такой комбинации RS и RW, что указана там в табличке для якобы установки яркости, на самом деле происходит запись данных в память, что в той же табличке видно.
Аватара пользователя
nbo
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вт май 06, 2008 20:14:37
Откуда: Ukraine

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение nbo »

Вот еще не могли бы посмотреть здесь?
Может действительно ошибка?
Вложения
CU-U_Application_Note.rar
(988.08 КБ) 194 скачивания
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Ага, действительно, есть какое-то хитрое включение - если сразу после команды Function Set послать байт 0b000000xx, то будет установлена яркость. Всего доступно 4 градации - 25%, 50%, 75% и 100%. Хотя может зависеть от типа модуля.

В общем, отключайте ШИМ, и врезайте в эти функции посылку нужных команд/данных
Аватара пользователя
nbo
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вт май 06, 2008 20:14:37
Откуда: Ukraine

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение nbo »

Спасибо, завтра попытаюсь поменять :beer:
Еще вопрос: экран спектроанализатора можно растянуть на 20 позиций?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Можно. Там всего 32 полосы, в данный момент на KS0066 отображаются по две в одном столбце, но можно легко переделать под свои нужды.
Аватара пользователя
nbo
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вт май 06, 2008 20:14:37
Откуда: Ukraine

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение nbo »

Спасибо, завтра буду менять. А то сегодня уже не соображаю :?
smira2007
Родился
Сообщения: 5
Зарегистрирован: Сб мар 04, 2017 16:27:44

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение smira2007 »

WiseLord Доброго времени суток!
Появился вопросик, можно ли сделать переключение входов PT2323 при помощи Второго энкодера, если убрать пару кнопок управления?
seirek
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вт фев 14, 2017 21:23:13
Откуда: Кострома

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение seirek »

WiseLord Доброго времени суток. Не подскажите, как адаптировать регулировку громкости (на полный диапазон - 84дб) и тембра (регулируется только вч) под TDA7468? Изменив grid с -79 на -63, громкость регулируется, но не полностью гасит. Если ставлю -84, то до -63 регулируется также, а с -64 увеличивается и до -84 опять уменшается. А тембра имеют один субадрес и на "вч" и на "нч", разделены на старший и младший полубайт.
Вложения
TDA7468.pdf
(248.49 КБ) 164 скачивания
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Насколько я понял, у этого контроллера есть два регулятора громкости. Первый, до регуляторов тембров, от -63 до 0дБ, с шагом 1дБ. Второй, после регуляторов, от -24дБ до 0дБ с шагом 8дБ.

Технически проще выставить второй постоянно на 0 (или вывести его в канал "Preamp") и регулировать его отдельно. А основную громкость - первым регулятором от -63 до 0дБ.

Либо просто программно совместить оба регулятора в один виртуальный, и регулировать как-то так:

Код: Выделить всё

Virtual -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 ...
Vol 1   -63 -62 -61 -60 -59 -58 -57 -56 -63 -62 -61 -60 -59 -58 -57 ...
Vol 1   -24 -24 -24 -24 -24 -24 -24 -24 -16 -16 -16 -16 -16 -16 -16 ...

Но я бы всё же для простоты это в отдельные регулировки вынес, "слотов" хватает. Для домашнего использования можно было бы выставить Vol2 в минимум, а основной громкости -63..0 вполне бы хватило. Нужно громче - можно отдельным регулятором поднять.

P.S. Смотрю, в даташите "виртуальная" громкость тоже как-то так и реализована.
Evgeny687311
Родился
Сообщения: 3
Зарегистрирован: Чт фев 16, 2017 09:01:02

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение Evgeny687311 »

Хотел плату начать делать, пока придут с Али комплектующие, не получается открыть pcbs.lay6, пишет "pcbs.lay6" ist keine Sprint-Layout Dadei. Что такое может быть?
seirek
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вт фев 14, 2017 21:23:13
Откуда: Кострома

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение seirek »

WiseLord, спасибо за ответ. Я в принципе с громкостью так и сделал, -63 - 0дб. А вот как регулировать "нч" ("вч" регулируется) тембр, при едином суб-адресе не понимаю. Подскажите пожалуйста примерный код, как это реализовать.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

В любой момент значения НЧ и ВЧ доступны как sndPar[MODE_SND_BASS].value и sndPar[MODE_SND_TREBLE].value (смотрите по аналогии с другими аудиопроцессорами). Поэтому при любой регулировке - НЧ или ВЧ, не важно - нужно просто посылать оба эти значения в одном байте.
Аватара пользователя
nbo
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вт май 06, 2008 20:14:37
Откуда: Ukraine

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение nbo »

Снова обращаюсь к Автору.
Переделал я подсветку под Noritake Itron. Все завелось, яркость регулируется - 4 уровня.
У меня к Вам просьба - не могли бы Вы посмотреть исходник во вложении на предмет того правильно ли я отмаштабировал экран спектроанализатора под индикатор 20*2? Мне кажется что нет. А также не могли бы глянуть на то правильно ли отмаштабированы шкалы (Bar) под такой индикатор.
Спасибо.
Вложения
noritake.rar
(769.61 КБ) 179 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Не совсем корректно.

Код: Выделить всё

   uint8_t i;
   uint8_t lcdBuf[16];

   if (userSybmols != LCD_LEVELS) {
      lcdGenLevels();
      userSybmols = LCD_LEVELS;
   }

   for (i = 0; i < 16; i++) {
      lcdBuf[i] = buf[2 * i] + buf[2 * i + 1];
      lcdBuf[i] += buf[32 + 2 * i] + buf[32 + 2 * i + 1];
      lcdBuf[i] >>= 2;
   }

   for (i = 0; i < 16; i++) {
      ks0066SetXY(i, 0);
      if (lcdBuf[i] < 8)
         ks0066WriteData(0x20);
      else
         ks0066WriteData(lcdBuf[i] - 8);
      ks0066SetXY(i, 1);
      if (lcdBuf[i] < 8)
         ks0066WriteData(lcdBuf[i]);
      else
         ks0066WriteData(0xFF);
   }

Данные для спектрограммы сохраняются в массиве buf[64]. Первые 32 байта - данные для левого канала, последующие 32 - для правого. Код выше всё что делает - перекладывает эти данные в массив lcdBuf из 16 элементов. 0,1,32,33 байты buf[] => в lcdBuf[0], 2, 3, 34, 35 байты buf[] => в lcdBuf[1] и так далее. Потом уже lcdbuf[16] выводится на экран.

Нельзя просто взять и сделать lcdBuf[20], больше ничего не поменяв. В этом случае, даже если программа не упадёт, данные для 17-20 элементов всё равно будут мусором по сути.

С масштабированием тоже не всё ОК. У меня изначально в showBar:

Код: Выделить всё

   if (min + max) {
      value = (int16_t)48 * (value - min) / (max - min);
...
   } else {
      value = (int16_t)23 * value / max;

Цифры не от балды. 48 - это 16 (длина строки) умноженное на 3 (количество "палочек" бара в одном знакоместе, то есть длина бара в этих "палочках". 23 это фактически то же самое, но для симметричных (тембры) баров - центральный отображается всегда, плюс есть по 23 влево и вправо.
В случае длины строки 20 там, теоретически, должно быть 60 и 29.
Аватара пользователя
nbo
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вт май 06, 2008 20:14:37
Откуда: Ukraine

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение nbo »

WiseLord, спасибо.
Буду переделывать.
seirek
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вт фев 14, 2017 21:23:13
Откуда: Кострома

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение seirek »

WiseLord, замучился уже с тембрами. Скажите, при такой архитектуре секции регулировки тембров (на скриншоте), возможна независимая регулировка тембров нижних и верхних частот? У меня не получается так, при регулировке вч, изменяются высокие, но и уменшаюся низкие, и наоборот.
Вложения
вч-нч.png
(233.5 КБ) 479 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Всё достаточно просто.

Возьмём, например, sndPar[MODE_SND_TREBLE].value. Диапазон -14..+14дБ с шагом 2 (используется grid_n14_14_2). В этом случае это .value будет числом от -7 до +7 - всего 15 возможных значений.

При этом значения от -7 до 0 согласно таблице выше должны превращаться в raw значения от 0 до 7 при посылке в шину, а значения от 0 до 7 - в raw значения от 15 до 8. Это согласуется с формулой val > 0 ? 15 - val : 7 + val, которая и для других аудипроцессоров применяется.

Соответственно, получится что-то вроде:

Код: Выделить всё

void tda7468SetBT(void)
{
   uint8_t data;
   int8_t val;

   I2CStart(TDA7468_I2C_ADDR);    // 0b10001000
   I2CWriteByte(TDA7468_TR_BASS); // 0b00000101

   val = sndPar[MODE_SND_BASS].value;
   data = val > 0 ? 15 - val : 7 + val;
   data <<= 4;

   val = sndPar[MODE_SND_TREBLE].value;
   data |= (val > 0 ? 15 - val : 7 + val);

   I2CWriteByte(data);

   I2CStop();
}

Эту функцию нужно дёргать и при регулировке тембра НЧ, и при регулировки тембра ВЧ, т.е. назначить в sndInit её на обе эти регулировки.

Практически никакой разницы с TDA7439 нет, только там на НЧ/СЧ/ВЧ выделены отдельные байты, и в tda7439SetBMT посылаются все они, один за другим (с автоинкрементом адреса). А здесь данные упаковываются в один байт согласно таблице, и посылается только этот один байт.
Ответить

Вернуться в «Статьи»