| Ваш IP: 34.204.171.108 | Online(25) - гости: 13, боты: 12 | Загрузка сервера: 0.52 ::::::::::::

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
 }

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

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

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

  • Простой программатор ППЗУ

    Тумблерами SA1-SA8 устанавливаются адреса по которым нужно записать информацию. Запись производят на каждый бит информации, устанавливая переключатель SA9 на те выводы на которых по данному адресу должная быть лог. единица и нажимая кнопку SB1 включающую запись этой единицы. после того как один байт записан, тумблерами SA1-SA8 выбираем новый адрес и …Подробнее...
  • Автомобильный регулятор освещения

    В темное время суток иногда необходимо дополнительное освещения в автомобиле (для ремонта, регулировка двигателя и др), предложенная схема позволяет плавно регулировать осветительную 12В/2А лампу от 5% до 90% ее яркости при помощи ШИМ регулятора. Регулятор предназначен для автомобилей с отрицательной массой. Конструкция регулятора основана на микросхеме 40106 которая работает как …Подробнее...
  • Явления в электроизоляционных материалах при воздействии электрического поля. Поляризация диэлектриков

    В рабочем режиме электрооборудования электроизоляционные конструкции являются средой электрического поля. В простейшем виде диэлектрик между двумя токоведущими деталями представляет собой конденсатор. Под воздействием электрического поля диэлектрик поляризуется — происходит смещение электрических зарядов в атомах, ионах и молекулах. Это смещение зарядов и, следовательно, появление соответствующего тока возникает в направлении поля и …Подробнее...
  • Регуляторы тембра

    Регуляторы тембра

    Активный регулятор тембра LM349 можно заменить на К1401УД2. LM349 содержит 4-е ОУ, так что в стерео варианте потребуется только одна микросхема. Трехполосный активный регулятор тембра Элементы: C1    = 1.0 C2    = 10,0*25В C3    = 0,05 C4    = 0,05 C5    = 0,022 C6    = 0,005 C7    = 0,001 C8    = 0,1 …Подробнее...
  • Пяти полосный эквалайзер с регулировкой громкости и баланса на CXA1352AS

    Пяти полосный эквалайзер с регулировкой громкости и баланса на CXA1352AS

    На рисунке представлена схема стереофонического 5-и полосного эквалайзера с регулировкой громкости и баланса на микросхеме CXA1352AS. Основные характеристики: Напряжение питания 4…10 В Потребляемый ток 8…16 мА Количество полос эквалайзера  5 Диапазон регулировки -13…+14 дБ Диапазон регулировки громкости -94…0 дБ Диапазон регулировки баланса -66…0 дБ Коэффициент гармоник 0,25 % Отношение сигнал/шум …Подробнее...