ИМС TDA7439 – регулятор громкости и трехполосный регулятор тембра, разработан для использования в HI-FI аппаратуре и качественных автомобильных аудиосистемах, обладает низким уровнем шумов и искажений.
Основные технические характеристики ИМС TDA7439:
- Громкость 48 уровней от -48 до 0 дБ
- Регулировка тембра НЧ, СЧ, ВЧ ±14 дБ (±7 уровней)
- Коммутация входов — 4 стерео канала
- Усиление от 0 до 30 дБ независимое для каждого канала
- Регулировка баланса ±4 дБ (ограниченно программно)
- Напряжение питания от 6 до 10,2 В (типовое значение 9 В)
- КНИ на частоте 1 кГц не более 0,01%
Плата Arduino Nano аудиопроцессор TDA7439 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).
Управление регулятором тембра состоит из 4-х кнопок:
- Кнопка «МЕНЮ» — пять основных регулировок: громкость, тембр НЧ, тембр СЧ, тембр ВЧ, баланс.
- Кнопка «+» — увеличение громкости, тембра, рег. баланса, рег. усиления.
- Кнопка «-» — уменьшение громкости, тембра, рег. баланса, рег. усиления.
- Кнопка «INPUT» (режим INPUT) — выбор стерео канала и регулировка усиления для каждого канала.
Плата | Пин SDA | Пин SCL |
---|---|---|
Arduino Uno, Nano, Pro и Pro Mini | A4 | A5 |
Все настройки в МЕНЮ сохраняются в энергонезависимой памяти. Сохранение настроек происходит через 10 секунд неактивности кнопок управления. Для сохранения настроек в режиме INPUT, так же необходимо подождать 10 секунд, после чего номер текущего канала и настройки усиления всех каналов будут сохранены в энергонезависимой памяти.
TDA7439.zip — скачайте и установите измененную библиотеку для данного скетча
#include <Wire.h> #include <TDA7439.h> #include <LiquidCrystal.h> #include <EEPROMex.h> TDA7439 tda; LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000}; byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000}; int vol,vol_d,z,bass,mids,treb,balans,in,gain,gain1,gain2,gain3,gain4; byte menu,w,w1,in_d; unsigned long time; void setup() { Serial.begin(9600); Serial.print("TDA7439"); lcd.begin(16, 2); lcd.setCursor(0,0);lcd.print(" TDA7439 ");delay(1000); pinMode(12,INPUT);// меню pinMode(11,INPUT);// плюс pinMode(10,INPUT);// минус pinMode(A1,INPUT);// in 1-4 lcd.createChar(0,a1); lcd.createChar(1,a2); vol = EEPROM.read(0);// vol eeprom bass = EEPROM.read(1)-7;// bass eeprom mids = EEPROM.read(2)-7;// mids eeprom treb = EEPROM.read(3)-7;// treb eeprom balans = EEPROM.read(4)-4;// balans eeprom in = EEPROM.read(5);// in eeprom gain1 = EEPROM.read(6);// gain1 eeprom gain2 = EEPROM.read(7);// gain2 eeprom gain3 = EEPROM.read(8);// gain3 eeprom gain4 = EEPROM.read(9);// gain4 eeprom g1();audio(); } void loop() { if(digitalRead(12)==HIGH){menu++;cl();in_d=0;if(menu>4){menu=0;}}// меню if(analogRead(A1)>900){in++;menu=5;w=1;in_d=1;cl();if(in>4||in<1){in=1;}}// in // индикация громкости + управление кнопками ////////////// if(menu==0){ if(digitalRead(11)==HIGH){vol++;w=1;if(vol>48){vol=48;}}// 48 максимальная громкость if(digitalRead(10)==HIGH){vol--;w=1;if(vol<0){vol=0;}}// 0 минимум громкости if(w==1){audio();cl();time=millis();w=0;w1=1;} lcd.setCursor(0,0);lcd.print("Volume "); lcd.print(-48+vol);lcd.setCursor(13,0);lcd.print("dB"); vol_d=vol/2; if(vol_d>=0){for(z=0;z<=vol_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}} if(vol_d%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);} lcd.setCursor(13,1);lcd.print(vol); } // индикация тембр НЧ + управление кнопками ////////////// if(menu==1){ if(digitalRead(11)==HIGH){bass++;w=1;if(bass>7){bass=7;}} if(digitalRead(10)==HIGH){bass--;w=1;if(bass<-7){bass=-7;}} if(w==1){audio();cl();time=millis();w1=1;w=0;} lcd.setCursor(0,0);lcd.print("Bass "); lcd.print(bass*2);lcd.setCursor(13,0);lcd.print("dB"); for(z=-7;z<=bass;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);} } /////////////////////////////////////////////////////////// // индикация тембр CЧ + управление кнопками ////////////// if(menu==2){ if(digitalRead(11)==HIGH){mids++;w=1;if(mids>7){mids=7;}} if(digitalRead(10)==HIGH){mids--;w=1;if(mids<-7){mids=-7;}} if(w==1){audio();cl();time=millis();w1=1;w=0;} lcd.setCursor(0,0);lcd.print("Mids "); lcd.print(mids*2);lcd.setCursor(13,0);lcd.print("dB"); for(z=-7;z<=mids;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);} } /////////////////////////////////////////////////////////// // индикация тембр BЧ + управление кнопками ////////////// if(menu==3){ if(digitalRead(11)==HIGH){treb++;w=1;if(treb>7){treb=7;}} if(digitalRead(10)==HIGH){treb--;w=1;if(treb<-7){treb=-7;}} if(w==1){audio();cl();time=millis();w1=1;w=0;} lcd.setCursor(0,0);lcd.print("Trebble "); lcd.print(treb*2);lcd.setCursor(13,0);lcd.print("dB"); for(z=-7;z<=treb;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);} } /////////////////////////////////////////////////////////// // индикация баланс + управление кнопками +\- 4 дБ /////// if(menu==4){ if(digitalRead(11)==HIGH){balans++;w=1;if(balans>4){balans=4;}} if(digitalRead(10)==HIGH){balans--;w=1;if(balans<-4){balans=-4;}} lcd.setCursor(0,0); if(balans>=0){lcd.print("-");}else{lcd.print("+");} lcd.print(abs(balans));lcd.print(" dB "); lcd.print(" <> "); if(balans>=0){lcd.print("+");}else{lcd.print("-");} lcd.print(abs(balans));lcd.print(" dB "); lcd.setCursor(0,1);lcd.print("R"); lcd.setCursor(15,1);lcd.print("L"); if(balans<0){lcd.setCursor(balans+7,1);lcd.write((uint8_t)0);} if(balans>0){lcd.setCursor(balans+8,1);lcd.write((uint8_t)0);} if(balans==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);} if(w==1){audio();cl();time=millis();w1=1;w=0;} } ///////////////////////////////////////////////////////////// /////////// input + gain ///////////////////////////////////////// if(in_d==1){ g1(); if(digitalRead(11)==HIGH){gain++;w=1;if(gain>15){gain=15;}} if(digitalRead(10)==HIGH){gain--;w=1;if(gain<0){gain=0;}} g2(); lcd.setCursor(0,0);lcd.print("Input: ");lcd.print(in); lcd.setCursor(0,1);lcd.print("Input Gain: ");lcd.print(gain); if(w==1){audio();cl();time=millis();w1=1;w=0;} } //////////////////////////////////////////////////////////// // запись всех настроек в EEPROM если кнопки + и - не нажимались в течении 10 сек // если настройки тембра, баланса и номер входа не менялись в течении 10 сек, переход в рег. Громкости if(millis()-time>10000 && w1==1){ EEPROM.update(0,vol); EEPROM.update(4,balans+4); EEPROM.update(1,bass+7); EEPROM.update(2,mids+7); EEPROM.update(3,treb+7); EEPROM.update(5,in); EEPROM.update(6,gain1);EEPROM.update(7,gain2);EEPROM.update(8,gain3);EEPROM.update(9,gain4); menu=0;w1=0;cl();in_d=0; } } void g1(){if(in==1){gain=gain1;}if(in==2){gain=gain2;}if(in==3){gain=gain3;}if(in==4){gain=gain4;}} void g2(){if(in==1){gain1=gain;}if(in==2){gain2=gain;}if(in==3){gain3=gain;}if(in==4){gain4=gain;}} void cl(){delay(200);lcd.clear();} void audio(){ tda.setInput(in); // 1 to 4 // номер канала tda.inputGain(gain); // 0 to 15 // усиление tda.setVolume(vol); // 0 to 48 ( 0 is mute) // громкость tda.setSnd(bass, 1); //-7 to +7 , 1 - Bass | 2 - Mids | 3 - Trebble tda.setSnd(mids, 2); tda.setSnd(treb, 3); tda.spkAtt(4-balans, 4+balans); // баланс R L от 0 to 79 (db) }
Собрал. Залил скетч. Дисплей работает, кнопки управления то же. В схеме кнопка выбора входов подключена на А1 ардуино, в скетче А0. Но сам аудиопроцессор не запускается. Ощущение, то ардуино не видит микросхему. Библиотека сохранилась в скетче. В чём подвох?
Проверьте питание микросхемы 9 В, шину i2s и номер канала на который подаете аудио сигнал.
минус аудиопроцессора и минус ардуино должны быть соединены.
Измените скетч на вход А1 (если собираете на плате) или подключение на А0 (если на макетной плате), скетч поправил, на схеме была ошибка, теперь скетч соответствует схеме.
Спасибо за отклик. Конечно первое, то я проверял это питание.Оно есть. Органиованно на 7809 стабилизаторе. Минуса,однозначно, тоже.Входы А4 и А5 соответствуют схеме аудиопроцессора.
Грешу на сам аудиопроцессор. Единственный на рынке у нас был. Попробую собрать на TDA 8425. Благо у нас их в продаже в изобилие.Просмотрел весь скетч нигде не увидел привязки к входам А4 и А5 ардуино. Точно они используются для SDA и SCL аудио?
Вы поправили скетч (А0 на А1), A4 (SDA) и A5 (SCL) для nano и uno. Поменяйте местами A4 A5 может я опять что то попутал.
Маловероятно, что аудиопроцессор не исправен.
Скетч поправил. Ардуино Нано. И местами менял, результат никакой. Жаль, что нет возможности проверить процессор.Кстати, на А4 и А5 не нужны подтягивающие резисторы к питанию, или к нулю?
Нет не нужно.
Аудиопроцессор я на плату не паял. Использовал переходную панельку То же сомневаюсь, что бы я его спалил.
Делали перебор каналов?
Перебор, в смысле изменение входов? Подавал сигнал на все входы от 1 до 4. Выход молчит.
Кнопка input выход а1. При первом включении значение канала может быть в не диапазона, так как берется из энергонезависимой памяти ардуино.
При первом включении уровень усиления канала был аж 255. Потом до 0 уменьшил и увеличил до +15. Второе включение и последующие усиление на всех каналах до 15 Дб.
Библиотека которую вы установили скачена с моего сайта?
Последняя идея: в самый конец скетча после строки
tda.spkAtt(4-balans, 4+balans); // баланс R L от 0 to 79 (db)
добавьте:
tda.mute();
Доброго вечера. Библиотека была скачана из этой статьи. По ссылке перед самим скетчем. На всякий случай скачал даташит на этот аудиопроц, сверился со своей платой. Плата собрана без ошибок, даташит совпадает со схемой в статье. Да и ошибиться тут трудно-деталей обвязки минимум. Ладно, утро вечера мудренее.Попробую ещё раз завтра перезалить ардуинку. Спасибо за содействие.
Здравствуйте. Не поверите, собрал схему на tda8425. Скачал библиотеку, залил скетч. Результат тот же, что и в первом случае. Управление и индикация есть, аудиопроцессор не оживает. Попросил друга, который детальнее и глубже разбирается в Ардуино, зарегестрироваться у Вас на сайте, чтобы он более предметно вопросы задавал.Я с Ардуино второй раз сталкиваюсь. Мне ещё не всё понятно. Ставил скетч Ваш посредством копирования и вставки в программу arduino ide. Библиотеку скачал и добавил в раздел библиотеки в программе ide. Может неправильно записываю, хотя скетч компилируется и грузится. Ардуино с дисплеем оживают. С ув. Александр.
Запустить аудиопроцессор это самое простое, сложнее написать управление, даже на простом примере аудипроцессор должен работать:
#include «Wire.h» // вместо ковычек стрелки
#include «TDA7439.h»
TDA7439 tda;
void setup() {}
void loop() {
tda.setInput(1); // 1 to 4 // номер канала
tda.inputGain(0); // 0 to 15 // усиление
tda.setVolume(48); // 0 to 48 ( 0 is mute) // громкость
tda.setSnd(0, 1); //-7 to +7 , 1 — Bass | 2 — Mids | 3 — Trebble
tda.setSnd(0, 2);
tda.setSnd(0, 3);
tda.spkAtt(4, 4); // баланс R L от 0 to 79 (db)
delay(1000);
}
Просто загрузите этот скет и посмотрите результат.
Так же в раздел void setup() можно добавить:
Wire.begin();
Эта команда иницилирует i2s шину, но у меня и без этой команды работает.
Спасибо огромное. Завтра обязательно попробуем. Проект на столе, на работе. Сейчас уже дома.