Темброблок состоит из двух микросхем PT2323 и PT2322, управление осуществляется при помощи Arduino Nano.
Плата Arduino Nano с аудиопроцессорами PT2323 и PT2322 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).
PT2323 представляет собой коммутатор аудио сигналов. Микросхема имеет 4-е стерео входа и один шести канальный вход формата 5.1. Стерео сигнал подаваемый на входы микросхемы преобразуется в аудио сигнал формата 5.1, а аудио сигнал формата 5.1 поступает на выход 5.1 без изменений.
PT2323 имеет следующие аудио выходы:
- FR — правый канал фронт
- FL — левый канал фронт
- SR — правый канал тыл
- SL — левый канал тыл
- CT — центральный канал
- SUB — канал сабвуфера
Параметры PT2323:
- Напряжение питания 9 В (4,5 В минимальное)
- КНИ при входном напряжении сигнала 0.2 Vrms не более 0,005 %
- Отношение сигнал / шум 100 дБ
- Максимальное входное напряжение 3,75 Vrms
PT2322 представляет собой регулятор 3-х полосной регулятор тембра и громкости, микросхема имеет 6 входов и 6 выходов (FR, FL, SR, SL, CT, SUB), по канальный аттенюатор, 3D — эффект.
- Напряжение питания от 5 до 12 В (9 рекомендуемое)
- Ток потребления 25…40 мА
- Входное сопротивление 50 кОм
- Разделение каналов 107 дБ
- Отношение сигнал / шум 98 дБ
- КНИ при входном напряжении сигнала 0.2 Vrms не более 0,005 %
- Регулировка тембра ± 14 дБ с шагом 2 дБ
- Регулировка громкости от -79 дБ до 0 дБ
- Аттенюатор (не зависимый для каждого канала) от -15 дБ до 0 дБ
Библиотеки
PT2323.zip https://github.com/liman324/PT2323.git
PT2322.zip https://github.com/liman324/PT2322.git
Пример скетча показанный ниже позволяет управлять параметрами PT2323 и PT2322 при помощи 4-х кнопок с выводом информации на LCD1602 (ЖК-дисплей на базе HD44780).
Управление параметрами темброблока достаточно простое, при помощи кнопки МЕНЮ можно выбрать регулируемый параметр и изменить его при помощи кнопок ПЛЮС и МИНУС, четвертая кнопка — выбор входа. Режим MUTE активируется одновременным нажатием кнопок ПЛЮС и МИНУС.
Все параметры заносятся в энергонезависимую память.
#include <Wire.h> #include <PT2323.h> #include <PT2322.h> #include <LiquidCrystal.h> #include <EEPROM.h> PT2323 pt0; PT2322 pt1; LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000}; byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000}; unsigned long time; int menu,w,vol,vol_d,z,in,bass,bass_d,mid,mid_d,treb,treb_d,attfl,attfl_d,attcn,attcn_d,attsub,attsub_d,ddd,tembro,x,attfr,attfr_d,atttl,atttl_d,atttr,atttr_d,mute; void setup() { Wire.begin();Serial.begin(9600); lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2); pinMode(A0,INPUT); // menu pinMode(A1,INPUT); // + pinMode(A2,INPUT); // - pinMode(A3,INPUT); // input vol = EEPROM.read(0);in = EEPROM.read(1);bass = EEPROM.read(2)-7;mid = EEPROM.read(3)-7;treb = EEPROM.read(4)-7; attfl = EEPROM.read(5)-14;attcn = EEPROM.read(7)-14;attsub = EEPROM.read(8)-14;ddd = EEPROM.read(9);tembro = EEPROM.read(10); attfr = EEPROM.read(11)-14;atttl = EEPROM.read(12)-14;atttr = EEPROM.read(13)-14; delay(500); audio1();audio2(); } void loop() { if(analogRead(A0)>900&&mute!=1){menu++;cl();time=millis();w=1;if(menu>11){menu=0;}}// меню /////////////////////////////// volume /////////////////////////////////////////////// if(menu==0){ if(analogRead(A1)>900){vol++;w=1;if(vol>79){vol=79;}audio2();cl();time=millis();}// 79 максимальная громкость if(analogRead(A2)>900){vol--;w=1;if(vol<0){vol=0;}audio2();cl();time=millis();}// 0 минимум громкости lcd.setCursor(0,0);lcd.print("Volume "); lcd.print(-79+vol);lcd.setCursor(13,0);lcd.print("dB");vol_d=vol/2-15; 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);lcd.print(" ");} ///////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр НЧ + управление кнопками -14...14 дБ /////////////////// if(menu==1){ if(analogRead(A1)>900){bass++;w=1;if(bass>7){bass=7;}audio2();cl();time=millis();} if(analogRead(A2)>900){bass--;w=1;if(bass<-7){bass=-7;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("Bass "); lcd.print(bass*2);lcd.setCursor(13,0);lcd.print("dB");bass_d=bass+7; if(bass_d>=0){for(z=0;z<=bass_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((bass_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр CЧ + управление кнопками -14...14 дБ /////////////////// if(menu==2){ if(analogRead(A1)>900){mid++;w=1;if(mid>7){mid=7;}audio2();cl();time=millis();} if(analogRead(A2)>900){mid--;w=1;if(mid<-7){mid=-7;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("Middle "); lcd.print(mid*2);lcd.setCursor(13,0);lcd.print("dB");mid_d=mid+7; if(mid_d>=0){for(z=0;z<=mid_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((mid_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр BЧ + управление кнопками -14...14 дБ /////////////////// if(menu==3){ if(analogRead(A1)>900){treb++;w=1;if(treb>7){treb=7;}audio2();cl();time=millis();} if(analogRead(A2)>900){treb--;w=1;if(treb<-7){treb=-7;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("Treble "); lcd.print(treb*2);lcd.setCursor(13,0);lcd.print("dB");treb_d=treb+7; if(treb_d>=0){for(z=0;z<=treb_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((treb_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////// rock pop classic ////////////////////// if(menu==4){ if(analogRead(A1)>900){tembro++;w=1;if(tembro>4){tembro=0;}cl();time=millis();} if(analogRead(A2)>900){tembro--;w=1;if(tembro<0){tembro=4;}cl();time=millis();} lcd.setCursor(0,0);lcd.print(" Preset timbre "); if(tembro==0){lcd.setCursor(0,1);lcd.print(" manual mode ");} if(tembro==1){lcd.setCursor(0,1);lcd.print(" ROCK ");bass=4,mid=-2;treb=5;x=1;} if(tembro==2){lcd.setCursor(0,1);lcd.print(" POP ");bass=-3,mid=3;treb=-2;x=1;} if(tembro==3){lcd.setCursor(0,1);lcd.print(" CLASSIC ");bass=0,mid=0;treb=-2;x=1;} if(tembro==4){lcd.setCursor(0,1);lcd.print(" default ");bass=0,mid=0;treb=0;x=1;} if(x==1){audio2();x=0;} } //////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT FL /////////////////// if(menu==5){ if(analogRead(A1)>900){attfl++;w=1;if(attfl>0){attfl=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attfl--;w=1;if(attfl<-14){attfl=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT FL "); lcd.print(attfl);lcd.setCursor(13,0);lcd.print("dB");attfl_d=attfl+14; if(attfl_d>=0){for(z=0;z<=attfl_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attfl_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT FR /////////////////// if(menu==6){ if(analogRead(A1)>900){attfr++;w=1;if(attfr>0){attfr=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attfr--;w=1;if(attfr<-14){attfr=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT FR "); lcd.print(attfr);lcd.setCursor(13,0);lcd.print("dB");attfr_d=attfr+14; if(attfr_d>=0){for(z=0;z<=attfr_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attfr_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT TL /////////////////// if(menu==7){ if(analogRead(A1)>900){atttl++;w=1;if(atttl>0){atttl=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){atttl--;w=1;if(atttl<-14){atttl=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT TL "); lcd.print(atttl);lcd.setCursor(13,0);lcd.print("dB");atttl_d=atttl+14; if(atttl_d>=0){for(z=0;z<=atttl_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((atttl_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT TR /////////////////// if(menu==8){ if(analogRead(A1)>900){atttr++;w=1;if(atttr>0){atttr=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){atttr--;w=1;if(atttr<-14){atttr=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT TR "); lcd.print(atttr);lcd.setCursor(13,0);lcd.print("dB");atttr_d=atttr+14; if(atttr_d>=0){for(z=0;z<=atttr_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((atttr_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT CN /////////////////// if(menu==9){ if(analogRead(A1)>900){attcn++;w=1;if(attcn>0){attcn=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attcn--;w=1;if(attcn<-14){attcn=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT CN "); lcd.print(attcn);lcd.setCursor(13,0);lcd.print("dB");attcn_d=attcn+14; if(attcn_d>=0){for(z=0;z<=attcn_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attcn_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT SUB /////////////////// if(menu==10){ if(analogRead(A1)>900){attsub++;w=1;if(attsub>0){attsub=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attsub--;w=1;if(attsub<-14){attsub=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT SUB "); lcd.print(attsub);lcd.setCursor(13,0);lcd.print("dB");attsub_d=attsub+14; if(attsub_d>=0){for(z=0;z<=attsub_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attsub_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// //////////////////////////// 3d /////////////////////////////////////////////// if(menu==11){ if(analogRead(A1)>900){ddd++;w=1;if(ddd>1){ddd=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){ddd--;w=1;if(ddd<0){ddd=1;}audio2();cl();time=millis();} lcd.setCursor(0,0); if(ddd==0){lcd.print(" 3D ON ");}else{lcd.print(" 3D OFF ");} } //////////////////////////////////////////////////////////////////////////////// if(analogRead(A3)>900){in++;if(in>4){in=0;}audio1();cl();lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);delay(2000);time=millis();w=1;}// in // if(analogRead(A3)>900){in++;if(in>5){in=0;}audio1();cl();lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);delay(2000);time=millis();w=1;}// если in = 5 то включен шести канальный вход //////////// mute //////////////////////// if(mute==1&&(analogRead(A1)>900||analogRead(A2)>900)){mute=0;menu=0;audio1();cl();} if(analogRead(A1)>900&&analogRead(A2)>900){mute=1;menu=100;audio1();cl();} if(mute==1){lcd.setCursor(0,0);lcd.print(" MUTE ");delay(300);} ///////////////////////////////eeprom//////////////////////////////////////////////// if(millis()-time>10000&& w==1&&mute==0){ EEPROM.update(0,vol);EEPROM.update(1,in);EEPROM.update(2,bass+7);EEPROM.update(3,mid+7);EEPROM.update(4,treb+7); EEPROM.update(5,attfl+14);EEPROM.update(7,attcn+14);EEPROM.update(8,attsub+14);EEPROM.update(9,ddd);EEPROM.update(10,tembro); EEPROM.update(11,attfr+14);EEPROM.update(12,atttl+14);EEPROM.update(13,atttr+14); menu=0;w=0;cl();} ///////////////////////////////////////////////////////////////////////////////////// }// loop void cl(){delay(300);lcd.clear();} void audio1(){ pt0.setInput(in); pt0.setMute(0,0,0,0,0,0,mute); pt0.setFeature(1,1); } void audio2(){ pt1.setFront_lk_att(abs(attfl));// att front L pt1.setFront_rk_att(abs(attfr));// att front R pt1.setCenter_att(abs(attcn)); // att center pt1.setRear_lk_att(abs(atttl)); // att rear L pt1.setRear_rk_att(abs(atttr)); // att rear R pt1.setSub_att(abs(attsub)); // att sub pt1.setFunc(0,ddd,0); // mute,3d,тембр on/off pt1.setBass(bass); // BASS -14...0...14 dB (int -7...0...7) pt1.setMiddle(mid); // MIDDLE -14...0...14 dB (int -7...0...7) pt1.setTreble(treb); // TREBLE -14...0...14 dB (int -7...0...7) pt1.setVol(vol); // 0...79 }
- http://rcl-radio.ru/wp-content/uploads/2024/03/sketch_mar20a.ino — ИК пульт (пример скетча)
- Скетч протестирован. Энкодер, кнопки IN и MUTE, ИК — пульт дублирующий полностью энкодер и кнопку IN (видео работы скетча показано ниже)
#define CH_UP 0x2FDF20D #define CH_DW 0x2FDF30D #define CH 0x2FDF50D #define IN 0x2FDF70D #define VOL_UP 0x2FDF40D #define VOL_DW 0x2FDF80D #include <Wire.h> #include <PT2322.h> #include <PT2323.h> #include <LiquidCrystal.h> #include <EEPROM.h> #include <Encoder.h> #include <MsTimer2.h> #include <boarddefs.h> #include <IRremote.h> PT2322 pt; PT2323 pt0; Encoder myEnc(9, 8);//CLK, DT подключение энкодера IRrecv irrecv(13); // указываем вывод модуля IR приемника decode_results ir; 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,menu2,w,vol,vol_d,z,z0,z1,in,bass,bass_d,mid,mid_d,treb,treb_d,attfl,attfl_d,attcn,attcn_d,attsub,attsub_d,ddd,tembro,x,attfr,attfr_d,atttl,atttl_d,atttr,atttr_d,mute; int g1,g2,inn; void setup() { Wire.begin();Serial.begin(9600);irrecv.enableIRIn(); // запускаем модуль IR lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3); pinMode(A0,INPUT); // menu кнопка энкодера pinMode(12,INPUT); // MUTE pinMode(11,INPUT); // IN MsTimer2::set(2, to_Timer);MsTimer2::start(); vol = EEPROM.read(0)-79;in = EEPROM.read(1);bass = EEPROM.read(2)-7;mid = EEPROM.read(3)-7;treb = EEPROM.read(4)-7; attfl = EEPROM.read(5)-14;attcn = EEPROM.read(7)-14;attsub = EEPROM.read(8)-14;ddd = EEPROM.read(9);tembro = EEPROM.read(10); attfr = EEPROM.read(11)-14;atttl = EEPROM.read(12)-14;atttr = EEPROM.read(13)-14; delay(500); audio();audio_in(); } void to_Timer(){newPosition = myEnc.read()/4;} void loop(){delay(10); if(analogRead(A0)<900){menu++;cl1();myEnc.write(0);time=millis();w=1;if(menu>11){menu=0;}}// меню if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);time=millis();w=1;irrecv.resume();}// IR приемник if(ir.value==CH_UP){menu++;g1=0;g2=0;cl1();time=millis();w=1;if(menu>11){menu=0;}}// меню кнопка CH+ if(ir.value==CH_DW){menu--;g1=0;g2=0;cl1();time=millis();w=1;if(menu<0){menu=11;}}// меню кнопка CH- if(ir.value==CH){menu=0;g1=0;g2=0;cl1();time=millis();w=1;}// меню кнопка CH (menu===0) if(ir.value==IN){inn=1;g1=0;g2=0;time=millis();w=1;audio();}// кнопка IN //////////////////////////////////////// Громкость -79...0 дБ ////////////////////////////////////// if(menu==0){ if(ir.value==VOL_UP){vol++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ 0xFFA857 if(ir.value==0xFFFFFFFF and g1==1){vol++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){vol--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){vol--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(vol>79){vol=79;}if(vol<0){vol=0;} if (newPosition != oldPosition) { oldPosition = newPosition; vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(vol>79){vol=79;}if(vol<0){vol=0;}audio();} lcd.setCursor(0,0);lcd.print("Volume "); lcd.print(" ");lcd.print(-79+vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol-32; 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);}} //////////////////////////////////////// Тембр НЧ +-14 дБ ////////////////////////////////////// if(menu==1){ if(ir.value==VOL_UP){bass++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){bass++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){bass--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){bass--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(bass<-7){bass=-7;}if(bass>7){bass=7;} if (newPosition != oldPosition) { oldPosition = newPosition; bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(bass<-7){bass=-7;}if(bass>7){bass=7;}audio();} lcd.setCursor(0,0);lcd.print("Bass "); lcd.print(" ");lcd.print(bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=(bass+7)*2; for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////////////////// Тембр CЧ +-14 дБ ////////////////////////////////////// if(menu==2){ if(ir.value==VOL_UP){mid++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){mid++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){mid--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){mid--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(mid<-7){mid=-7;}if(mid>7){mid=7;} if (newPosition != oldPosition) { oldPosition = newPosition; mid=mid+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(mid<-7){mid=-7;}if(mid>7){mid=7;}audio();} lcd.setCursor(0,0);lcd.print("Middle "); lcd.print(" ");lcd.print(mid*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");mid_d=(mid+7)*2; for(z=0,z0=0,z1=0;z<=mid_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////////////////// Тембр BЧ +-14 дБ ////////////////////////////////////// if(menu==3){ if(ir.value==VOL_UP){treb++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){treb++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){treb--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){treb--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(treb<-7){treb=-7;}if(treb>7){treb=7;} if (newPosition != oldPosition) { oldPosition = newPosition; treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(treb<-7){treb=-7;}if(treb>7){treb=7;}audio();} lcd.setCursor(0,0);lcd.print("Treble "); lcd.print(" ");lcd.print(treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=(treb+7)*2; for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////////////// rock pop classic ////////////////////// if(menu==4){ if(ir.value==VOL_UP){tembro++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){tembro++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){tembro--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){tembro--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(tembro>4){tembro=0;}if(tembro<0){tembro=4;} if (newPosition != oldPosition) { oldPosition = newPosition; tembro=tembro+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(tembro>4){tembro=0;}if(tembro<0){tembro=4;}} lcd.setCursor(0,0);lcd.print(" Preset timbre "); if(tembro==0){lcd.setCursor(0,1);lcd.print(" manual mode ");} if(tembro==1){lcd.setCursor(0,1);lcd.print(" ROCK ");bass=4,mid=-2;treb=5;x=1;} if(tembro==2){lcd.setCursor(0,1);lcd.print(" POP ");bass=-3,mid=3;treb=-2;x=1;} if(tembro==3){lcd.setCursor(0,1);lcd.print(" CLASSIC ");bass=0,mid=0;treb=-2;x=1;} if(tembro==4){lcd.setCursor(0,1);lcd.print(" default ");bass=0,mid=0;treb=0;x=1;} if(x==1){audio();x=0;} } /////////////////////// ATT FL /////////////////// if(menu==5){ if(ir.value==VOL_UP){attfl++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attfl++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attfl--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attfl--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attfl<-14){attfl=-14;}if(attfl>0){attfl=0;} if (newPosition != oldPosition) { oldPosition = newPosition; attfl=attfl+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attfl<-14){attfl=-14;}if(attfl>0){attfl=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT FL "); lcd.print(" ");lcd.print(attfl);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attfl_d=(attfl+14)*2; for(z=0,z0=0,z1=0;z<=attfl_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT FR /////////////////// if(menu==6){ if(ir.value==VOL_UP){attfr++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attfr++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attfr--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attfr--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attfr<-14){attfr=-14;}if(attfr>0){attfr=0;} if (newPosition != oldPosition) { oldPosition = newPosition; attfr=attfr+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attfr<-14){attfr=-14;}if(attfr>0){attfr=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT FR "); lcd.print(" ");lcd.print(attfr);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attfr_d=(attfr+14)*2; for(z=0,z0=0,z1=0;z<=attfr_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT TL /////////////////// if(menu==7){ if(ir.value==VOL_UP){atttl++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){atttl++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){atttl--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){atttl--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(atttl<-14){atttl=-14;}if(atttl>0){atttl=0;} if (newPosition != oldPosition) { oldPosition = newPosition; atttl=atttl+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(atttl<-14){atttl=-14;}if(atttl>0){atttl=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT TL "); lcd.print(" ");lcd.print(atttl);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");atttl_d=(atttl+14)*2; for(z=0,z0=0,z1=0;z<=atttl_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT TR /////////////////// if(menu==8){ if(ir.value==VOL_UP){atttr++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){atttr++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){atttr--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){atttr--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(atttr<-14){atttr=-14;}if(atttr>0){atttr=0;} if (newPosition != oldPosition) { oldPosition = newPosition; atttr=atttr+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(atttr<-14){atttr=-14;}if(atttr>0){atttr=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT TR "); lcd.print(" ");lcd.print(atttr);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");atttr_d=(atttr+14)*2; for(z=0,z0=0,z1=0;z<=atttr_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT CN /////////////////// if(menu==9){ if(ir.value==VOL_UP){attcn++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attcn++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attcn--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attcn--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attcn<-14){attcn=-14;}if(attcn>0){attcn=0;} if (newPosition != oldPosition) { oldPosition = newPosition; attcn=attcn+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attcn<-14){attcn=-14;}if(attcn>0){attcn=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT CN "); lcd.print(" ");lcd.print(attcn);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attcn_d=(attcn+14)*2; for(z=0,z0=0,z1=0;z<=attcn_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT SUB /////////////////// if(menu==10){ if(ir.value==VOL_UP){attsub++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attsub++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attsub--;g1=0;g2=1;cl();audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attsub--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attsub<-14){attsub=-14;}if(attsub>0){attsub=0;time=millis();} if (newPosition != oldPosition) { oldPosition = newPosition; attsub=attsub+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attsub<-14){attsub=-14;}if(attsub>0){attsub=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT SUB "); lcd.print(" ");lcd.print(attsub);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attsub_d=(attsub+14)*2; for(z=0,z0=0,z1=0;z<=attsub_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////// 3d /////////////////////////////////////////////// if(menu==11){ if(ir.value==VOL_UP){ddd++;g1=1;g2=0;cl1();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){ddd++;g2=0;cl1();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){ddd--;g1=0;g2=1;cl1();audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){ddd--;g1=0;cl1();time=millis();w=1;audio();}// кнопка <<<<<< if(ddd<0){ddd=1;}if(ddd>1){ddd=0;} if (newPosition != oldPosition) { oldPosition = newPosition; ddd=ddd+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(ddd<0){ddd=1;}if(ddd>1){ddd=0;}audio();} lcd.setCursor(0,0); if(ddd==0){lcd.print(" 3D ON ");}else{lcd.print(" 3D OFF ");} } //////////// mute //////////////////////// if(mute==1&&(digitalRead(12)==HIGH)){mute=0;menu=0;audio();cl1();} if(digitalRead(12)==HIGH){mute=1;menu=100;audio();cl1();} if(mute==1){lcd.setCursor(0,0);lcd.print(" MUTE ");delay(300);} //////////////////////////////////////////////////////////////////////////////// if(digitalRead(11)==HIGH||inn==1){in++;if(in>4){in=0;}audio_in();cl1();lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);delay(2000);time=millis();w=1;inn=0;}// in if(millis()-time>10000&& w==1&&mute==0){ EEPROM.update(0,vol+79);EEPROM.update(1,in);EEPROM.update(2,bass+7);EEPROM.update(3,mid+7);EEPROM.update(4,treb+7); EEPROM.update(5,attfl+14);EEPROM.update(7,attcn+14);EEPROM.update(8,attsub+14);EEPROM.update(9,ddd);EEPROM.update(10,tembro); EEPROM.update(11,attfr+14);EEPROM.update(12,atttl+14);EEPROM.update(13,atttr+14); menu=0;w=0;cl();} }//loop void cl(){ir.value=0;delay(100);} void cl1(){ir.value=0;delay(300);lcd.clear();} void audio_in(){ pt0.setInput(in); pt0.setMute(0,0,0,0,0,0,0); pt0.setFeature(1,1); } void audio(){ pt.setFront_lk_att(abs(attfl));// att front L pt.setFront_rk_att(abs(attfr));// att front R pt.setCenter_att(abs(attcn)); // att center pt.setRear_lk_att(abs(atttl)); // att rear L pt.setRear_rk_att(abs(atttr)); // att rear R pt.setSub_att(abs(attsub)); // att sub pt.setFunc(mute,ddd,0); // mute,3d,тембр on/off pt.setBass(bass); // BASS -14...0...14 dB (int -7...0...7) pt.setMiddle(mid); // MIDDLE -14...0...14 dB (int -7...0...7) pt.setTreble(treb); // TREBLE -14...0...14 dB (int -7...0...7) pt.setVol(abs(vol)); // -79...0 }
В мониторе порта можно получить коды кнопок Вашего пульта.
Для нормальной работы скетча необходимо скачать дополнительные библиотеки:
IRremote.zip — библиотека изменена
Здравствуйте, скажите вожможно ли чтобы сохранялись настройки после выключения? И можно ли сделать кнопку ON|OFF для управления усилителем?
При не активности органов настройки в течении 10 секунд все настройки сохраняются в энергонезависимую память.
Здравствуйте! Использовал ваши наработки для доработки домашнего кинотеатра, отвязал плату усилителя от процессора и периферии, в общем остался только каскад из pt2323 pt2322 и tda, после удачной отвязки tda вышли из mute, и усилитель готов к работе.
Далее залил скетч и библиотеки без ИК в arduino uno, ввиду сложной ситуации в стране дисплей купить пока что не удалось, кнопки из за отсутствия дисплея тоже не стал подключать, поэтому на авось соединил scr и scl на усилителе и arduino, в общем то произошло ровно ничего, звук не появился. Есть подозрение что и не заработает, пока не подберу параметры громкости, я правильно думаю?) возможно трубется как то установить параметры по умолчанию?
А ещё не судите строго, первый раз имею дело с ардуино, поэтому продублирую вопрос предыдущего оратора, по поводу вкл выкл усилителя, на плате входного фильтра Питания имеется реле, которое отключает трансформатор, хотелось бы им управлять, это возможно сделать например используя pwm выходы ардуино? Т.к аналоговые все заняты в данном скетче
Ещё раз извиняюсь за глупый вопрос
Хотелось бы дополнить что усилитель прекрасно работает если к нему подключить заводской контроллер, выставить канал, громкость, и далее отключить на горячую, усилитель продолжит работать по выбранным режимам до момента выключения платы усилителя
Для тестового запуска используйте следующий скетч — http://forum.rcl-radio.ru/viewtopic.php?pid=1264#p1264
Ура! Спасибо большое! Заработало, но работает только если прошить ардуино, которая уже подключена к работающему усилителю, полагаю что-бы работала в штатном режиме нужно поковырять loop?
Это тестовый скетч, он запускает аудиопроцессоры с установленными параметрами. Ваш усилитель скорее всего поддерживает функцию STANDBY,которая не реализована в текущем скетче.
Спасибо за ответ ☺️
Может не достаточно корректно выразился выше, имелось в виду что если подать питание на усилитель и ардуино(уже прошитую тестовым скетчем), которые соединены каналами scl и sda, то ничего не происходит, но если перезалить скетч в выше приведённую схему, усилитель начинает воспроизводить музыку без нареканий и каких-либо других манипуляций, поэтому и предположил что данный эффект наблюдается из-за отсутствия лупа…у
В общем как я понял по факту у меня и нет никаких проблем кроме отсутствия кнопок и дисплея??
Единственное что прийдется пока что перезаливать скетч для проверки сборки каждый раз, т.к вся сборка в процессе интеграции в корпус сабвуфера, для более компактного размещения в комнате
П.с. Извиняюсь ещё раз за то что примитивно и сумбурно выражаю свои мысли, надеюсь со временем это пройдет, т.к. это мой первый опыт ?
Попробуйте отправлять запросы аудиопроцессорам каждую секунду http://forum.rcl-radio.ru/viewtopic.php?pid=1264#p1264
или попробовать поставить задержку перед запросом
void setup(){ Wire.begin();
delay(500);
audio1();audio2();
}
Круто! Спасибо, стало работать, даже без задержки в запросах! Пока ковырялся пришла мысль для соблюдения эстетики вообще отказаться от дисплея и части кнопок, единожды подобрав настройки звучания для усилителя, т.к. планирую использовать его для телевизора, и управлять громкостью естественно с телевизора, вобщем оставить только кнопку включения и выбор входа.
П.с. а можно будет вас еще помучать немного, если да, где это удобнее, тут, или в какой то теме на форуме?
Лучше оставлять сообщения на форуме — http://forum.rcl-radio.ru/viewtopic.php?id=151
Здравствуйте, я извиняюсь за вторжение, прочитал ваше письмо о трудности приобретения дисплея. У меня есть несколько разных дисплеев, хотел вам предложить обмен. Меня интересует прошитый контроллер для тембров локальной, сам пока нулевой в этом вопросе. Если вас заинтересует этот вопрос, может найдём варианты?
День добрый. Help! Приобрёл конструктор Master kit nm0105. Всё спаял собрал, вроде цивильно, но ардуино не видит блок, точнее при скане i2c то вообще не находит адресов то находит но вылетает на error=4, очень редко бывает что определяется без ошибок. Ну и соответственно ничего не работает. Есть советы или идею? Спасибо.
Земли платы и арудино общие? монитор порта должен выводить три адреса: двух микросхем и lcd (если подключение параллельное то тогда только два адреса). Провода i2c должны иметь минимально возможную длину. На плате по линии i2c должны быть установлены подтягивающие резисторы 4,7кОм к +5 В у каждого аудиопроцессора.
Земля не общая. Всё остольно по схеме. Не совсем понял где должны стоять резисторы? Вот схема от конструктора..
Земля Arduino и платы с аудиопроцессорами должна быть общая.
Можно из подтягавающих резисторов, но ставить их желательно, на плате они скорее всего уже предусмотрены.
На линиях sda и scl никаких резисторов нет. Собственно это и не понятно где взять +5 если pt-шки питаются от 9? От ардуино?
GND ардуино и платы соедените вместе, i2c сканером проверь адреса аудиопроцессоров, если адреса не определяются, то проверьте правильность подсоединения SDA SCL. Если все верно а адресов нет, то с +5 В ардуино подайте напряжение через резисторы 4,7 кОм на линию SDA SCL.
Спасибо советы и перативный ответ. Буду пробовать.
Объединил землю, все заработало. Огромное спасибо
Добрый день.не подскажете, можно ли программно выключить блок? Спасибо.
Нет такой функции в аудиопроцессорах.
Hello, I remade the «pt2323_pt2322_IR_Enc.ino» for my pt2323 with pt2258. All success but IR isn’t working and I don’t know why. DM me plase to show you my code.
Подскажите пожалуйста, если мне нужно регулировать два канала, эта схема подойдёт? Или она выполняет роль кроссовера и на выходах будет резать частоты? У меня стереоусилитель и мне нужен цифровой темброблок.
Используйте выходы FR FL, это стерео выходы. Но есть много разных стерео аудиопроцессоров.
микросхема по параметрам вроде хорошая, искажения 0.005%. Поэтому на неё обратил внимание. Пока ещё думаю каую микру поставить. Может чего нибуть посоветуете? Хочу использовать в связке с ардуино, желательно с библиотекой.
Хотя этот вариант, если он может выдовать стерео и работать как регулятор тембра, то он покрывает все потребности.
Аудиопроцессор BD3491FS имеет весьма не плохие характеристики — http://rcl-radio.ru/?p=71517
Спасибо, посмотрел. Действительно хороший аудио процессор. Заказал, буду на нём делать.
Is arduino uno can be used in replacement of nano?
yes
whenI am compiling the above code,its showing error..pls help?