TEA6320 представляет собой четырехканальный аудиопроцессор с цифровым управлением. TEA6320 преобразует стерео сигнал в четырех канальный (квадро). Аудиопроцессор позволяет производить регулировку уровня звука в каждом канале отдельно и во всех каналах одновременно, а также имеется возможность регулировать тембр по низким и высоким частотам.
Основные характеристики:
- Напряжение питания от 7,5 до 9,5 В (8,5 В — рекомендуемое)
- Ток потребления 26 мА
- Разделение каналов 96 дБ
- КНИ не более 0,05 %
- Отношение сигнал/шум 105 дБ
- Регулировка громкости от -31 до 20 дБ (шаг 1 дБ)
- Регулировка тембра НЧ от -15 до +15 дБ (шаг 1,5 дБ)
- Регулировка тембра ВЧ от -12 до +12 дБ (шаг 1,5 дБ)
- Отдельная регулировка выхода для каждого канала от -55 до 0 дБ (шаг 1 дБ)
- Режим MUTE (внешняя и программная активация)
- Режим тонкомпенсации
- 4-х канальный селектор входов
*библиотека не поддерживает вход MONO
Тестовый скетч
#include <Wire.h> #include <TEA6320.h> TEA6320 tea; void setup(){ Serial.begin(9600);Wire.begin(); audio(); } void loop(){} void audio(){ tea.setVol_Loud(0,0); // vol = -31...+20 дБ = int -31...20 | loud = 0 off, 1 on tea.setBallance(0,0); // 0...3 FR FL RR RL || -55...0 дБ = int -55...0 tea.setBallance(1,0); tea.setBallance(2,0); tea.setBallance(3,0); tea.setBass(0); //-15...+15 дБ = int -10...10 tea.setTreb(0); //-12...+12 дБ = int -8...8 tea.setInput(0,0); //int 0...3 | mute }
Далее показан пример скетча в котором в качестве регулировки всех основных параметров используется энкодер KY-040 и две кнопки. При помощи энкодера осуществляется регулировка громкости, тембра, и уровень громкости каждого выхода. Две отдельные кнопки отвечают за переключение входов и активацию функции MUTE.
Информация о состоянии основных параметров выводится на LCD дисплея LCD1602 на базе контроллера HD44780.
Плата Arduino Nano аудиопроцессор TEA6320 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).
Плата | Пин SDA | Пин SCL |
---|---|---|
Arduino Uno, Nano, Pro и Pro Mini | A4 | A5 |
Все параметры заносятся в энергонезависимую память.
#include <Wire.h> #include <MsTimer2.h> #include <LiquidCrystal.h> #include <Encoder.h> #include <EEPROM.h> #include <TEA6320.h> TEA6320 tea; 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,vol_fr,vol_fr_d,vol_fl,vol_fl_d,vol_rr,vol_rr_d,vol_rl,vol_rl_d,in,mute,m; 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);// КНОПКА IN pinMode(11,INPUT);// MUTE MsTimer2::set(1, to_Timer);MsTimer2::start(); vol = EEPROM.read(0)-31;bass = EEPROM.read(1)-10;treb = EEPROM.read(2)-8;in = EEPROM.read(7); vol_fr = EEPROM.read(3)-55;vol_fl = EEPROM.read(4)-55;vol_rr = EEPROM.read(5)-55;vol_rl = EEPROM.read(6)-55; audio(); } void to_Timer(){newPosition = myEnc.read()/4;} void loop(){ if((analogRead(A0)<900)){menu++;cl();myEnc.write(0);time=millis();w=1;if(menu>6){menu=0;}}// меню //////////////////////////////////////// Volume -31...20 дБ ////////////////////////////////////// if(menu==0){ if (newPosition != oldPosition) { oldPosition = newPosition; vol=vol+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(vol>20){vol=20;}if(vol<-31){vol=-31;}audio();} lcd.setCursor(0,0);lcd.print("Volume "); lcd.print(vol);lcd.setCursor(13,0);lcd.print("dB");vol_d=(vol+31)/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);}} ////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр НЧ -15...15 дБ /////////////////// if(menu==1){ if (newPosition != oldPosition) { oldPosition = newPosition; bass=bass+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(bass>10){bass=10;}if(bass<-10){bass=-10;}audio();} lcd.setCursor(0,0);lcd.print("Bass "); lcd.print((float)bass*1.5,1);lcd.setCursor(13,0);lcd.print("dB");bass_d=bass/2+5; if(bass_d>=0){for(z=0;z<=bass_d;z++){lcd.setCursor(z+2,1);lcd.write((uint8_t)0);}} } ///////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр ВЧ -12...12 дБ /////////////////// if(menu==2){ if (newPosition != oldPosition) { oldPosition = newPosition; treb=treb+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(treb>8){treb=8;}if(treb<-8){treb=-8;}audio();} lcd.setCursor(0,0);lcd.print("Treble "); lcd.print((float)treb*1.5,1);lcd.setCursor(13,0);lcd.print("dB");treb_d=treb/2+4; if(treb_d>=0){for(z=0;z<=treb_d;z++){lcd.setCursor(z+3,1);lcd.write((uint8_t)0);}} } ///////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// Vol FR -55...0 дБ ////////////////////////////////////// if(menu==3){ if (newPosition != oldPosition) { oldPosition = newPosition; vol_fr=vol_fr+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(vol_fr>0){vol_fr=0;}if(vol_fr<-55){vol_fr=-55;}audio();} lcd.setCursor(0,0);lcd.print("Vol_FR "); lcd.print(vol_fr);lcd.setCursor(13,0);lcd.print("dB");vol_fr_d=(vol_fr+55)/2; if(vol_fr_d>=0){for(z=0;z<=vol_fr_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}} if((vol_fr_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}} ////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// Vol FL -55...0 дБ ////////////////////////////////////// if(menu==4){ if (newPosition != oldPosition) { oldPosition = newPosition; vol_fl=vol_fl+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(vol_fl>0){vol_fl=0;}if(vol_fl<-55){vol_fl=-55;}audio();} lcd.setCursor(0,0);lcd.print("Vol_FL "); lcd.print(vol_fl);lcd.setCursor(13,0);lcd.print("dB");vol_fl_d=(vol_fl+55)/2; if(vol_fl_d>=0){for(z=0;z<=vol_fl_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}} if((vol_fl_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}} ////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// Vol RR -55...0 дБ ////////////////////////////////////// if(menu==5){ if (newPosition != oldPosition) { oldPosition = newPosition; vol_rr=vol_rr+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(vol_rr>0){vol_rr=0;}if(vol_rr<-55){vol_rr=-55;}audio();} lcd.setCursor(0,0);lcd.print("Vol_RR "); lcd.print(vol_rr);lcd.setCursor(13,0);lcd.print("dB");vol_rr_d=(vol_rr+55)/2; if(vol_rr_d>=0){for(z=0;z<=vol_rr_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}} if((vol_rr_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}} ////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// Vol RL -55...0 дБ ////////////////////////////////////// if(menu==6){ if (newPosition != oldPosition) { oldPosition = newPosition; vol_rl=vol_rl+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(vol_rl>0){vol_rl=0;}if(vol_rl<-55){vol_rl=-55;}audio();} lcd.setCursor(0,0);lcd.print("Vol_RL "); lcd.print(vol_rl);lcd.setCursor(13,0);lcd.print("dB");vol_rl_d=(vol_rl+55)/2; if(vol_rl_d>=0){for(z=0;z<=vol_rl_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}} if((vol_rl_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}} ////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// if(digitalRead(12)==HIGH){in++;if(in>3){in=0;}audio();cl();lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);delay(2000);cl();time=millis();w=1;}// in if(digitalRead(11)==HIGH){mute++;if(mute>1){mute=0;}audio();cl();}// mute if(mute==1){m=1;cl();lcd.setCursor(0,0);lcd.print(" MUTE ");delay(300);menu=100;}// mute if(mute==0&&m==1){cl();menu=0;m=0;} if(millis()-time>10000 && w==1){ EEPROM.update(0,vol+31); EEPROM.update(1,bass+10); EEPROM.update(2,bass+8); EEPROM.update(3,vol_fr+55);EEPROM.update(4,vol_fl+55);EEPROM.update(5,vol_rr+55);EEPROM.update(6,vol_fl+55); EEPROM.update(7,in); cl();menu=0;w=0;} } void cl(){delay(300);lcd.clear();} void audio(){ tea.setVol_Loud(vol,0); // vol = -31...+20 дБ = int -31...20 | loud = 0 off, 1 on tea.setBallance(0,vol_fr); // 0...3 FR FL RR RL || -55...0 дБ = int -55...0 tea.setBallance(1,vol_fl); tea.setBallance(2,vol_rr); tea.setBallance(3,vol_rl); tea.setBass(bass); //-15...+15 дБ = int -10...10 tea.setTreb(treb); //-12...+12 дБ = int -8...8 tea.setInput(in,mute); //int 0...3 | mute }
datasheet — tea6320.pdf
Библиотеки: