| Ваш IP: 3.237.6.124 | Online(26) - гости: 12, боты: 14 | Загрузка сервера: 1.99 ::::::::::::

Аудиопроцессор 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

Комментарии

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

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

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

  • Мощность аудио усилитель на основе STK400xx

    Мощность аудио усилитель на основе STK400xx

    Аудио усилитель на основе микросхемы серии STK400xx. Эта микросхема даст вам очень хорошее качество звука, эта микросхема STK40xx имеет малую стоимость. Вы легко получите хорошую выходную мощность используя данную микросхему при минимуме внешних элементов. Сборка усилителя на данной микросхеме не требует особых знаний и опыта, только обратите внимание на контакты …Подробнее...
  • Преобразователь 12V dc в 220V Ac 50Нz

    Используя данную схемы Вы можете преобразовать постоянное напряжение +12В от аккумулятора автомобиля в переменное 220В 50 Гц мощностью в 500Вт. В качестве задающего генератора преобразователя используется микросхема CD4047В. Как вычислить мощность трансформатора: Например, если мы хотим получить выходную мощность в 220Вт при напряжении 220В тогда, тогда мы получает ток в …Подробнее...
  • УМЗЧ 7 Вт (класс А)

    УМЗЧ 7 Вт (класс А)

    На рисунке показана схема простого, но достаточно качественного усилителя класса А, с максимальной выходной мощностью 7 Вт на нагрузке 8 Ом. Максимальный ток потребления усилителя 450-500 мА при напряжении питания 24 В. Общие гармонические искажения при выходной мощности 7 Вт не превышают 0,15% и 0,02% при выходной мощности 1 Вт. …Подробнее...
  • Поливальный автомат для комнатных растений

    В основе поливального автомата использован насос от омывателя стекол автомашины ИЖ-21251, но можно использовать и другой подходящий для этих целей насос. Насос подсоединен к несложному уст-ву на микросхемах серии К561, входы этих микросхем способны реагировать на логические уровни поступающие через достаточно большие сопротивления. На входы D1.1 подается некоторое напряжение величина …Подробнее...
  • Источник питания 0-35V 2А

    Для Источника питания необходим трансформатор мощностью 80-100Вт с напряжением на вторичной обмотке 2*35-40В с отводом от середины. Транзистор 2N3055  должен быть установлен на достаточно мощный радиатор. Транзистор VT4 используется в цепи питания светодиода (индикатор), при ненадобности индикатора эту цепь можно из схемы исключить. Источник материала —  www.eleccircuit.comПодробнее...