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

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

ИМС TDA7303 представляет собой простой и не дорогой аудиопроцессор. TDA7303 имеет коммутируемых 3 стерео входа, регуляторы тембра (ВЧ, НЧ), тонкомпенсацию, предусилитель входа, аттенюаторы выходов (квадро). Управление аудиопроцессором осуществляется через шину I2C.

Основные параметры аудиопроцессора TDA7303:

  • Напряжение питания от 6 до 10 (9 рекомендуемое)
  • Максимальное входное напряжение 2 Vrms
  • Коэффициент гармоник не более 0,01 % (Total harmonic distortion V = 1 Vrms; f = 1 kHz)
  • Отношение сигнал/шум 106 дБ
  • Разделение каналов 103 дБ
  • Регулировка громкости от -78,75 до 0 дБ, шаг 1,25 дБ
  • Регулировка тембра от -14 до +14 дБ, шаг 2 дБ
  • Предварительный усилитель входа от 0 до 11,25 дБ, 4 шага, шаг 3,75 дБ
  • Аттенюаторы выходов от -38,75 до 0 дБ, шаг 1,25 дБ

На базе TDA7303 используя платформу Arduino можно собрать простой регулятор тембра и громкости.

Регулятор громкости содержит следующие компоненты:

  • Arduino Nano
  • Индикатор TM1637
  • Энкодер KY-040
  • Три тактовые кнопки
  • IR датчик (необязательная опция)
  • TDA7303

Вся информация об уровни громкости, тембра и другие параметры отображаются на 4-х разрядном семисегментном дисплей на базе драйвера TM1637. Основное управление аудипороцессором осуществляется при помощи энкодера, нажатие кнопки энкодера позволяет переключать основные режимы: громкость, тембр НЧ, тембр ВЧ. Кнопка SET переключает редко используемые параметры, кнопка IN переключает входы. ИК пульт дублирует основное меню (громкость, тембры, переключение входов, mute).

Меню регулятора громкости:

  • Громкость

  • Тембр НЧ

  • Тембра ВЧ

  • Переключение входов

  • MUTE

Дополнительные настройки:

  • Аттенюаторы выходов
  • Тонкомпенсация (on/off)

  • Предусилитель входа (отдельная для каждого входа)

  • Яркость индикатора

Все параметры сохраняются в энергонезависимой памяти.

Вашего пульта необходимо прописать коды кнопок в скетч:

/// BUTTON IR ///
#define IR_1 0x33B8A05F // Кнопка вверх
#define IR_2 0x33B8609F // Кнопка вниз
#define IR_3 0x33B810EF // Кнопка >
#define IR_4 0x33B8E01F // Кнопка <
#define IR_5 0x33B858A7 // Кнопка IN
#define IR_6 0x33B850AF // Кнопка MUTE

Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.

/// ENCODER ///
#define SW_E   6
#define DT_E   5
#define CLK_E  4
/// TM1637 ///
#define CLK_T  2
#define DIO_T  3
/// BUTTON ////
#define SET    A0
#define IN     A1
#define MUTE   A2
/// IR ///////
#define INPUT_IR 12
/// BUTTON IR ///
#define IR_1 0x33B8A05F // Кнопка вверх
#define IR_2 0x33B8609F // Кнопка вниз
#define IR_3 0x33B810EF // Кнопка >
#define IR_4 0x33B8E01F // Кнопка <
#define IR_5 0x33B858A7 // Кнопка IN
#define IR_6 0x33B850AF // Кнопка MUTE
 
#include <Wire.h>               // Входит в состав Arduino IDE
#include <Encoder.h>            // https://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>             // Входит в состав Arduino IDE
#include <MsTimer2.h>           // https://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>          // Входит в состав IRremote
#include <IRremote.h>           // https://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include <TDA7303.h>            // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=1225&download=1
#include <STM32_TM1637.h>       // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=403&download=1
  TDA7303 tda;
  STM32_TM1637 tm(CLK_T,DIO_T);
  Encoder myEnc(DT_E, CLK_E);
  IRrecv irrecv(INPUT_IR); 
  decode_results ir; 
 
  unsigned long times,oldPosition  = -999,newPosition; 
  bool w,gr1,gr2;
  int vol,menu,bas,trb,menu0=100,att_lr,att_rr,att_lf,att_rf,loud,in,gain,gain0,gain1,gain2,brig,vol_old,mute;
 
void setup(){
   Serial.begin(9600);
   irrecv.enableIRIn();
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   pinMode(SW_E,INPUT);
   pinMode(SET,INPUT_PULLUP);
   pinMode(IN,INPUT_PULLUP);
   pinMode(MUTE,INPUT_PULLUP);
   vol = EEPROM.read(0);bas = EEPROM.read(1)-7;trb = EEPROM.read(2)-7;att_lr = EEPROM.read(3);att_rr = EEPROM.read(4);
   att_lf = EEPROM.read(5);att_rf = EEPROM.read(6);in = EEPROM.read(7);
   gain0 = EEPROM.read(8);gain1 = EEPROM.read(9);gain2 = EEPROM.read(10);brig = EEPROM.read(11);
   switch(in){
    case 0: gain=gain0;break;
    case 1: gain=gain1;break;
    case 2: gain=gain2;break;
    }
   audio();tm.brig(brig+1);
  }
 
void loop(){
////// IR /////////////////////////////////////////////////
   if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println(ir.value,HEX);irrecv.resume();delay(200);times=millis();w=1;}
 
   if(ir.value==IR_2 && mute==0){menu++;gr1=0;gr2=0;ir.value=0;delay(200);menu0=100;if(menu>2){menu=0;};times=millis();w=1;}//  кнопка вверх 
   if(ir.value==IR_1 && mute==0){menu--;gr1=0;gr2=0;ir.value=0;delay(200);menu0=100;if(menu<0){menu=2;};times=millis();w=1;}//  кнопка вниз
 
////// BUTTON /////////////////////////////////////////////
   if(digitalRead(SW_E)==LOW && mute==0){menu++;menu0=100;if(menu>2){menu=0;};times=millis();w=1;delay(200);}
   if(digitalRead(SET)==LOW && mute==0){menu0++;menu=100;;if(menu0>6){menu0=0;};times=millis();w=1;delay(200);}
   if((digitalRead(IN)==LOW || ir.value==IR_5) && mute==0){in++;gr1=0;gr2=0;ir.value=0;if(in>2){in=0;};tm.print_float(in+1,0, 0b00010000,0b01010100,0,0);times=millis();w=1;
   switch(in){
    case 0: gain=gain0;break;
    case 1: gain=gain1;break;
    case 2: gain=gain2;break;
    }audio();
   delay(1000);}
   if((digitalRead(MUTE)==LOW || ir.value==IR_6) && mute==0){mute=1;gr1=0;gr2=0;ir.value=0;vol_old=vol;vol=63;audio();tm.print_float(0,0,  0b01000000,0b01000000,0b01000000,0b01000000);delay(200);}
   if((digitalRead(MUTE)==LOW || ir.value==IR_6) && mute==1){mute=0;gr1=0;gr2=0;ir.value=0;vol=vol_old;menu=0;menu0=100;audio();delay(200);}
   if(mute==1){myEnc.write(0);newPosition=0;}
 
   if(mute==0){  
////// VOLUME /////////////////////////////////////////////
   if(menu==0){
   if(ir.value==IR_4){vol++;gr1=1;gr2=0;ir.value=0;delay(200);times=millis();w=1;if(vol>63){vol=63;}if(vol<0){vol=0;};audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;ir.value=0;delay(200);times=millis();w=1;if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}// кнопка >>>>>>
   if(ir.value==IR_3){vol--;gr1=0;gr2=1;ir.value=0;delay(200);times=millis();;w=1;if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;ir.value=0;delay(200);times=millis();w=1;if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}// кнопка <<<<<< 
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
     tm.print_float((vol-63)*10,0,  0b01000000,0,0,0b01000000);
     } 
////// BASS ///////////////////////////////////////////////
   if(menu==1){
   if(ir.value==IR_3){bas++;gr1=1;gr2=0;ir.value=0;delay(200);times=millis();w=1;if(bas>7){bas=7;}if(bas<-7){bas=-7;}audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){bas++;gr2=0;ir.value=0;delay(200);times=millis();w=1;if(bas>7){bas=7;}if(bas<-7){bas=-7;}audio();}// кнопка >>>>>>
   if(ir.value==IR_4){bas--;gr1=0;gr2=1;ir.value=0;delay(200);times=millis();;w=1;if(bas>7){bas=7;}if(bas<-7){bas=-7;}audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){bas--;gr1=0;ir.value=0;delay(200);times=millis();w=1;if(bas>7){bas=7;}if(bas<-7){bas=-7;}audio();}// кнопка <<<<<<  
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     bas=bas-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(bas>7){bas=7;}if(bas<-7){bas=-7;}audio();}
     tm.print_float(bas,0,  0b01111100,0,0,0);
     } 
////// TREBLE /////////////////////////////////////////////
   if(menu==2){
   if(ir.value==IR_3){trb++;gr1=1;gr2=0;ir.value=0;delay(200);times=millis();w=1;if(trb>7){trb=7;}if(trb<-7){trb=-7;}audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){trb++;gr2=0;ir.value=0;delay(200);times=millis();w=1;if(trb>7){trb=7;}if(trb<-7){trb=-7;}audio();}// кнопка >>>>>>
   if(ir.value==IR_4){trb--;gr1=0;gr2=1;ir.value=0;delay(200);times=millis();;w=1;if(trb>7){trb=7;}if(trb<-7){trb=-7;}audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){trb--;gr1=0;ir.value=0;delay(200);times=millis();w=1;if(trb>7){trb=7;}if(trb<-7){trb=-7;}audio();}// кнопка <<<<<< 
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     trb=trb-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(trb>7){trb=7;}if(trb<-7){trb=-7;}audio();}
     tm.print_float(trb,0,  0b01111000,0,0,0);
     } 
 
/// MENU0 /////////////////////////////////////////////////
////// ATT_LR /////////////////////////////////////////////
   if(menu0==0){
   if (newPosition != oldPosition){oldPosition = newPosition;
     att_lr=att_lr-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(att_lr>31){att_lr=31;}if(att_lr<0){att_lr=0;}audio();}
     tm.print_float(att_lr,0,  0b00111000,0b01010000,0,0);
     }  
////// ATT_RR /////////////////////////////////////////////
   if(menu0==1){
   if (newPosition != oldPosition){oldPosition = newPosition;
     att_rr=att_rr-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(att_rr>31){att_rr=31;}if(att_rr<0){att_rr=0;}audio();}
     tm.print_float(att_rr,0,  0b01010000,0b01010000,0,0);
     } 
////// ATT_LF /////////////////////////////////////////////
   if(menu0==2){
   if (newPosition != oldPosition){oldPosition = newPosition;
     att_lf=att_lf-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(att_lf>31){att_lf=31;}if(att_lf<0){att_lf=0;}audio();}
     tm.print_float(att_lf,0,  0b00111000,0b01110001,0,0);
     }
////// ATT_RF /////////////////////////////////////////////       
   if(menu0==3){
   if (newPosition != oldPosition){oldPosition = newPosition;
     att_rf=att_rf-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(att_rf>31){att_rf=31;}if(att_rf<0){att_rf=0;}audio();}
     tm.print_float(att_rf,0,  0b01010000,0b01110001,0,0);
     }  
////// LOUDNESS /////////////////////////////////////////////       
   if(menu0==4){
   if (newPosition != oldPosition){oldPosition = newPosition;
     loud=loud-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(loud>1){loud=0;}if(loud<0){loud=1;}audio();}
     tm.print_float(loud,0,  0b00111000,0b01011110,0,0);
     }  
////// GAIN /////////////////////////////////////////////       
   if(menu0==5){
   switch(in){
    case 0: gain=gain0;break;
    case 1: gain=gain1;break;
    case 2: gain=gain2;break;
    }
   if (newPosition != oldPosition){oldPosition = newPosition;
   gain=gain-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(gain>3){gain=3;}if(gain<0){gain=0;}audio();
   switch(in){
    case 0: gain0=gain;break;
    case 1: gain1=gain;break;
    case 2: gain2=gain;break;
    }}
     tm.print_float(gain,0,  0b00111101,0,0,0);
    }      
////// BRIGHTNESS /////////////////////////////////////////////       
   if(menu0==6){
   if (newPosition != oldPosition){oldPosition = newPosition;
     brig=brig-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;if(brig>6){brig=6;}if(brig<0){brig=0;}tm.brig(brig+1);}
     tm.print_float(brig,0,  0b01111100,0b01010000,0,0);
     } 
   } // mute        
 
////// EEPROM /////////////////////////////////////////////
   if(millis()-times>10000 && w==1){
     EEPROM.update(0,vol);EEPROM.update(1,bas+7);EEPROM.update(2,trb+7);EEPROM.update(3,att_lr);EEPROM.update(4,att_rr);
     EEPROM.update(5,att_lf);EEPROM.update(6,att_rf);EEPROM.update(7,in);
     EEPROM.update(8,gain0);EEPROM.update(9,gain1);EEPROM.update(10,gain2);EEPROM.update(11,brig);
     menu=0;menu0=100;w=0;}     
}//loop
 
 
void audio(){
    tda.volume(vol);  // byte 0...63 === 0...-78.75 dB (step 1.25 dB) 
    tda.att_lr(att_lr);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.att_rr(att_rr);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.att_lf(att_lf);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.att_rf(att_rf);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.audio_sw(in, loud, 3-gain);
      // byte 0...2 === input 0...2, byte 3 === Not allowed
      // bool 0...1 === loudness_on...loudness_off
      // byte 0...3 === gain 11.25...0 dB
    tda.set_bass(bas); // char -7...7 === bass -14...+14 dB
    tda.set_treb(trb); // char -7...7 === treble -14...+14 dB
}
 
void to_Timer(){newPosition = myEnc.read()/4;}

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=296

Комментарии

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

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

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

  • УМЗЧ класса D на TPA3122D2

    УМЗЧ класса D на TPA3122D2

    На ИМС TPA3122D2 можно собрать усилитель звуковой частоты класса D. Выходная мощность усилителя 15В (при напряжении питания 28В и сопротивлении нагрузки 8 Ом) на канал. Из-за высокого КПД микросхеме TPA3122D2 не нужен радиатор охлаждения. Так же микросхему TPA3122D2 можно использовать в мостовом соединении каналов. МикросхемаTPA3122D2 работает в диапазоне напряжений от 10 …Подробнее...
  • LED светильник с регулируемой яркостью (18 светодиодов)

    LED светильник с регулируемой яркостью (18 светодиодов)

    На регуляторе напряжения LM2941C можно сделать простой светодиодный светильник рассчитанный на 18 светодиодов. Яркость свечения светодиодов можно регулировать пока входное напряжение будет выше 10,5В. Источник: http://www.solorb.com/elect/solarcirc/18ledlit/index.html lm2941.pdfПодробнее...
  • Микросхемы-регуляторы громкости

    LA1362 — одно канальный регулятор громкости Ток потребления 40мА Коэффициент регулировки -70…+22дБ Частотный диапазон от 20 до 20000Гц К гармоник не более 0,5% Входное/выходное сопротивление 75/10кОм Напряжение питания 9…18В Uвх/Uвых 1/1,5В Корпус типа SIL9 LA2600 — двух канальный регулятор громкости Ток потребления 40мА Коэффициент регулировки -70…+22дБ Частотный диапазон от 20 …Подробнее...
  • Акустический выключатель для люстры

    Данная схема управляется хлопками в ладоши. Это переключатель для 2-х групп ламп с суммарной мощностью 300Вт. Акустические импульсы воспринимаются электретным микрофоном М1. Питание на него подается через R1, который одновременно служит его нагрузкой. Далее следует усилитель на VT1. Усиленные импульсы поступают на формирователь лог. импульсов, выполненный на интегральном таймере D1. …Подробнее...
  • К1460УД2х — СДВОЕННЫЙ МОЩНЫЙ ОПЕРАЦИОННЫЙ УСИЛИТЕЛЬ

    К1460УД2х — СДВОЕННЫЙ МОЩНЫЙ ОПЕРАЦИОННЫЙ УСИЛИТЕЛЬ

    К1460УД2х – интегральная микросхема представляет собой сдвоенный мощный операционный усилитель, пригодная для использования в качестве мощного ОУ в широком диапазоне областей применения, хорошо подходит для управления индуктивными нагрузками, в частности, для управления электродвигателями постоянного тока. Микросхема К1460УД2Рх является прямым аналогом микросхемы TCA0372 фирмы «MOTOROLA». ОСОБЕННОСТИ • Выходной ток до 1.0 А • Скорость нарастания …Подробнее...