| Ваш IP: 3.93.74.227 | Online(35) - гости: 22, боты: 13 | Загрузка сервера: 0.92 ::::::::::::


Темброблок на TDA8425 + модуль VS1838B (Arduino)

ИМС TDA8425 представляет собой двухканальный (стереофонический) регулятор громкости и тембра с микропроцессорным управлением. На странице https://rcl-radio.ru/?p=51737 ранее было написано как использовать TDA8425 совместно с Arduino Nano, а в качестве органов управления были рассмотрены два варианта, это управление кнопками и управление при помощи энкодера. На этой странице будет рассмотрен вариант использования ИК-модуля VS1838B с пультом управления.

Технические характеристики ИК-модуля VS1838B:

  • Потребляемый ток: 0,5 мА
  • Рабочая частота: 38 КГц
  • Расстояние приема сигнала: 20 м
  • Эффективный угол приема сигнала: 90˚
  • Рабочее напряжение (приемник): 2,7 — 5,5 В
  • Рабочее напряжение (модуль): 2,7 — 5,5 В

Технические характеристики TDA8425:

  • Напряжение питания минимальное 7 В
  • Напряжение питания максимальное 13,2 В
  • Частотный диапазон 35…20000 Гц
  • Коэффициент гармоник 0,05%
  • Выходное напряжение максимальное 1 В
  • Регулировка громкости 48 уровней от -88 дБ до +6 дБ с шагом 2 дБ
  • Регулировка тембра НЧ  от -12 дБ до +15 дБ с шагом 3 дБ
  • Регулировка тембра ВЧ  от -12 дБ до +12 дБ с шагом 3 дБ
  • Регулировка баланса 8 дБ с шагом 2 дБ

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

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

Стоит обратить внимание на то, что в рассматриваемом пульте при удержании кнопки длительное время сначала следует код команды кнопки, а далее код 0xFFFFFFFF как код удержания нажатой кнопки, при этом код 0xFFFFFFFF подается при удержании любой кнопки. В других пультах для каждой кнопки код удержания кнопки может быть свой для каждой кнопки.

#include <IRremote.h>
#include <Wire.h>
#include <TDA8425.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>//#include <EEPROMex.h>
 TDA8425 tda;
 IRrecv irrecv(12); // указываем вывод модуля IR приемника
 decode_results ir;
   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};
   byte menu,z,g1,g2,b1,b2,n1,n2,v1,v2,in,mute,w,w1;
   int vol,vol_d,balans,bass,bass_d,treb,treb_d;
   unsigned long time,time1;
 
 
void setup() {
  Serial.begin(9600); 
  irrecv.enableIRIn(); // запускаем модуль IR
  lcd.begin(16, 2);
  lcd.createChar(0,a1); lcd.createChar(1,a2); 
   vol = EEPROM.read(0);// vol eeprom
   bass = EEPROM.read(1);// bass eeprom
   treb = EEPROM.read(2);// treb eeprom
   in = EEPROM.read(3);// in eeprom
   balans = EEPROM.read(4)-4;// balans eeprom
  lcd.setCursor(4,0);lcd.print("TDA8425");delay(500);lcd.clear();
}
 
void loop() {
  if ( irrecv.decode( &ir )) {delay(200);Serial.print("0x");Serial.println( ir.value,HEX);time1=millis();time=millis();w=1;w1=1;irrecv.resume();}// IR приемник
 
   if(ir.value==0xFF18E7){menu++;cl();if(menu>4){menu=0;}}// меню кнопка вверх 0xFF18E7
   if(ir.value==0xFF4AB5){menu--;cl();if(menu==255){menu=4;}}// меню кнопка вниз 0xFF4AB5
   if(ir.value==0xFFA25D){menu=0;cl();g1=0;g2=0;}// меню кнопка 1(ГРОМКОСТЬ) 0xFFA25D
   if(ir.value==0xFF629D){menu=1;cl();b1=0;b2=0;}// меню кнопка 2(БАЛАНС) 0xFF629D
   if(ir.value==0xFFE21D){menu=2;cl();n1=0;n2=0;}// меню кнопка 3(НЧ) 0xFFE21D
   if(ir.value==0xFF22DD){menu=3;cl();v1=0;v2=0;}// меню кнопка 4(ВЧ) 0xFF22DD
   if(ir.value==0xFF02FD){menu=4;cl();}// меню кнопка 5(ВЫБОР ВХОДА) 0xFF02FD
  ///////////////////////// громкость /////////////////////////////
  if(menu==0){ // 0xFFFFFFFF - долгое нажатие любой кнопки
   if(ir.value==0xFF5AA5){vol++;g1=1;g2=0;cl();}// кнопка > 0xFF5AA5
   if(ir.value==0xFFFFFFFF and g1==1){vol++;g2=0;cl();}// кнопка >>>>>>
   if(ir.value==0xFF10EF){vol--;g1=0;g2=1;cl();}// кнопка < 0xFF10EF
   if(ir.value==0xFFFFFFFF and g2==1){vol--;g1=0;cl();}// кнопка <<<<<<
   if(vol>63){vol=63;}if(vol<=16){vol=16;}
  lcd.setCursor(0,0);lcd.print("Volume    ");
  vol_d=vol*2-120;
   if(vol_d>=0){lcd.print("+");}else{lcd.print("-");}
   if(vol_d>-10){{lcd.print(" ");}}
  lcd.print(abs(vol_d));lcd.print(" dB   ");
 // ползунок громкости начинает работать с -56 дБ
   if(vol-32>0){for(z=0;z<=vol-33;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}}
   if((vol-32)%2==0&&vol-32>=0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}
  audio();
  }
   ///////////////////////// баланс /////////////////////////////
  if(menu==1){// 0xFFFFFFFF - долгое нажатие любой кнопки
   if(ir.value==0xFF5AA5){balans++;b1=1;b2=0;cl();}// кнопка > 0xFF5AA5
   if(ir.value==0xFFFFFFFF and b1==1){balans++;b2=0;cl();}// кнопка >>>>>>
   if(ir.value==0xFF10EF){balans--;b1=0;b2=1;cl();}// кнопка < 0xFF10EF
   if(ir.value==0xFFFFFFFF and b2==1){balans--;b1=0;cl();}// кнопка <<<<<<
  if(balans>4){balans=4;}if(balans<-4){balans=-4;}
  lcd.setCursor(0,0);
   if(balans*2>=0){lcd.print("-");}else{lcd.print("+");}
  lcd.print(abs(balans*2));lcd.print(" dB ");
  lcd.print(" <>  ");
   if(balans*2>=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);}
  audio();
}
  ///////////////////////// тембр нч /////////////////////////////
  if(menu==2){// 0xFFFFFFFF - долгое нажатие любой кнопки
   if(ir.value==0xFF5AA5){bass++;n1=1;n2=0;cl();}// кнопка > 0xFF5AA5
   if(ir.value==0xFFFFFFFF and n1==1){bass++;n2=0;cl();}// кнопка >>>>>>
   if(ir.value==0xFF10EF){bass--;n1=0;n2=1;cl();}// кнопка < 0xFF10EF
   if(ir.value==0xFFFFFFFF and n2==1){bass--;n1=0;cl();}// кнопка <<<<<<
   if(bass>11){bass=11;}if(bass<2||bass==255){bass=2;}
  lcd.setCursor(0,0);lcd.print("Bass      ");
  bass_d=bass*3-18;
   if(bass_d>=0){lcd.print("+");}else{lcd.print("-");}
   if(bass_d>-10&&bass_d<=0||bass_d<10&&bass_d>0){{lcd.print(" ");}}
  lcd.print(abs(bass_d));lcd.print(" dB   ");
   if(bass>1){for(z=3;z<=bass+1;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}
  audio();
 }
   ///////////////////////// тембр вч /////////////////////////////
  if(menu==3){// 0xFFFFFFFF - долгое нажатие любой кнопки
   if(ir.value==0xFF5AA5){treb++;v1=1;v2=0;cl();}// кнопка > 0xFF5AA5
   if(ir.value==0xFFFFFFFF and v1==1){treb++;v2=0;cl();}// кнопка >>>>>>
   if(ir.value==0xFF10EF){treb--;v1=0;v2=1;cl();}// кнопка < 0xFF10EF
   if(ir.value==0xFFFFFFFF and v2==1){treb--;v1=0;cl();}// кнопка <<<<<<
   if(treb>10){treb=10;}if(treb<2||treb==255){treb=2;}
  lcd.setCursor(0,0);lcd.print("Treble    ");
  treb_d=treb*3-18;
   if(treb_d>=0){lcd.print("+");}else{lcd.print("-");}
   if(treb_d>-10&&treb_d<=0||treb_d<10&&treb_d>0){{lcd.print(" ");}}
  lcd.print(abs(treb_d));lcd.print(" dB   ");
   if(treb>1){for(z=3;z<=treb+1;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}
  audio();
 }
 ///////////////////////// input /////////////////////////////
  if(menu==4){
   if(ir.value==0xFF5AA5){in++;cl();}// кнопка > 0xFF5AA5
   if(ir.value==0xFF10EF){in--;cl();}// кнопка < 0xFF10EF
   if(in>1&&in<255){in=0;}if(in>2){in=1;}
  lcd.setCursor(0,0);lcd.print("Source selector");
  lcd.setCursor(0,1);lcd.print("Input: ");lcd.print(in);
  audio();
 }
 ////////////////// mute //////////////////////////////////
   if(ir.value==0xFFB04F){mute++;delay(500);cl();}// кнопка # 0xFFB04F
   if(mute>1){mute=0;cl();menu=0;}
   if(mute==1){menu=-1;audio();lcd.setCursor(6,0);lcd.print("MUTE");}
///////////////////  -20 dB ///////////////////////////////
   if(ir.value==0xFF6897){vol=vol-10;delay(500);audio();menu=0;cl();}//кнопка # 0xFF6897
 
   if(millis()-time>10000 and w==1 and mute==0){// возврат в меню громкости через 10 сек не активности
     menu=0;cl();w=0;}
   if(millis()-time1>60000 and w1==1){ // eeprom запись при не активности 60 сек
     EEPROM.update(0,vol);
     EEPROM.update(4,balans+4);
     EEPROM.update(1,bass);
     EEPROM.update(2,treb);
     EEPROM.update(3,in);
     w1=0;}
 
}//loop
 
void cl(){ir.value=0;delay(100);lcd.clear();}
 
void audio(){
  tda.setVolumeL(vol+balans);
  tda.setVolumeR(vol-balans);
  tda.setBass(bass);
  tda.setTreble(treb);
  tda.setMute(mute);
  tda.setSource(in);
 }

Кнопки вверх, вниз 1,2,3,4,5 на пульте используются для навигации по меню, а это соответственно громкость, баланс, тембр НЧ, тембр ВЧ, коммутатор входа. Кнопки # — MUTE, * — 20 дБ, < и > уменьшение или увеличение громкости, тембра и др.

При не активности модуля VS1838B в течении 10 секунд происходит переход в меню громкости, а при не активности модуля в течении 60 секунд происходит сохранение всех параметров в энергонезависимую память.

Видео

 

Комментарии

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

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

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

  • LM4861 маломощный миниатюрный  моно усилитель 1.1 Вт

    LM4861 маломощный миниатюрный моно усилитель 1.1 Вт

    ИМС LM4861 представляет собой миниатюрный (корпус SOIC) усилитель звуковой частоты с выходной мощностью 1,1 Вт. ИМС имеет тепловую защиту, КНИ не превышает 1% при сопротивлении нагрузки 8 Ом и выходной мощности 1 Вт. Максимальная выходная мощность 1,5 Вт при КНИ 10%. Усилитель снабжен режимом малого энергопотребления (режим отключения усилителя — …Подробнее...
  • Преобразователь напряжения 12В > 180В

    Преобразователь напряжения 12В > 180В

    На рисунке показана схема преобразователя постоянного напряжения 12 В в 180 В. Данная схема может использоваться в качестве источника питания газоразрядных индикаторов (для питания газоразрядных индикаторов (типа ИН) необходимо постоянное или пульсирующее напряжение 100…200 В.). Схема достаточно проста, содержит минимальный набор элементов. Генератор собран на микросхеме таймере NE555N, выход генератора …Подробнее...
  • Инвертор полярности напряжения

    Особенностью данного устройства является использование микросхемы К174УН7 (усил-ль мощности ЗЧ). Из-за сильной положительной ОС по переменному напряжению через С2 микросхема работает в режиме генерации прямоугольных импульсов(20кГц). Амплитуда выхода микросхемы 10В. Эти импульсы поданы на вход умножителя напряжения VD1-VD4 и С4-С7. Выходное напряжение стабилизирует параметрический стабилизатор R2VD5 с усилителем тока на …Подробнее...
  • Вакуумно-люминесцентные индикаторы

    Вакуумно-люминесцентные индикаторы

    Вакуумные люминесцентные индикаторы (далее как ВЛИ) преобразуют электрическую энергию в световую. По виду отображения информации они бывают единичные, цифровые, буквенные, шкальные, мнемонические и графические, а по исполнению могут быть одноразрядными, многоразрядными, а так же без фиксированных знакомест. Главное достоинство таких индикаторов это: высокая яркость, низкое рабочее напряжение, малое энергопотребление. Недостатком использования …Подробнее...
  • MP7720 — миниатюрный усилитель класса D

    MP7720 — миниатюрный усилитель класса D

    На микросхеме MP7720 можно собрать миниатюрный усилитель класса D. Особенностью данной микросхемы является отсутствие радиатора охлаждения, так КПД микросхемы более 90%, что позволяет уменьшить размеры конечного устройства. Характеристики усилителя: встроенная система устранения акустических щелчков включения/выключения встроенная защита от короткого замыкания выходная мощность на нагрузке 4 Ом 20 Вт при напряжении …Подробнее...