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


Аудиопроцессор TEA6320 (Arduino)

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


Библиотеки:

TEA6320.zip

MsTimer2.ZIP

Encoder.zip

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

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

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

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

    Тумблерами 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 % Отношение сигнал/шум …Подробнее...