Темброблок состоит из двух микросхем 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 — библиотека изменена
the schematic diagram in this page has a error. PIN 15 IS SDA,its wringly given as pin 16.
Thank you for noticing the mistake. Scheme I corrected. Were you able to run the circuits?
however, the board is connected as per datasheet pinout. Any help?
Adjusted the scheme. Now everything is correct.
no i am not able to run the circuit.Thanks.
May be one of the chip is defective. I will re evaluate. Meanwhile, pls help me with a simple pt2322 stereo preamp.
What sketch do you use? With the encoder has not been tested, only tested the one that is on the page. Remaking sketch under pr2322 not difficult, need to simply to remove the commutator inputs. But I don’t know What kind of sketch you use.
I AM USING THE PUSH BUTTON SKETCH.No encoder used.
I removed all unnecessary, available input and output RF LF, the other 4 channels are not active
http://rcl-radio.ru/wp-content/uploads/2019/10/pt2322.ino_.zip
No test!
Thanks. Will give a feedback after using and testing
But the datasheet says its a 6 channel volume controller, with tone control.So, why dont we use two channels and use them as stereo?or atleast the front left and front right will work as a regular stereo mix. there is one examble on the public domain
https://www.mikrocontroller.net/attachment/245150/PT2322.cpp
http://oddwires.blogspot.com/2012/07/using-arduino-pt2322-library-for-audio.html
But, I am unable to understand the above two, without any description or circuit connection diagram.
The whole idea is to have a three band tone control, similar to tda 7439/7419, but with least complexity and because the pt2322 is available as DIP.
«The pt2322 has a 6-channel Dolby Surround input. No stereo input. Did you manage to run pt2323 pt2322?»
Sorry, the above message was in response to your query. I noticed the new pt2322.ino sketch later. I have downloaded it.I will check with the hardware and give a feedback.Thanks for all the support
I tried the sketch again . The problem persist.So I think the chip PT2322 is defective. I will order a new one and test again
Test — https://github.com/liman324/PT2322/blob/master/PT2322.ino
Thanks.I will try again. Are the LCD and pushbutton pins same? Or any change required?
Neither of which should not be changed, this is a test sketch to check sound, you can change the volume, tone. The screen and controls will not work.
доброго времени суток, нашел еще одну опечатку в вашей схеме, у вас на выходе микросхемы pl322 перепутаны sl и sr местами, если сравнивать даташит и схему, но это мелочи, у меня назрел вопрос о том, что возможна ли настройка частоты среза на саб канале?
Такой возможности нет, но она есть у других аудиопроцессоров, например у BD37033FV, TDA7419, TDA7719 и др.
я нашел как это сделать —
По желанию схему можно немного изменить с целью изменения частоты среза сабвуферного канала. Если вместо резисторов и конденсатора в обвязке микросхемы PT2323 (пины 11, 23 и 24) взять сдвоенный потенциометр и включить реостатом так, чтобы при вращении по часовой стрелке оба сопротивления уменьшались, то получится регулируемый фильтр по сабвуферному каналу: при вращении вправо частота среза будет повышаться. Потенциометр можно взять 47..100 кОм, линейный. Последовательно с ним к пинам 24 и 11 нужно включить резисторы по 5..15 кОм. Кусок схемы:
только плюсом еще заменить конденсатор между 24 пином pt2323 и землей на такой же как и в схеме переделки, ибо у меня саб канал при резких ударах баса выдавал клипы(clip) на любой громкости, заменил и пока вроде без клипования саба