Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Не сейчас, нет времени.
Оставьте задачу (issue) на github, как будет время - посмотрю
А вообще заниматься этим, не имея в железе, не самое интересное занятие. Можете своими силами попробовать, там довольно похоже на 7439 должно быть.
Оставьте задачу (issue) на github, как будет время - посмотрю
А вообще заниматься этим, не имея в железе, не самое интересное занятие. Можете своими силами попробовать, там довольно похоже на 7439 должно быть.
- kt840
- Нашел транзистор. Понюхал.
- Сообщения: 196
- Зарегистрирован: Вт апр 05, 2011 15:39:55
- Откуда: Красноярск
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
FOLKSDOICH У каждого свое мнение . Если есть желание переплачивать за никому не нужный (в рамках этого проекта) функционал , пожалуйста . 
- nbo
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Вт май 06, 2008 20:14:37
- Откуда: Ukraine
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Прежде всего хочу поблагодарить автора за отличный проект.
Собрал на меге 16 - что было в наличии, RDA5807. Хочу собрать еще аудио контролер на tda7318.
Когда то по случаю купил дисплей 20*2 Noritake Itron CU20025ECPB-U1J. На нем получилась отличная картинка, так как он менее инерционен. Проект адаптировал под разрешение 20*2.
Но есть вопрос к автору: Данный дисплей умеет сам менять програмно яркость. Не могли бы Вы ткнуть носом что подправить в исходнике что бы управление яркостью шло не через ШИМ как сейчас, а использовать команды дисплея?
В приложении краткий даташит.
Спасибо.
Собрал на меге 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
Вероятно, опечатка в даташите. При такой комбинации RS и RW, что указана там в табличке для якобы установки яркости, на самом деле происходит запись данных в память, что в той же табличке видно.
- nbo
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Вт май 06, 2008 20:14:37
- Откуда: Ukraine
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Вот еще не могли бы посмотреть здесь?
Может действительно ошибка?
Может действительно ошибка?
- Вложения
-
- CU-U_Application_Note.rar
- (988.08 КБ) 194 скачивания
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Ага, действительно, есть какое-то хитрое включение - если сразу после команды Function Set послать байт 0b000000xx, то будет установлена яркость. Всего доступно 4 градации - 25%, 50%, 75% и 100%. Хотя может зависеть от типа модуля.
В общем, отключайте ШИМ, и врезайте в эти функции посылку нужных команд/данных
В общем, отключайте ШИМ, и врезайте в эти функции посылку нужных команд/данных
- nbo
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Вт май 06, 2008 20:14:37
- Откуда: Ukraine
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Спасибо, завтра попытаюсь поменять
Еще вопрос: экран спектроанализатора можно растянуть на 20 позиций?
Еще вопрос: экран спектроанализатора можно растянуть на 20 позиций?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Можно. Там всего 32 полосы, в данный момент на KS0066 отображаются по две в одном столбце, но можно легко переделать под свои нужды.
- nbo
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Вт май 06, 2008 20:14:37
- Откуда: Ukraine
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Спасибо, завтра буду менять. А то сегодня уже не соображаю 
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
WiseLord Доброго времени суток!
Появился вопросик, можно ли сделать переключение входов PT2323 при помощи Второго энкодера, если убрать пару кнопок управления?
Появился вопросик, можно ли сделать переключение входов PT2323 при помощи Второго энкодера, если убрать пару кнопок управления?
-
seirek
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вт фев 14, 2017 21:23:13
- Откуда: Кострома
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
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
Насколько я понял, у этого контроллера есть два регулятора громкости. Первый, до регуляторов тембров, от -63 до 0дБ, с шагом 1дБ. Второй, после регуляторов, от -24дБ до 0дБ с шагом 8дБ.
Технически проще выставить второй постоянно на 0 (или вывести его в канал "Preamp") и регулировать его отдельно. А основную громкость - первым регулятором от -63 до 0дБ.
Либо просто программно совместить оба регулятора в один виртуальный, и регулировать как-то так:
Но я бы всё же для простоты это в отдельные регулировки вынес, "слотов" хватает. Для домашнего использования можно было бы выставить Vol2 в минимум, а основной громкости -63..0 вполне бы хватило. Нужно громче - можно отдельным регулятором поднять.
P.S. Смотрю, в даташите "виртуальная" громкость тоже как-то так и реализована.
Технически проще выставить второй постоянно на 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
Хотел плату начать делать, пока придут с Али комплектующие, не получается открыть pcbs.lay6, пишет "pcbs.lay6" ist keine Sprint-Layout Dadei. Что такое может быть?
-
seirek
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вт фев 14, 2017 21:23:13
- Откуда: Кострома
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
WiseLord, спасибо за ответ. Я в принципе с громкостью так и сделал, -63 - 0дб. А вот как регулировать "нч" ("вч" регулируется) тембр, при едином суб-адресе не понимаю. Подскажите пожалуйста примерный код, как это реализовать.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
В любой момент значения НЧ и ВЧ доступны как sndPar[MODE_SND_BASS].value и sndPar[MODE_SND_TREBLE].value (смотрите по аналогии с другими аудиопроцессорами). Поэтому при любой регулировке - НЧ или ВЧ, не важно - нужно просто посылать оба эти значения в одном байте.
- nbo
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Вт май 06, 2008 20:14:37
- Откуда: Ukraine
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Снова обращаюсь к Автору.
Переделал я подсветку под Noritake Itron. Все завелось, яркость регулируется - 4 уровня.
У меня к Вам просьба - не могли бы Вы посмотреть исходник во вложении на предмет того правильно ли я отмаштабировал экран спектроанализатора под индикатор 20*2? Мне кажется что нет. А также не могли бы глянуть на то правильно ли отмаштабированы шкалы (Bar) под такой индикатор.
Спасибо.
Переделал я подсветку под Noritake Itron. Все завелось, яркость регулируется - 4 уровня.
У меня к Вам просьба - не могли бы Вы посмотреть исходник во вложении на предмет того правильно ли я отмаштабировал экран спектроанализатора под индикатор 20*2? Мне кажется что нет. А также не могли бы глянуть на то правильно ли отмаштабированы шкалы (Bar) под такой индикатор.
Спасибо.
- Вложения
-
- noritake.rar
- (769.61 КБ) 179 скачиваний
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Не совсем корректно.
Данные для спектрограммы сохраняются в массиве 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:
Цифры не от балды. 48 - это 16 (длина строки) умноженное на 3 (количество "палочек" бара в одном знакоместе, то есть длина бара в этих "палочках". 23 это фактически то же самое, но для симметричных (тембры) баров - центральный отображается всегда, плюс есть по 23 влево и вправо.
В случае длины строки 20 там, теоретически, должно быть 60 и 29.
Код: Выделить всё
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
WiseLord, спасибо.
Буду переделывать.
Буду переделывать.
-
seirek
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Вт фев 14, 2017 21:23:13
- Откуда: Кострома
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
WiseLord, замучился уже с тембрами. Скажите, при такой архитектуре секции регулировки тембров (на скриншоте), возможна независимая регулировка тембров нижних и верхних частот? У меня не получается так, при регулировке вч, изменяются высокие, но и уменшаюся низкие, и наоборот.
- Вложения
-
- вч-нч.png
- (233.5 КБ) 479 скачиваний
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Всё достаточно просто.
Возьмём, например, 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, которая и для других аудипроцессоров применяется.
Соответственно, получится что-то вроде:
Эту функцию нужно дёргать и при регулировке тембра НЧ, и при регулировки тембра ВЧ, т.е. назначить в sndInit её на обе эти регулировки.
Практически никакой разницы с TDA7439 нет, только там на НЧ/СЧ/ВЧ выделены отдельные байты, и в tda7439SetBMT посылаются все они, один за другим (с автоинкрементом адреса). А здесь данные упаковываются в один байт согласно таблице, и посылается только этот один байт.
Возьмём, например, 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 посылаются все они, один за другим (с автоинкрементом адреса). А здесь данные упаковываются в один байт согласно таблице, и посылается только этот один байт.