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

Регулятор тембра на микросхеме TDA7439 (Arduino)

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

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

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

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

 

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

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

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

TDA7439.zip — скачайте и установите измененную библиотеку для данного скетча

#include <Wire.h>
#include <TDA7439.h>
#include <LiquidCrystal.h>
#include <EEPROMex.h>
  TDA7439 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,gain3,gain4;
  byte menu,w,w1,in_d;
  unsigned long time;
 
 void setup() { Serial.begin(9600); Serial.print("TDA7439");
  lcd.begin(16, 2);
  lcd.setCursor(0,0);lcd.print("    TDA7439    ");delay(1000);
  pinMode(12,INPUT);// меню
  pinMode(11,INPUT);// плюс
  pinMode(10,INPUT);// минус
  pinMode(A1,INPUT);// in 1-4
  lcd.createChar(0,a1); lcd.createChar(1,a2);
  vol = EEPROM.read(0);// vol eeprom 
  bass = EEPROM.read(1)-7;// bass eeprom
  mids = EEPROM.read(2)-7;// mids 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
  gain3 = EEPROM.read(8);// gain3 eeprom
  gain4 = EEPROM.read(9);// gain4 eeprom
  g1();audio();
 }
 
 void loop() {
  if(digitalRead(12)==HIGH){menu++;cl();in_d=0;if(menu>4){menu=0;}}// меню
  if(analogRead(A1)>900){in++;menu=5;w=1;in_d=1;cl();if(in>4||in<1){in=1;}}// in
  // индикация громкости + управление кнопками //////////////
   if(menu==0){
   if(digitalRead(11)==HIGH){vol++;w=1;if(vol>48){vol=48;}}// 48 максимальная громкость  
   if(digitalRead(10)==HIGH){vol--;w=1;if(vol<0){vol=0;}}// 0 минимум громкости 
   if(w==1){audio();cl();time=millis();w=0;w1=1;}
  lcd.setCursor(0,0);lcd.print("Volume   ");
  lcd.print(-48+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);}
 }
 ///////////////////////////////////////////////////////////
 
   // индикация тембр CЧ + управление кнопками //////////////
   if(menu==2){
   if(digitalRead(11)==HIGH){mids++;w=1;if(mids>7){mids=7;}} 
   if(digitalRead(10)==HIGH){mids--;w=1;if(mids<-7){mids=-7;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print("Mids      ");
  lcd.print(mids*2);lcd.setCursor(13,0);lcd.print("dB");
   for(z=-7;z<=mids;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);}
 }
 ///////////////////////////////////////////////////////////
 
  // индикация тембр BЧ + управление кнопками //////////////
   if(menu==3){
   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==4){
   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));lcd.print(" dB ");
  lcd.print(" <>  ");
   if(balans>=0){lcd.print("+");}else{lcd.print("-");}
  lcd.print(abs(balans));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(2,mids+7);
     EEPROM.update(3,treb+7);
     EEPROM.update(5,in);
     EEPROM.update(6,gain1);EEPROM.update(7,gain2);EEPROM.update(8,gain3);EEPROM.update(9,gain4);
  menu=0;w1=0;cl();in_d=0;
 }
 }
 
 void g1(){if(in==1){gain=gain1;}if(in==2){gain=gain2;}if(in==3){gain=gain3;}if(in==4){gain=gain4;}}
 void g2(){if(in==1){gain1=gain;}if(in==2){gain2=gain;}if(in==3){gain3=gain;}if(in==4){gain4=gain;}}
 void cl(){delay(200);lcd.clear();}
 void audio(){
  tda.setInput(in); // 1 to 4 // номер канала
  tda.inputGain(gain); // 0 to 15 // усиление 
  tda.setVolume(vol); // 0 to 48 ( 0 is mute) // громкость
  tda.setSnd(bass, 1); //-7 to +7 , 1 - Bass | 2 - Mids | 3 - Trebble
  tda.setSnd(mids, 2);
  tda.setSnd(treb, 3); 
  tda.spkAtt(4-balans, 4+balans); // баланс R L от 0 to 79 (db) 
 }

Комментарии

  • Aleksandr:

    Ура заработало! Ардуино уно модель Р3 с выделеными каналами sda scl. И всё пошло! Спасибо.

  • Aleksandr:

    Короче у меня была мёртвая плата НАНО. Аналоговые входа не реагировали.

  • Aleksandr:

    Здравствуйте. Созрела мысль по поводу этой микросхемы. Имеется аттенюатор на 4 входа. Для обычного усилителя многовато, достаточно двух. Возможно ли использование шины I2C для подключения нескольких устройств? Например: МП3 плеер, FM радио в совокупности с этим аудиопроцессором. Ну и пару входов оставить для подключения источников.

  • 38ruslan:

    Спасибо за статью! Собрал пока что на коленках, все прекрасно заработало. Единственное, что смутило — это постоянка на выходе около 4В, подумал, что перегрел микросхему во время пайки. Перерыл весь интернет, оказалось, что так и должно быть. С опаской подключил к усилку … и, «О ЧУДО», оно запело!
    Не могли бы Вы подсказать, как добавить кнопку «MUTE»? Иногда бывает, нужно срочно убавить громкость, а тут пока по менюшке найдешь, пока натыкаешь…. Сам в программировании только начинаю разбираться, тяжело дается.
    Сейчас жду энкодер, хочу собрать схему с ним, думаю, будет удобнее.

    • liman28:

      Здраствйте!
      В раздел setup добавьте:
      pinMode(9,INPUT);// mute — новая кнопка на выход 9 цифровой
      А перед строкой:
      /////////// input + gain /////////////////////////////////////////
      добавьте:
      if(analogRead(9)==HIGH){mute++;}
      if(mute>1){mute=0;}
      if(mute==1){vol_old=vol;vol=0;}else{vol=vol_old;}

      перед setup добавьте новые переменные:
      int mute,vol_old;

      можно не добавлять кнопку а нажать одновременно + и —

      тогда новый код исправьте:
      if(analogRead(9)==HIGH){mute++;}
      на
      if(analogRead(11)==HIGH && analogRead(11)==HIGH){mute++;}

      Этот код не тестировался, поэтому может и не работать, если возникнут вопросы, то оставьте комментарий.

  • Здравствуйте.А это принципиально?У Вас на процессоре (по схеме) 26 нога 22Н ,25 нога 18Н,а по даташиту 26-18Н,25-22Н.

    • liman28:

      Спасибо, что заметили, буду исправлять схему, вероятней всего это бы повлияло на регулировку СЧ (при повышении уровня СЧ, уровень бы понижался и наоборот).

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

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

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

  • Простой испытатель кварцев

    Простой испытатель кварцев

    Схема испытателя кварцев состоит из генератора на VT1, детектора на диодах VD1 VD2 и усилителя постоянного тока на VT2. К устройству кварцевый резонатор подсоединяется при помощи зажимов. Если кварцевый резонатор исправен, то на R2 появляется ВЧ напряжение, которое затем поступает на диоды для детектирования. Выделенная постоянная составляющая открывает транзистор VT2, …Подробнее...
  • Простой АМ приемник на 2-х транзисторах

    Простой АМ приемник на 2-х транзисторах

    На рисунке показана схема простого АМ приемника состоящего всего из двух транзисторов. Транзистор VT1 работает как ВЧ-усилитель с обратной связью и как демодулятор одновременно. Чувствительность приемника зависит от величины обратной связи и может быть отрегулирована при помощи потенциометра VР1. VT2 используется как усилитель НЧ. Катушки антенный намотаны на ферритовом стержне …Подробнее...
  • Мостовой усилитель на базе TDA7374B

    Мостовой усилитель на базе TDA7374B

    Усилитель на базе TDA7374B относится к классу АВ и используется в автомобильных аудиосистемах. Микросхема имеет защиту от перенапряжения, переполюсовки, тепловую, защиту от статического электричества, защиту от КЗ выходов на шину питания и корпус. Так же имеется встроенная система STAND-BY и MUTE. Усилитель на базе TDA7374B имеет следующие характеристики: Номинальное напряжение …Подробнее...
  • Индикатор уровня

    Индикатор уровня

    Очень простая схема индикации уровня на 10-и светодиодах представлена на рис.. микросхема которая используется в данной схеме обладает коэф. усиления — 1. С помощью переключателя S1, мы можем выбрать индикации. Уровень водного сигнала от 60 мВ до 1,25 В. Элементная база R1-2=10Kohm D11-12=1N 4148 S1= mini switch R3-4=1Kohm C1=10uF 25V …Подробнее...
  • Усилитель мощности для СВ-радиостанции (27МГц)

    Данный усилитель мощности предназначен для эксплуатации носимой радиостанции в стационарном режиме. При этом сигнал с ее выхода поступает на вход усилителя через коаксиальный кабель. Мощность носимой радиостанции при входном сопротивлении 50 Ом усилителя мощности составляет 1-2Вт. Данный усилитель мощности развивает мощность до 30-40Вт. выход рассчитан на 75-омную антенну. Схема усилителя …Подробнее...