TDA7442 (Arduino)

ИМС TDA7442 представляет собой регулятор тембра и громкости с микроконтроллерным управлением.

Основные характеристики аудиопроцессора TDA7442:

  • Напряжение питания от 7 до 10.2 В (9 В — рекомендуемое)
  • Максимальная амплитуда входного сигнала 2 Vrms
  • Коэффициент гармоник на частоте 1 кГц и входном сигнале 1 Vrms не более 0,01%
  • Отношение сигнал/шум 106 дБ
  • Разделение каналов 90 дБ
  • Диапазон регулировки тембра ВЧ и НЧ ± 14 дБ
  • Диапазон регулировки громкости от -79 до 0 дБ
  • Электронный коммутатор входов (4 стерео входа)

TDA7442 SDIP-32

TDA7442D SO-28

Тестовый скетч

Библиотека — https://github.com/liman324/TDA7442.git

Библиотека поддерживает все функции заявленные в datasheet


datasheet  — tda7442.pdf

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

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini A4 A5
#include <Wire.h>
#include <TDA7442.h>
  TDA7442 tda;
 
void setup(){ 
  Serial.begin(9600);Wire.begin();
  audio();
}
 
void loop(){}
 
void audio(){
 tda.setInput_att(0);  // int -63...0 = -31.5...0 dB step 0.5 dB
 tda.setSurr_sel(2, 1, 0);/* int 0...2, int 0...1, int 0...15:
                                                           SIMULATED STEREO | MUSIC | OFF
                                                           VAR | FIX
                                                           EFFECT CONTROL -6...-21 dB  */
 tda.setRez(3);  // int 0...3 = 12, 14, 18, 37 kOm
 tda.setBass(4);   // int -7...7 = -14...+14 dB step 2 dB
 tda.setTreble(5); // int -7...7 = -14...+14 dB step 2 dB
 tda.setVol_L(-20); // int -79...0 = -79...0 dB
 tda.setVol_R(-20); // int -79...0 = -79...0 dB
 tda.setInput(1); // int 1...4
 }

Далее показан пример скетча в котором в качестве регулировки всех основных параметров  используется энкодер KY-040 и две кнопки. При помощи энкодера осуществляется регулировка громкости, тембра и баланса. Две отдельные кнопки отвечают за переключение входов и настройку дополнительных параметров (MENU2).

Дополнительное меню (MENU2) содержит следующие параметры:

  • Аттенюатор входа (независимый для каждого входа)
  • SIMULATED STEREO | MUSIC | OFF (имитация стерео | расширенное стерео | выключено)
  • VAR | FIX ( регулировка тембра вкл. |  регулировка тембра выкл.)
  • EFFECT CONTROL -6…-21 dB (MUSIC)

Информация о состоянии основных параметров выводится на LCD дисплея LCD1602 на базе контроллера HD44780.

Дополнительные библиотеки:

MsTimer2.ZIP

Encoder.zip

#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7442.h>
  TDA7442 tda;
   Encoder myEnc(9, 8);//CLK, DT подключение энкодера
  LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
   byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
   byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000};
   unsigned long newPosition,time,oldPosition  = -999;
   int menu,w,vol,vol_d,z,bass,bass_d,treb,treb_d,balans,in,menu2,gain1,gain2,gain3,gain4,gain0,stereo,eff;
 
void setup(){ 
  Serial.begin(9600);Wire.begin();
  lcd.begin(16, 2);lcd.createChar(0,a1); lcd.createChar(1,a2);
   pinMode(A0,INPUT);// КНОПКА ЭНКОДЕРA
   pinMode(12,INPUT);// КНОПКА INPUT
   pinMode(11,INPUT);// КНОПКА MENU 2
   MsTimer2::set(1, to_Timer);MsTimer2::start();
   vol = EEPROM.read(0)-79;bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;balans = EEPROM.read(3)-8;in = EEPROM.read(4);
   gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);gain4 = EEPROM.read(8);
   stereo = EEPROM.read(9);eff = EEPROM.read(10);
     if(in==1){gain0=gain1;}if(in==2){gain0=gain2;}if(in==3){gain0=gain3;}if(in==4){gain0=gain4;}
  delay(500);audio();
}
 
void to_Timer(){newPosition = myEnc.read()/4;}
 
void loop(){
  if((analogRead(A0)<900)){menu++;cl();myEnc.write(0);menu2=0;time=millis();w=1;if(menu>3){menu=0;}}// меню
  if((digitalRead(11)==HIGH)){menu2++;cl();myEnc.write(0);if(menu2>0&&menu2<3){menu=100;}if(menu2>3){menu2=0;cl();menu=0;}}// меню 2
 //////////////////////////////////////// Volume -79...0 дБ //////////////////////////////////////
 if(menu==0){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(vol>0){vol=0;}if(vol<-79){vol=-79;}audio();}
 
  lcd.setCursor(0,0);lcd.print("Volume   ");
  lcd.print(vol);lcd.setCursor(13,0);lcd.print("dB");vol_d=(vol+79)/3;
   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);}}
//////////////////////////////////////////////////////////////////////////////////////////////////////
 
/////////////////////// индикация тембр НЧ -14...14 дБ ///////////////////
   if(menu==1){
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();} 
 
  lcd.setCursor(0,0);lcd.print("Bass    ");
  lcd.print(bass*2);lcd.setCursor(13,0);lcd.print("dB");bass_d=bass+7;
   if(bass_d>=0){for(z=0;z<=bass_d;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}
 }
/////////////////////////////////////////////////////////////////////////////////////
 
/////////////////////// индикация тембр ВЧ -14...14 дБ ///////////////////
   if(menu==2){
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();} 
 
  lcd.setCursor(0,0);lcd.print("Treble  ");
  lcd.print(treb*2);lcd.setCursor(13,0);lcd.print("dB");treb_d=treb+7;
   if(treb_d>=0){for(z=0;z<=treb_d;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}
 }
/////////////////////////////////////////////////////////////////////////////////////
 
/////////////////////////////////////////////////////////////////////////////////////
  // индикация баланс + управление кнопками +\- 4 дБ ///////
   if(menu==3){
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    balans=balans+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(balans>8){balans=8;}if(balans<-8){balans=-8;}audio();} 
  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("L");
  lcd.setCursor(15,1);lcd.print("R");
   if(balans<0){lcd.setCursor(balans/2+7,1);lcd.write((uint8_t)0);}
   if(balans>0){lcd.setCursor(balans/2+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);}
 }
 
//////////////////////// input ///////////////////////////////////
 if(digitalRead(12)==HIGH){in++;if(in>4){in=1;}audio();cl();lcd.setCursor(0,0);lcd.print("    INPUT  ");lcd.print(in);delay(2000);cl();time=millis();w=1;}// in
/////////////////////////////////////////////////////////////////
 
//////////////////////////////////// att input ////////////////////////////////////////////
  if(menu2==1){ w=0;
    if(in==1){gain0=gain1;}if(in==2){gain0=gain2;}if(in==3){gain0=gain3;}if(in==4){gain0=gain4;}
      if (newPosition != oldPosition) {
    oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;lcd.clear();if(gain0>63){gain0=63;}if(gain0<0){gain0=0;}audio();} 
 
    if(in==1){gain1=gain0;}if(in==2){gain2=gain0;}if(in==3){gain3=gain0;}if(in==4){gain4=gain0;}   
  lcd.setCursor(0,0);lcd.print("INPUT: ");lcd.print(in);
  lcd.setCursor(0,1);lcd.print("ATT: -");lcd.print((float)gain0*0.5,1);lcd.print(" dB");
  }
///////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// SURROUND MODE /////////////////////////////////////////////////
if(menu2==2){w=0;
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    stereo=stereo+newPosition;myEnc.write(0);newPosition=0;lcd.clear();if(stereo>2){stereo=0;}if(stereo<0){stereo=2;}audio();} 
    lcd.setCursor(0,0);lcd.print("SURROUND MODE");
    if(stereo==0){lcd.setCursor(0,1);lcd.print("SIMULATED STEREO");}
    if(stereo==1){lcd.setCursor(0,1);lcd.print("MUSIC");}
    if(stereo==2){lcd.setCursor(0,1);lcd.print("OFF");}
}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// EFFECT CONTROL //////////////////////////////////////////////
if(menu2==3){w=0;
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    eff=eff+newPosition;myEnc.write(0);newPosition=0;lcd.clear();if(eff>15){eff=15;}if(eff<0){eff=0;}audio();} 
    lcd.setCursor(0,0);lcd.print("EFFECT CONTROL");
    lcd.setCursor(3,1);lcd.print("-");lcd.print(eff+6);lcd.print(" dB");}
 
 
//////////////////////////////eeprom////////////////////
 
  if(millis()-time>10000 && w==1){
     EEPROM.update(0,vol+79);EEPROM.update(1,bass+7);EEPROM.update(2,treb+7);EEPROM.update(3,balans+8);EEPROM.update(4,in);
     EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);EEPROM.update(8,gain4);
     EEPROM.update(9,stereo); EEPROM.update(10,eff);
     cl();menu=0;w=0;menu2=0;}
}
void cl(){delay(300);lcd.clear();}
void audio(){
 tda.setInput_att(gain0);  // int -63...0 = -31.5...0 dB step 0.5 dB
 tda.setSurr_sel(stereo, 0, eff);/* int 0...2, int 0...1, int 0...15:
                                                           SIMULATED STEREO | MUSIC | OFF
                                                           VAR | FIX  = тембр вкл/выкл
                                                           EFFECT CONTROL -6...-21 dB  */
 tda.setRez(3);  // int 0...3 = 12, 14, 18, 37 kOm
 tda.setBass(bass);   // int -7...7 = -14...+14 dB step 2 dB
 tda.setTreble(treb); // int -7...7 = -14...+14 dB step 2 dB
 tda.setVol_L(vol-8-balans); // int -79...0 = -79...0 dB
 tda.setVol_R(vol-8+balans); // int -79...0 = -79...0 dB
 tda.setInput(in); // int 1...4
 }

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

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