| Ваш IP: 18.207.249.15 | Online(35) - гости: 14, боты: 21 | Загрузка сервера: 0.82 ::::::::::::


TDA7449 — регулятор тембра и громкости (Arduino)

ИМС TDA7449 – регулятор громкости и регулятор тембра, разработан для использования в HI-FI аппаратуре и качественных автомобильных аудиосистемах, обладает низким уровнем шумов и искажений.

Основные технические характеристики ИМС TDA7449:

  • Громкость 47 уровней от -47 до 0 дБ (0 громкость -72 дБ)
  • Регулировка тембра НЧ, ВЧ  ±14 дБ (±7 уровней)
  • Коммутация входов — 2 стерео канала
  • Усиление от 0 до 30 дБ независимое для каждого канала
  • Регулировка баланса ±4 дБ (ограниченно программно)
  • Аттенюатор — 72 … 0 дБ
  • Напряжение питания от 6 до 10,2 В (типовое значение 9 В)
  • КНИ на частоте 1 кГц не более 0,01%

Плата Arduino Nano аудиопроцессор TDA7449 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация). В качестве индикатора используется LCD1602 на базе контроллера HD44780.

Управление регулятором тембра состоит из 4-х кнопок:

  1. Кнопка «МЕНЮ» — пять основных регулировок: громкость, тембр НЧ, тембр СЧ, тембр ВЧ, баланс.
  2. Кнопка «+» — увеличение громкости, тембра, рег. баланса, рег. усиления.
  3. Кнопка «-» — уменьшение громкости, тембра, рег. баланса, рег. усиления.
  4. Кнопка «INPUT» (режим INPUT) — выбор стерео канала и регулировка усиления для каждого канала.

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini A4 A5

Все настройки в МЕНЮ сохраняются в энергонезависимой памяти. Сохранение настроек происходит через 10 секунд неактивности кнопок управления. Для сохранения настроек в режиме INPUT, так же необходимо подождать 10 секунд, после чего номер текущего канала и настройки усиления всех каналов будут сохранены в энергонезависимой памяти.

Библиотека https://github.com/liman324/TDA7449/archive/master.zip или TDA7449.zip

#include <Wire.h>
#include <TDA7449.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>//#include <EEPROMex.h> для старых версий Arduino IDE
  TDA7449 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;
  int att=4; // аттенюатор - если звук очень громкий увеличьте значение (-72 mute), меньше 4 не делать.
  byte menu,w,w1,in_d;
  unsigned long time;
 
void setup(){ 
  Serial.begin(9600);Wire.begin(); lcd.begin(16, 2);
   pinMode(12,INPUT);// меню
  pinMode(11,INPUT);// плюс
  pinMode(10,INPUT);// минус
  pinMode(A1,INPUT);// in 1-2
  lcd.createChar(0,a1); lcd.createChar(1,a2);
  vol = EEPROM.read(0);// vol eeprom 
  bass = EEPROM.read(1)-7;// bass 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
  g1();audio();
}
 
void loop() {
  if(digitalRead(12)==HIGH){menu++;cl();in_d=0;if(menu>3){menu=0;}}// меню
  if(analogRead(A1)>900){in++;menu=5;w=1;in_d=1;cl();if(in>2||in<1){in=1;}}// in
  // индикация громкости + управление кнопками //////////////
   if(menu==0){
   if(digitalRead(11)==HIGH){vol++;w=1;if(vol>47){vol=47;}}// 47 максимальная громкость  
   if(digitalRead(10)==HIGH){vol--;w=1;if(vol<0){vol=0;}}// 0 минимум громкости 
   if(vol==0){att=72;}else{att=4;}
   if(w==1){audio();cl();time=millis();w=0;w1=1;}
  lcd.setCursor(0,0);lcd.print("Volume   ");
  lcd.print(-47+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);}
 }
 ///////////////////////////////////////////////////////////
 
  // индикация тембр BЧ + управление кнопками //////////////
   if(menu==2){
   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==3){
   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*2));lcd.print(" dB ");
  lcd.print(" <>  ");
   if(balans>=0){lcd.print("+");}else{lcd.print("-");}
  lcd.print(abs(balans*2));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(3,treb+7);
     EEPROM.update(5,in);
     EEPROM.update(6,gain1);EEPROM.update(7,gain2);
  menu=0;w1=0;cl();in_d=0;
 }
 }
 
 void g1(){if(in==1){gain=gain1;}if(in==2){gain=gain2;}}
 void g2(){if(in==1){gain1=gain;}if(in==2){gain2=gain;}}
 void cl(){delay(200);lcd.clear();}
 
void audio(){
  tda.setInput(in); //         int 1...2 //// номер входа
  tda.inputGain(gain); //        int 0...15 (шаг 2дБ)    0...30 дБ  //// усиление
  tda.setVolume(vol); //       int 0...47 (шаг 1 дБ)  -47...0 дБ  //// громкость
  tda.setBass(bass); //          int -7...+7 (шаг 2 дБ) -14...14 дБ //// тембр НЧ
  tda.setTreble(treb); //        int -7...+7 (шаг 2 дБ) -14...14 дБ //// тембр ВЧ
  tda.setAttL(att-balans); //          int 0...79 (шаг 1дБ)    
  tda.setAttR(att+balans); //          int 0...79 (шаг 1дБ)    
}


Тестирование скетча tda7449 + энкодер + ИК пульт — http://forum.rcl-radio.ru/viewtopic.php?id=30

Тестирование скетча tda7449 + энкодер + ИК пульт + анализатор спектра — http://forum.rcl-radio.ru/viewtopic.php?pid=43#p43

Комментарии

  • Hi Liman,
    I assembled this project. It didn’t work. The Arduino sketch worked well seperately without connecting to the TDA 7449 preamp.But when I connect the SDA,SCL pins to Arduino,the LCD display freezes and buttons don’t respond.I tried connecting pull up resistor of 2.2k from SDA and SCL to 5 voLT.with this,the LCD and buttons work even with SDA and SCL input, but there’s no sound. I checked all connections.The chip is new one.Any help?

  • Superb!!.You correctly said..I missed the Arduino and tda ground.Now it works great!!.Very Happy with the performance! My first arduino project is successful because of this great website. Many Thanks. I did same grounding mistake with My pt2322 also. I will check my pt2322 project also… I will soon be making 7439 project also. Only problem is I don’t have a PCB design for toner transfer. Doing a perfboard layout is difficult since it is SDIP. Anyway, many Thanks. One request.How to add a frequency spectrum to this sketch? I found one for encoder version. But not for button controlled version..

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • К140УД9 (справочные данные)

    К140УД9 (справочные данные)

    К140УД9 относят к ОУ средней точности, К140УД9 это усовершенствованный вариант К140УД2, в ОУ имеется защита входа от перенапряжения, а выхода от короткого замыкания в нагрузке. Электрические параметры: Uпит. ном — 2*12,6В I пот — 8мА Ku — 35*10³ Uсм — 5мВ TKUсм — 20мкв/Сº Iвх — 350нА ΔIвх — 100нА …Подробнее...
  • Импульсный источник питания для УМЗЧ 150Вт

    Импульсный источник питания для УМЗЧ 150Вт

    При использовании ИИП в УМЗЧ иногда возникают проблемы с электромагнитной совместимостью. Предлагаемый ИИП отличается от других хорошей фильтрацией выходного напряжения и защитой от перегрузок и короткого замыкания. ОСНОВНЫЕ ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ Напряжение сети – 220В Выходное напряжение – 2*25В Максимальный ток нагрузки – 3А Ток срабатывания защиты – 3,3А Максимальная выходная …Подробнее...
  • LA4425A — УМЗЧ 5 Вт

    LA4425A — УМЗЧ 5 Вт

    LA4425A — усилитель мощности звуковой часты. Схема усилителя содержит минимальное кол-во внешних компонентов, всего три конденсатора. Выходная мощность усилителя 5 Вт. Рабочий диапазон питающего напряжения от 5 до 16 В. ИМС LA4425A имеет защиту от пернапряжения, тепловую защиту и защиту от КЗ. Микросхема выполнена в корпусе SIP5H. Основные характеристики Максимальное напряжение питания …Подробнее...
  • Кодовая маркировка емкости импортных конденсаторов

    Кодовая маркировка емкости импортных конденсаторов

    В соответствии со стандартами IEC на практике применяется четыре способа кодировки номинальной емкости. 1. Кодировка 3-мя цифрами Первые две цифры указывают на значение емкости в пикофарадах (пф), последняя — количество нулей. Когда конденсатор имеет емкость менее 10 пФ, то последняя цифра может быть «9». При емкостях меньше 1.0 пф первая …Подробнее...
  • Тестер для транзисторов

    Тестер для транзисторов

    На рисунке показана схема простого тестера для транзисторов, который может определить годность биполярных транзисторов различной структуры (p-n-p, n-p-n). На элементах DD1.1, DD1.2 и DD1.3 выполнен генератор, работающий на частоте 1 кГц. Проверка транзисторов различной структуры без переключения возможна благодаря подаче на эмиттер и коллектор испытуемого  транзистора то низкого, то высокого …Подробнее...