ИМС TDA7719 представляет собой Hi-Fi аудиопроцессор с программируемой матрицей входов, имеет 6 аудио выходов, независимый аттенюатор для каждого выхода и входа, три полосы регулировки тембра с изменяемой центральной частотой и добротностью, полосовой фильтр для сабвуферов (два выхода) с фазоинвертором, тонкомпенсация. При подачи на вход стерео сигнала аудиопроцессор после обработки преобразует его в квадро и дополнительные два канала для сабвуферов.
Аудиопроцессор имеет следующие технические характеристики:
- Напряжение питания от 7,5 до 10 В
- Ток потребления 35 мА
- Сопротивление по входу 100 кОм
- Коэффициент гармоник не более 0,01%
- Разделение каналов 90 дБ
- Отношение сигнал\шум 104 дБ
- Регулировка тембра:
- ВЧ ± 15 дБ, шаг регулировки 1 дБ, центральные частоты 10.0 12.5 15.0 17.5 кГц
- СЧ ± 15 дБ, шаг регулировки 1 дБ, центральные частоты 500 1000 1500 и 2500 Гц, добротность 0.5 0.75 1 и 1.25
- НЧ ± 15 дБ, шаг регулировки 1 дБ, центральные частоты 60 80 100 и 200 Гц, добротность 1.0 1.25 1.5 и 2.0
- Тонкомпенсация:
- Аттенюатор от -15 до 0 дБ
- Полосы частот — FLAT (линейная) 400 800 и 2400 Гц
- Сабвуфер:
- Два канала (R и L)
- Частоты полосового фильтра — FLAT 80 120 и 160 Гц
- Фазовый сдвиг дискретно от 0 до 180 °
- Регулировка громкости от -79 до 0 дБ
- Раздельная регулировка каждого выхода от -30 до 0 дБ
- Раздельная регулировка входов от -15 до + 15 дБ
- Кол-во стерео входов 6 (программно может быть изменена)
- Выходы:
- ПК фронт
- ЛК фронт
- ПК тыл
- ЛК тыл
- ПК сабвуфера
- ЛК сабвуфера
Ниже показан пример использования TDA7719 совместно с Arduino Nano. Управление аудиопроцессором происходит при помощи энкодера KY-040 и трех кнопок, информация выводится на LCD дисплея LCD1602 на базе контроллера HD44780.
Плата Arduino Nano с аудиопроцессором TDA7719 обменивается данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).
Плата | Пин SDA | Пин SCL |
---|---|---|
Arduino Uno, Nano, Pro и Pro Mini | A4 | A5 |
Все параметры заносятся в энергонезависимую память.
Кнопки управления:
- кнопка IN — переключение входов
- кнопка SET — переключение дополнительной функции
- кнопка MENU2 — вход в дополнительное меню
- энкодер — регулировка и переключение основных параметров
Все основные настройки производятся при помощи основного меню — громкость, тембр и тонкомпенсация, другие настройки находятся в дополнительном меню зайти в которое можно при помощи кнопки MENU2.
Настройки меню:
Регулировка громкости, тебмбра и тонкомпенсации происходит при помощи энкодера. Дополнительный параметр можно изменить при помощи кнопки SET. Перебор параметров осуществляется при помощи кнопки энкодера.
Аттенюатор выходов
При нажатии на кнопку MENU происходит переход в дополнительное меню, в первом пункте меню аттенюатор. Для перехода к следующему параметру так же нужно нажать на кнопку MENU2. Регулировка для каждого выхода раздельная, осуществляется поворотом ручки энкодера, перебор выходов происходит при нажатии кнопки SET.
Сабвуфер
Частота полосового фильтра изменятся кнопкой SET, фазовый сдвиг при помощи кнопки энкодера.
Добротность
Изменить добротность можно на СЧ и НЧ. Выбор полосы изменятся кнопкой SET, значение добротности при помощи кнопки энкодера.
Аттенюатор входов
Выбор входа изменятся кнопкой IN, ослабление при помощи ручки энкодера.
Библиотеки:
TDA7719.zip — библиотека поддерживает все функции заявленные в Datasheet
#include <Wire.h> #include <TDA7719.h> #include <Wire.h> #include <MsTimer2.h> #include <LiquidCrystal.h> #include <Encoder.h> #include <EEPROM.h> TDA7719 tda; Encoder myEnc(9, 8);//CLK, DT подключение энкодера LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD byte a1[8]={0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000}; byte a2[8]={0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000}; byte a3[8]={0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000}; unsigned long newPosition,time,oldPosition = -999; int menu,w,vol,vol_d,z,z0,z1,treb_f,mid_f,mid,mid_d,bass_f,bass,bass_d,treb,treb_d,loun,loun_d,loun_f,in,in0,menu2,faza,sub_f; int att_d,att_x,att,att_lf,att_rf,att_lr,att_rr,att_l,att_r,q,bass_q,mid_q,vol0,vol1,vol2,vol3,vol4,vol_att,vol_att_d; void setup(){ //Serial.begin(9600); Wire.begin();lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3); pinMode(A0,INPUT);// КНОПКА ЭНКОДЕРA pinMode(12,INPUT);// КНОПКА MENU2 pinMode(11,INPUT);// КНОПКА SET pinMode(10,INPUT);// КНОПКА IN vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-15;treb_f = EEPROM.read(2);mid = EEPROM.read(3)-15;mid_f = EEPROM.read(4);bass = EEPROM.read(5)-15;bass_f = EEPROM.read(6); loun = EEPROM.read(7)-15;loun_f = EEPROM.read(8);att_lf=EEPROM.read(9)-30;att_rf=EEPROM.read(10)-30;att_lr=EEPROM.read(11)-30;att_rr=EEPROM.read(12)-30; att_l=EEPROM.read(13)-30;att_r=EEPROM.read(14)-30;sub_f=EEPROM.read(15);faza=EEPROM.read(16);bass_q=EEPROM.read(17);mid_q=EEPROM.read(18); in0=EEPROM.read(19);vol0=EEPROM.read(20);vol1=EEPROM.read(21);vol2=EEPROM.read(22);vol3=EEPROM.read(23);vol4=EEPROM.read(24);inn(); MsTimer2::set(3, to_Timer);MsTimer2::start(); lcd.setCursor(0,0);lcd.print(" TDA7719 ");delay(1000);audio(); } void to_Timer(){newPosition = myEnc.read()/4;} void loop(){delay(10); if(analogRead(A0)<900&&menu2==0){menu++;cl();myEnc.write(0);time=millis();w=1;if(menu>4){menu=0;}}// меню if(digitalRead(12)==HIGH){menu2++;cl();menu=100;if(menu2>4){menu2=0;menu=0;}} //////////////////////////////////////// Громкость -79...0 дБ ////////////////////////////////////// if(menu==0){ if (newPosition != oldPosition) { oldPosition = newPosition; vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(vol>0){vol=0;}if(vol<-79){vol=-79;}audio();} lcd.setCursor(0,0);lcd.print("Volume "); lcd.print(" ");lcd.print(vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol+48; for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}} ///////////////////////////// Тембр ВЧ ///////////////////////////////////////////////////////////// if(menu==1){ if((digitalRead(11)==HIGH)){cl();treb_f++;time=millis();w=1;if(treb_f>3){treb_f=0;}audio();}// f_center if (newPosition != oldPosition) { oldPosition = newPosition; treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(treb>15){treb=15;}if(treb<-15){treb=-15;}audio();} lcd.setCursor(0,0);lcd.print("Treble "); switch(treb_f){case 0: lcd.print("10.0 kHz");break;case 1: lcd.print("12.5 kHz");break;case 2: lcd.print("15.0 kHz");break;case 3: lcd.print("17.5 kHz");break;} lcd.setCursor(10,1);lcd.print(" ");lcd.print(treb);lcd.print(" ");lcd.setCursor(14,1);lcd.print("dB");treb_d=treb+15; for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}} ///////////////////////////// Тембр СЧ ///////////////////////////////////////////////////////////// if(menu==2){ if((digitalRead(11)==HIGH)){cl();mid_f++;time=millis();w=1;if(mid_f>3){mid_f=0;}audio();}// f_center if (newPosition != oldPosition) { oldPosition = newPosition; mid=mid+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(mid>15){mid=15;}if(mid<-15){mid=-15;}audio();} lcd.setCursor(0,0);lcd.print("Middle "); switch(mid_f){case 0: lcd.print(" 0.5 kHz");break;case 1: lcd.print(" 1.0 kHz");break;case 2: lcd.print(" 1.5 kHz");break;case 3: lcd.print(" 2.5 kHz");break;} lcd.setCursor(10,1);lcd.print(" ");lcd.print(mid);lcd.print(" ");lcd.setCursor(14,1);lcd.print("dB");mid_d=mid+15; for(z=0,z0=0,z1=0;z<=mid_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}} ///////////////////////////// Тембр НЧ ///////////////////////////////////////////////////////////// if(menu==3){ if((digitalRead(11)==HIGH)){cl();bass_f++;time=millis();w=1;if(bass_f>3){bass_f=0;}audio();}// f_center if (newPosition != oldPosition) { oldPosition = newPosition; bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(bass>15){bass=15;}if(bass<-15){bass=-15;}audio();} lcd.setCursor(0,0);lcd.print("Bass "); switch(bass_f){case 0: lcd.print(" 60 Hz");break;case 1: lcd.print(" 80 Hz");break;case 2: lcd.print(" 100 Hz");break;case 3: lcd.print(" 200 Hz");break;} lcd.setCursor(10,1);lcd.print(" ");lcd.print(bass);lcd.print(" ");lcd.setCursor(14,1);lcd.print("dB");bass_d=bass+15; for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}} ///////////////////////////// Loudness ///////////////////////////////////////////////////////////// if(menu==4){ if((digitalRead(11)==HIGH)){cl();loun_f++;time=millis();w=1;if(loun_f>3){loun_f=0;}audio();}// f_center if (newPosition != oldPosition) { oldPosition = newPosition; loun=loun+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(loun>0){loun=0;}if(loun<-15){loun=-15;}audio();} lcd.setCursor(0,0);lcd.print("Loudness"); switch(loun_f){case 0: lcd.print(" FLAT ");break;case 1: lcd.print(" 400 Hz");break;case 2: lcd.print(" 800 Hz");break;case 3: lcd.print(" 2.4 kHz");break;} lcd.setCursor(10,1);lcd.print(" ");lcd.print(loun);lcd.print(" ");lcd.setCursor(14,1);lcd.print("dB");loun_d=loun*2+30; for(z=0,z0=0,z1=0;z<=loun_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}} /////////////// ATT OUT ///////////////////////////////////////////////////////////////// if(menu2==1){ if((digitalRead(11)==HIGH)){cl();att_x++;if(att_x>5){att_x=0;}}// att out lcd.setCursor(13,1); switch(att_x){case 0: lcd.print("LF");att = att_lf;break;case 1: lcd.print("RF");att = att_rf;break;case 2: lcd.print("LR");att = att_lr;break; case 3: lcd.print("RR");att = att_rr;break;case 4: lcd.print("SL");att = att_l;break;case 5: lcd.print("SR");att = att_r;break;} if (newPosition != oldPosition) { oldPosition = newPosition; att=att+newPosition;myEnc.write(0);newPosition=0;if(att>0){att=0;}if(att<-30){att=-30;}audio();} lcd.setCursor(0,0);lcd.print("Attenuation OUT"); switch(att_x){case 0: att_lf = att;break;case 1: att_rf = att;break;case 2: att_lr = att;break; case 3: att_rr = att;break;case 4: att_l = att;break;case 5: att_r = att;break;} lcd.setCursor(6,1);lcd.print(" ");lcd.print(att);lcd.print(" ");lcd.setCursor(10,1);lcd.print("dB");att_d=att/2+15; for(z=0,z0=0,z1=0;z<=att_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}} ///////////////////////////// sub ///////////////////////////////////////////////////// if(menu2==2){ lcd.setCursor(0,0);lcd.print("Subwoofer"); if((digitalRead(11)==HIGH)){cl();sub_f++;if(sub_f>3){sub_f=0;}audio();} lcd.setCursor(0,1);lcd.print("F: ");lcd.setCursor(3,1); switch(sub_f){case 0: lcd.print("FLAT ");break;case 1: lcd.print("80 Hz ");break; case 2: lcd.print("120 Hz");break;case 3: lcd.print("160 Hz");break;} if(analogRead(A0)<900){faza++;cl();if(faza>1){faza=0;}audio();} lcd.setCursor(10,1); switch(faza){case 0: lcd.print("Ph 180 ");break;case 1: lcd.print("Ph 0 ");break;}} /////////////////////////// q factor ////////////////////////////////////////////////// if(menu2==3){ lcd.setCursor(0,0);lcd.print("Q Factor"); if((digitalRead(11)==HIGH)){cl();q++;if(q>1){q=0;}} lcd.setCursor(0,1); switch(q){case 0: lcd.print("Bass ");break;case 1: lcd.print("Middle");break;} if(q==0){if(analogRead(A0)<900){bass_q++;cl();if(bass_q>3){bass_q=0;}audio();} switch(bass_q){case 0: lcd.print(" 1.0 ");break;case 1: lcd.print(" 1.25");break;case 2: lcd.print(" 1.5 ");break;case 3: lcd.print(" 2.0 ");break;}} if(q==1){if(analogRead(A0)<900){mid_q++;cl();if(mid_q>3){mid_q=0;}audio();} switch(mid_q){case 0: lcd.print(" 0.5 ");break;case 1: lcd.print(" 0.75");break;case 2: lcd.print(" 1.0 ");break;case 3: lcd.print(" 1.25 ");break;}} } //////////////////////// in ////////////////////////////////////////////////////////// inn(); if((digitalRead(10)==HIGH)){cl();in0++;if(in0>5){in0=0;}lcd.setCursor(0,0);lcd.print("INPUT ");lcd.print(in0);inn();audio();delay(1000);cl(); } //////////////////////////////////// att input //////////////////////////////////////////// if(menu2==4){ switch(in){ case 0: vol_att = vol0;break; case 1: vol_att = vol1;break; case 2: vol_att = vol2;break; case 5: vol_att = vol3;break; case 6: vol_att = vol4;break; } if (newPosition != oldPosition) { oldPosition = newPosition; vol_att=vol_att+newPosition;myEnc.write(0);newPosition=0;if(vol_att<-15){vol_att=-15;}if(vol_att>15){vol_att=15;}audio();} switch(in){ case 0: vol0 = vol_att;break; case 1: vol1 = vol_att;break; case 2: vol2 = vol_att;break; case 5: vol3 = vol_att;break; case 6: vol4 = vol_att;break; } lcd.setCursor(0,0);lcd.print("Attenuator IN ");lcd.print(in0); lcd.setCursor(10,1);lcd.print(" ");lcd.print(vol_att);lcd.print(" ");lcd.setCursor(14,1);lcd.print("dB");vol_att_d=vol_att+15; for(z=0,z0=0,z1=0;z<=vol_att_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);} } ///////////////////// EEPROM ///////////////////////////////////////////// if(millis()-time>10000 && w==1 && menu2==0){ inn(); EEPROM.update(0,vol+79);EEPROM.update(1,treb+15);EEPROM.update(2,treb_f);EEPROM.update(3,mid+15);EEPROM.update(4,mid_f);EEPROM.update(5,bass+15);EEPROM.update(6,bass_f); EEPROM.update(7,loun+15);EEPROM.update(8,loun_f);EEPROM.update(9,att_lf+30);EEPROM.update(10,att_rf+30);EEPROM.update(11,att_lr+30);EEPROM.update(12,att_rr+30); EEPROM.update(13,att_l+30);EEPROM.update(14,att_r+30);EEPROM.update(15,sub_f);EEPROM.update(16,faza);EEPROM.update(17,bass_q);EEPROM.update(18,mid_q); EEPROM.update(18,mid_q);EEPROM.update(19,in0);EEPROM.update(20,vol0);EEPROM.update(21,vol1);EEPROM.update(22,vol2);EEPROM.update(23,vol3);EEPROM.update(24,vol4); cl();menu=0;w=0;} } void inn(){if(in0==3){in=6;}else{in=in0;}} void cl(){delay(300);lcd.clear();} void audio(){ tda.setInput(in,1,1,2); // 0...7, 0...1, 0...1, 0...7 tda.setInput_2(0,0,1,1,1,1); // 0...7, 0...1, 0...1, 0...1, 0...1, 0...1 tda.setMix_source(7,0); // 0...7, 0...-31 tda.setMix_cont(1,1,1,1,1,1,1,1); // all 0...1 tda.setMute(1,0,0,1,0,1,1); // 0...1, 0...1, 0...3, 0...1, 0...1, 0...1, 0...1 tda.setSoft_1(1,1,1,1,1,1,1,1); //all 0...1 tda.setSoft_2(1,1,1,1,0,3); // 0...1, 0...1, 0...1, 0...1, 0...2, 0...3 tda.setLoudness(loun,loun_f,1,1); // 0...-15, 0...3, 0...1, 0...1 tda.setVol(vol_att,1,1); // -15...+15, 0...1, 0...1 tda.setTreble(treb,treb_f,1); // -15...+15, 0...3, 0...1 tda.setMiddle(mid,mid_q,1); // -15...+15, 0...3, 0...1 tda.setBass(bass,bass_q,1); // -15...+15, 0...3, 0...1 tda.setSMB(sub_f,faza,mid_f,bass_f,1); // 0...3, 0...1, 0...3, 0...3, 0...1 tda.setVol_LF(vol+att_lf,1); // 0...-79, 0...1 tda.setVol_RF(vol+att_rf,1); // 0...-79, 0...1 tda.setVol_LR(vol+att_lr,1); // 0...-79, 0...1 tda.setVol_RR(vol+att_rr,1); // 0...-79, 0...1 tda.setVol_SUB_L(vol+att_l,1); // 0...-79, 0...1 tda.setVol_SUB_R(vol+att_r,1); // 0...-79, 0...1 tda.setTest1(0,14,1,1); // 0...1, 0...15, 0...1, 0...1 tda.setTest2(0,1,1,3); // 0...1, 0...1, 0...1, 0...3 }
TDA7719 + ИК пульт
tda7719_IR.zip (скетч не тестировался) — добавлен ИК пульт, регулировка громкости, тембра и тонкомпенсации, кнопки переключение меню в прямом и обратном направлении, кнопки прибавить и убавить.
В мониторе порта можно получить коды кнопок Вашего пульта.
Для нормальной работы скетча необходимо скачать дополнительные библиотеку:
IRremote.zip — библиотека изменена
TDA7719 + TFT-дисплей SPI 320×240
Управление всеми параметрами аудиопроцессора происходит при помощи энкодера, поворачивая ручку энкодера можно переходить по параметрам, при нажатии на кнопку энкодера можно активировать нужный параметр и поворотом ручки энкодера изменить его. Основные параметры (громкость и тембр) расположены в верху экрана, редко используемые в остальной части экрана. При не активности энкодера в течении 10 секунд, происходит запись всех параметров в энергонезависимую память и переход в параметр громкость.
- Дисплей — TFT-дисплей SPI 320×240 (Arduino)
- Библиотека — UTFT.zip
- Энкодер D7, D6 = CLK, DT, А0 — кнопка энкодера
- Скетч №1 tft7719_2.zip
- Скетч №2 tft7719_3_cv.zip
- При первой загрузке скетча, поочередно установите все параметры, что бы они сохранились в памяти.
Всем привет,как связаться с автором этой схемы и скетча? Есть пара нюансов в исправлении которых буду очень благодарен.
Задавайте вопросы. Я автор.
Значит сделал я все ото это для акустики 2.1 и частота среза для сабба почему то не реагирует на него, сабб играет как будто без каких либо фильтров
Попробуйте изменить строку:
if((digitalRead(11)==HIGH)){cl();sub_f++;if(sub_f>3){sub_f=0;}}
на
if((digitalRead(11)==HIGH)){cl();sub_f++;if(sub_f>3){sub_f=0;}audio();}
Если все заработает как надо, то оставьте комментарий что бы я отредактировал в статье скетч.
К сожалению ничего не изменилось, меню сабвуфера никак не влияет на его звучания, ни по частоте ни помоему по фазе тоже
Фильтр должен работать, но на такой частоте на слух это услышать трудно, а по фазе он и не будет работать, фаза работает только между двумя сабвуферами, а у Вас система 2.1
Может, есть смысл соединить два выхода на сабвуфер после конденсаторов в один? Не часто используются где-то в системе 2 сабвуфера.
Будет ли адекватно работать аудиопроцессор?
Нет, не надо. Просто не используйте второй выход
aynı sorunu yaşıyorum, çözüm bulduysanız lütfen kodu paylaşın.
Teşekkürler.
Большое спасибо, обязательно попробую но у меня сейчас тихий час)), и еще, возможно вместо кнопки SET использовать туже кнопку энкодера но при ее удержании 2сек?
Это возможно, не знаю насколько удобно будет пользоваться, но попробовать можно.
Чисто теоретически это можно реализовать так:
if(analogRead(A0)<900&&menu2==0){if(st==0) {menu++;}st++;cl();myEnc.write(0);time=millis();w=1;if(menu>4){menu=0;}}// меню
}if(st>3){set=1;}else{set=0;}
if(analogRead(A0)>900){st=0;
когда set == 1, то нужно изменить все строки (на примере фильтра частот для ВЧ):
if((digitalRead(11)==HIGH)){cl();treb_f++;time=millis();w=1;if(treb_f>3){treb_f=0;}audio();}// f_center
на
if(set==1){cl();set=0;treb_f++;time=millis();w=1;if(treb_f>3){treb_f=0;}audio();}// f_center
Ухх нашел,хотя я в этом не очень)) tda.setMute(1,0,0,1,0,1,1); по даташиту Subwoofer Enable 1-off, 0-on. теперь четко отрезает
Отлично, поправлю скетч, я думал что это mute для сабвуфера, поэтому поставил 1
И вообще я доволен этим процем,две мощные колонки +саб и слышно разницу в изменении фазы саба. Благодарочка за статейку и за отзывы..Буду дальше пытаться усовершенствовать, и надеюсь на вашу помощь;) PS может кому надо такой проц могу отослать я их прикупил маленько)
Всем привет, сложно ли будит переделать скетч под TFT-дисплей SPI 320×240 на контроллере ILI9341C, что бы управлять только одним энкодером?
Наподобие этого
http://rcl-radio.ru/wp-content/uploads/2019/04/7523965782368.png
Возможно, только TFT-дисплей SPI 320×240 на контроллере ILI9341C немного тормознутый, с анимацией полосы прокрутки могут быть проблемы.
Да, это то что нужно, как с вами в личных связаться? Я из Украины, яндекс и маил не работают
rcl.radio75@gmail.com
Вопрос — будет ли запускаться схема с дисплеем LCD1602 автоматически при подаче питания? И какой вход процессора по умолчанию будет выбран?
Да, будет. Вход 0
In0L и In0R по умолчанию выбирается?
А где будет на выходе сигнал при подаче на эти входы стерео?
Все настройки сохраняются в энергонезависимой памяти, по умолчанию ни чего нет
Стерео сигнал будет автоматически разделяться на квадро? Будет сигнал на выходах процессора 18-19-20-21?
Да
Спасибо!
И ещё вопрос — можно ли задавать разные настройки тембра и усиления на разные входы? Например, разные настройки для радио и CD. Будут ли они сохраняться?
Только усиление
настройки не сохраняются в енергонезависимую память
вернее attenuation in не сохраняется почему то
После изменения параметра attenuation in надо изменить любой другой параметр и подождать 10 секунд.
можно ли как-то использовать только кнопку энкодера вместо дополнительных?
Слишком много параметров, на одном энкодере сложно сделать.
собираю колонку с двумя усилителями один на нч и один вч поэтому решил использовать аудиопроцессор понравилось звучание выглядит ужасно но работает без шумов вывел разьем для прошивки вообщем спасибо за подробную статью буду дальше допиливать интерфейс под колонку)
кстати, чтобы енкодер крутился вы правильную сторону нужно здесь
void to_Timer(){newPosition = myEnc.read()/4;}
поставить минус :
void to_Timer(){newPosition = myEnc.read()/-2;}
Можно так же поменять подключение (физически или программно):
Encoder myEnc(9, 8);//CLK, DT подключение энкодера
на
Encoder myEnc(8, 9);//CLK, DT подключение энкодера