| Ваш IP: 18.204.227.117 | Online(27) - гости: 19, боты: 8 | Загрузка сервера: 0.58 ::::::::::::


TDA7449 — регулятор тембра и громкости (Arduino)

ИМС TDA7449 – регулятор громкости и регулятор тембра, разработан для использования в HI-FI аппаратуре и качественных автомобильных аудиосистемах, обладает низким уровнем шумов и искажений.

Основные технические характеристики ИМС TDA7449:

  • Громкость 47 уровней от -47 до 0 дБ (0 громкость -72 дБ)
  • Регулировка тембра НЧ, ВЧ  ±14 дБ (±7 уровней)
  • Коммутация входов — 2 стерео канала
  • Усиление от 0 до 30 дБ независимое для каждого канала
  • Регулировка баланса ±4 дБ (ограниченно программно)
  • Аттенюатор — 72 … 0 дБ
  • Напряжение питания от 6 до 10,2 В (типовое значение 9 В)
  • КНИ на частоте 1 кГц не более 0,01%

Плата Arduino Nano аудиопроцессор TDA7449 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация). В качестве индикатора используется LCD1602 на базе контроллера HD44780.

Управление регулятором тембра состоит из 4-х кнопок:

  1. Кнопка «МЕНЮ» — пять основных регулировок: громкость, тембр НЧ, тембр СЧ, тембр ВЧ, баланс.
  2. Кнопка «+» — увеличение громкости, тембра, рег. баланса, рег. усиления.
  3. Кнопка «-» — уменьшение громкости, тембра, рег. баланса, рег. усиления.
  4. Кнопка «INPUT» (режим INPUT) — выбор стерео канала и регулировка усиления для каждого канала.

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini A4 A5

Все настройки в МЕНЮ сохраняются в энергонезависимой памяти. Сохранение настроек происходит через 10 секунд неактивности кнопок управления. Для сохранения настроек в режиме INPUT, так же необходимо подождать 10 секунд, после чего номер текущего канала и настройки усиления всех каналов будут сохранены в энергонезависимой памяти.

Библиотека https://github.com/liman324/TDA7449/archive/master.zip или TDA7449.zip

#include <Wire.h>
#include <TDA7449.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>//#include <EEPROMex.h> для старых версий Arduino IDE
  TDA7449 tda;
  LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
  byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
  byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000};
  int vol,vol_d,z,bass,mids,treb,balans,in,gain,gain1,gain2;
  int att=4; // аттенюатор - если звук очень громкий увеличьте значение (-72 mute), меньше 4 не делать.
  byte menu,w,w1,in_d;
  unsigned long time;
 
void setup(){ 
  Serial.begin(9600);Wire.begin(); lcd.begin(16, 2);
   pinMode(12,INPUT);// меню
  pinMode(11,INPUT);// плюс
  pinMode(10,INPUT);// минус
  pinMode(A1,INPUT);// in 1-2
  lcd.createChar(0,a1); lcd.createChar(1,a2);
  vol = EEPROM.read(0);// vol eeprom 
  bass = EEPROM.read(1)-7;// bass eeprom
  treb = EEPROM.read(3)-7;// treb eeprom
  balans = EEPROM.read(4)-4;// balans eeprom
  in = EEPROM.read(5);// in eeprom
  gain1 = EEPROM.read(6);// gain1 eeprom
  gain2 = EEPROM.read(7);// gain2 eeprom
  g1();audio();
}
 
void loop() {
  if(digitalRead(12)==HIGH){menu++;cl();in_d=0;if(menu>3){menu=0;}}// меню
  if(analogRead(A1)>900){in++;menu=5;w=1;in_d=1;cl();if(in>2||in<1){in=1;}}// in
  // индикация громкости + управление кнопками //////////////
   if(menu==0){
   if(digitalRead(11)==HIGH){vol++;w=1;if(vol>47){vol=47;}}// 47 максимальная громкость  
   if(digitalRead(10)==HIGH){vol--;w=1;if(vol<0){vol=0;}}// 0 минимум громкости 
   if(vol==0){att=72;}else{att=4;}
   if(w==1){audio();cl();time=millis();w=0;w1=1;}
  lcd.setCursor(0,0);lcd.print("Volume   ");
  lcd.print(-47+vol);lcd.setCursor(13,0);lcd.print("dB");
  vol_d=vol/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);}
   lcd.setCursor(13,1);lcd.print(vol);
 }
 
  // индикация тембр НЧ + управление кнопками //////////////
   if(menu==1){
   if(digitalRead(11)==HIGH){bass++;w=1;if(bass>7){bass=7;}} 
   if(digitalRead(10)==HIGH){bass--;w=1;if(bass<-7){bass=-7;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print("Bass      ");
  lcd.print(bass*2);lcd.setCursor(13,0);lcd.print("dB");
   for(z=-7;z<=bass;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);}
 }
 ///////////////////////////////////////////////////////////
 
  // индикация тембр BЧ + управление кнопками //////////////
   if(menu==2){
   if(digitalRead(11)==HIGH){treb++;w=1;if(treb>7){treb=7;}} 
   if(digitalRead(10)==HIGH){treb--;w=1;if(treb<-7){treb=-7;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print("Trebble   ");
  lcd.print(treb*2);lcd.setCursor(13,0);lcd.print("dB");
   for(z=-7;z<=treb;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);}
 }
 ///////////////////////////////////////////////////////////
 
 // индикация баланс + управление кнопками +\- 4 дБ ///////
   if(menu==3){
   if(digitalRead(11)==HIGH){balans++;w=1;if(balans>4){balans=4;}}
   if(digitalRead(10)==HIGH){balans--;w=1;if(balans<-4){balans=-4;}}
  lcd.setCursor(0,0);
   if(balans>=0){lcd.print("-");}else{lcd.print("+");}
  lcd.print(abs(balans*2));lcd.print(" dB ");
  lcd.print(" <>  ");
   if(balans>=0){lcd.print("+");}else{lcd.print("-");}
  lcd.print(abs(balans*2));lcd.print(" dB ");
  lcd.setCursor(0,1);lcd.print("R");
  lcd.setCursor(15,1);lcd.print("L");
   if(balans<0){lcd.setCursor(balans+7,1);lcd.write((uint8_t)0);}
   if(balans>0){lcd.setCursor(balans+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);}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
 }
 /////////////////////////////////////////////////////////////
 
 /////////// input + gain /////////////////////////////////////////
   if(in_d==1){ g1(); 
   if(digitalRead(11)==HIGH){gain++;w=1;if(gain>15){gain=15;}}
   if(digitalRead(10)==HIGH){gain--;w=1;if(gain<0){gain=0;}}
   g2();
  lcd.setCursor(0,0);lcd.print("Input: ");lcd.print(in);
  lcd.setCursor(0,1);lcd.print("Input Gain: ");lcd.print(gain);
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
 }
////////////////////////////////////////////////////////////
 
 // запись всех настроек в EEPROM если кнопки + и - не нажимались в течении 10 сек
 // если настройки тембра, баланса и номер входа не менялись в течении 10 сек, переход в рег. Громкости
   if(millis()-time>10000 && w1==1){
     EEPROM.update(0,vol);
     EEPROM.update(4,balans+4);
     EEPROM.update(1,bass+7);
     EEPROM.update(3,treb+7);
     EEPROM.update(5,in);
     EEPROM.update(6,gain1);EEPROM.update(7,gain2);
  menu=0;w1=0;cl();in_d=0;
 }
 }
 
 void g1(){if(in==1){gain=gain1;}if(in==2){gain=gain2;}}
 void g2(){if(in==1){gain1=gain;}if(in==2){gain2=gain;}}
 void cl(){delay(200);lcd.clear();}
 
void audio(){
  tda.setInput(in); //         int 1...2 //// номер входа
  tda.inputGain(gain); //        int 0...15 (шаг 2дБ)    0...30 дБ  //// усиление
  tda.setVolume(vol); //       int 0...47 (шаг 1 дБ)  -47...0 дБ  //// громкость
  tda.setBass(bass); //          int -7...+7 (шаг 2 дБ) -14...14 дБ //// тембр НЧ
  tda.setTreble(treb); //        int -7...+7 (шаг 2 дБ) -14...14 дБ //// тембр ВЧ
  tda.setAttL(att-balans); //          int 0...79 (шаг 1дБ)    
  tda.setAttR(att+balans); //          int 0...79 (шаг 1дБ)    
}


Тестирование скетча tda7449 + энкодер + ИК пульт — http://forum.rcl-radio.ru/viewtopic.php?id=30

Тестирование скетча tda7449 + энкодер + ИК пульт + анализатор спектра — http://forum.rcl-radio.ru/viewtopic.php?pid=43#p43

Комментарии

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

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

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

  • Как работает микрофон

    Как работает микрофон

    В этом выпуске: что такое микрофон, принцип действия микрофона, как работает микрофон.Подробнее...
  • Низковольтный двухканальный усилитель мощности звуковой частоты КР174УН31

    Низковольтный двухканальный усилитель мощности звуковой частоты КР174УН31

    Микросхема КР174УН31 предназначена для применения в качестве оконечного каскада усиления звукового сигнала, подаваемого с микросхемы непосредственно на громкоговорители (сопротивление более 8 Ом), в малогабаритной аппаратуре (радиоприемниках, плейерах, беспроводных телефонах). Параметры микросхемы представлены в табл.1. Микросхема выпускается в 8-выводном корпусе DIP (типа 2101.8-1). Чертеж дан на рис.1. Типовые схемы включения — …Подробнее...
  • Простой преобразователь однополярного напряжения в 2-х полярное

    В маломощных уст-вах для питания например ОУ необходимо двух полярное напряжение питания, но имеется только один источник напряжения, например батарея КРОНА, что бы решить эту проблему можно применить простой преобразователь показанный на рисунке. В схеме использован таймер NE555 который работает как генератор импульсов с частотой 100Гц, на выходе генератора стоят …Подробнее...
  • Входной делитель для частотомера

    Входной делитель для частотомера

    Данная приставка позволяет расширить диапазон частотомера до 100-300МГц при верхнем пределе частотомера в 10-30МГц, то есть приставка представляет собой ВЧ делитель частоты на 10. Входное сопротивление приставки 75 Ом, чувствительность по входу 0,5В. VD1 VD2 совместно с R1 представляют собой ограничитель входного напряжения. Далее следует ВЧ дифференциальный усилитель на D1.1, …Подробнее...
  • Термостабилизатор для аквариума

    Несмотря на простоту предложенная схема обеспечивает высокую точность поддержания температуры и экономичность, при выключенном нагревателе уст-во потребляет не более чем 1,5Вт. Датчиком температуры является терморезистор RK1 с отрицательным ТКС. При снижении температуры воды на выводе 6 DA1 появиться напряжение низкого уровня относительно минуса питания (катод VS1). В цепи базы VT1 …Подробнее...