1

Тема: PT2323+TDA7448

Привет гуру скетчей))),ребята помогите пожалуйста совместить 2 скетча,PT2323 b TDA7448,навернулся сабвуфер AREON-300, после разбора выяснилось что сгорела плата управления а именно процессор, много времени ковырялся в тырнете пытался пересобрать все в кучу но все чего добился это просто запустить звук на всю громкость))) наткнулся на этот сайт,как на последнюю надежду воскресить этот деревянный гроб с динамиком))
нужно из первого скетча выкинуть управление процессором PT2322 и вставить управление TDA7448,а как это сделать не получается.....перепробовал кучу вариантов...в один момент даже решил резать дорожки и делать 2 дисплея и управление по отдельности...но получиться что выход с PT2323 нужно будет искать каждый раз в настройках TDA 7448....

первый скетч PT2323

#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
}

второй скетч TDA7448 только управление энкодером...

#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7448.h>
TDA7448 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 vol1,vol2,vol3,vol4,vol5,vol6,vol1_d,vol2_d,vol3_d,vol4_d,vol5_d,vol6_d;
   int w,w2,menu,z,z0,z1;

void setup(){
Wire.begin();
lcd.begin(16, 2);
lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   vol1 = -EEPROM.read(0);
   vol2 = -EEPROM.read(1);
   vol3 = -EEPROM.read(2);
   vol4 = -EEPROM.read(3);
   vol5 = -EEPROM.read(4);
   vol6 = -EEPROM.read(5);
pinMode(A0,INPUT);// КНОПКА ЭНКОДЕРA
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   lcd.setCursor(0,0);lcd.print("    TDA7448    ");delay(1000);lcd.clear();audio_tda();
}

void loop(){
   if(analogRead(A0)<900){menu++;cl();myEnc.write(0);time=millis();w=1;w2=1;if(menu>5){menu=0;}}// меню

    if(menu==0){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol1=vol1+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(vol1>0){vol1=0;}if(vol1<-79){vol1=-79;}audio_tda();}
  lcd.setCursor(0,0);lcd.print("Vol 1    ");
  lcd.print(" ");lcd.print(vol1);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol1_d=vol1+48;
    if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol1_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);}w2=0;}}

   if(menu==1){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol2=vol2+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(vol2>0){vol2=0;}if(vol2<-79){vol2=-79;}audio_tda();}
  lcd.setCursor(0,0);lcd.print("Vol 2    ");
  lcd.print(" ");lcd.print(vol2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol2_d=vol2+48;
    if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol2_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);}w2=0;}}

   if(menu==2){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol3=vol3+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(vol3>0){vol3=0;}if(vol3<-79){vol3=-79;}audio_tda();}
  lcd.setCursor(0,0);lcd.print("Vol 3    ");
  lcd.print(" ");lcd.print(vol3);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol3_d=vol3+48;
    if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol3_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);}w2=0;}}

   if(menu==3){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol4=vol4+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(vol4>0){vol4=0;}if(vol4<-79){vol4=-79;}audio_tda();}
  lcd.setCursor(0,0);lcd.print("Vol 4    ");
  lcd.print(" ");lcd.print(vol4);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol4_d=vol4+48;
    if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol4_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);}w2=0;}}

   if(menu==4){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol5=vol5+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(vol5>0){vol5=0;}if(vol5<-79){vol5=-79;}audio_tda();}
  lcd.setCursor(0,0);lcd.print("Vol 5    ");
  lcd.print(" ");lcd.print(vol5);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol5_d=vol5+48;
    if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol5_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);}w2=0;}}

   if(menu==5){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol6=vol6+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(vol6>0){vol6=0;}if(vol6<-79){vol6=-79;}audio_tda();}
  lcd.setCursor(0,0);lcd.print("Vol 6    ");
  lcd.print(" ");lcd.print(vol6);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol6_d=vol6+48;
    if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol6_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);}w2=0;}}


   if(millis()-time>10000 && w==1){
     EEPROM.update(0,abs(vol1));
     EEPROM.update(1,abs(vol2));
     EEPROM.update(2,abs(vol3));
     EEPROM.update(3,abs(vol4));
     EEPROM.update(4,abs(vol5));
     EEPROM.update(5,abs(vol6));
     w=0;}
  }
void audio_tda(){
  tda.setAtt(1,vol1); // 0 макс громк, -79(79) мин громк
  tda.setAtt(2,vol2);
  tda.setAtt(3,vol3);
  tda.setAtt(4,vol4);
  tda.setAtt(5,vol5);
  tda.setAtt(6,vol6);
  }
void cl(){delay(300);lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}


как их можно совместить?

2

Re: PT2323+TDA7448

TDA7448 с какой целью устанавливаете? PT2323 - это просто коммутатор входов

3

Re: PT2323+TDA7448

))я его не устанавливаю)) там в сабе уже все это стоит...PT2323 и TDA7448....сгорела плата управления всем этим делом))...я разобрался что к чему и куда что прикручивать)) а вот с программированием у меня беда....не до конца понимаю,дошел до того что отдельно могу управлять PT2323 и отдельно TDA7448....а как сделать так что бы в одном скетче управлялось по одной шине и то и другое......скрестить не могу.....

4

Re: PT2323+TDA7448

PT2323 - коммутатор входов, имеет прямой вход 6 каналов передает на выход и несколько стерео входов которые преобразуются в шести канальный выход. Какие входы Вы будете использовать, стерео или 6-канальный. TDA7448 - не умеет ни чего кроме управления громкостью, каналы управления громкостью независимые.

Какие именно функции Вам нужны от этих микросхем, мне нужно понять логику работы уст-ва управления под Ардуино.

5

Re: PT2323+TDA7448

вот так я пытался все это дело пересобрать.....только какая то фигня выходит)))я пожарный а не программист))

#include <Wire.h>
#include <PT2323.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <TDA7448.h>
#include <Encoder.h>
#include <MsTimer2.h>
PT2323 pt0;
TDA7448 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, 0b11011, 0b11011, 0b11011, 0b11011, 0b11011, 0b11011, 0b00000};
byte a2[8] = {0b00000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b00000};
unsigned long newPosition, time, oldPosition  = -999;
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; int vol1, vol2, vol3, vol4, vol5, vol6, vol1_d, vol2_d, vol3_d, vol4_d, vol5_d, vol6_d;

void setup() {
  Wire.begin(); Serial.begin(9600);
  lcd.begin(16, 2); lcd.createChar(0, a1); lcd.createChar(1, a2);
  pinMode(A4, INPUT); // menu Perecena c A0
  pinMode(A1, INPUT); // +
  pinMode(A2, INPUT); // -
  pinMode(A3, INPUT); // input
  pinMode(A0, INPUT); // КНОПКА ЭНКОДЕРA
  vol1 = -EEPROM.read(0);
  vol2 = -EEPROM.read(1);
  vol3 = -EEPROM.read(2);
  vol4 = -EEPROM.read(3);
  vol5 = -EEPROM.read(4);
  vol6 = -EEPROM.read(5);
  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);

}

void loop() {
  if (analogRead(A4) > 900 && mute != 1) {
    menu++;  // меню
    cl();
    time = millis();
    w = 1;
    if (menu > 11) {
      menu = 0;
    }
  }
  /////////////////////////////// volume ///////////////////////////////////////////////
  if (menu == 0) {
    if (analogRead(A1) > 900) {
      vol++;  // 79 максимальная громкость
      w = 1;
      if (vol > 79) {
        vol = 79;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      vol--;  // 0 минимум громкости
      w = 1;
      if (vol < 0) {
        vol = 0;
      } audio_tda();
      cl();
      time = millis();
    }
    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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      bass--;
      w = 1;
      if (bass < -7) {
        bass = -7;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      mid--;
      w = 1;
      if (mid < -7) {
        mid = -7;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      treb--;
      w = 1;
      if (treb < -7) {
        treb = -7;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      tembro--;
      w = 1;
      if (tembro < 0) {
        tembro = 4;
      } audio_tda();
      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) {
      audio_tda();
      x = 0;
    }
  }
  ////////////////////////////////////////////////////////////////////////////////

  /////////////////////// ATT FL ///////////////////
  if (menu == 5) {
    if (analogRead(A1) > 900) {
      attfl++;
      w = 1;
      if (attfl > 0) {
        attfl = 0;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      attfl--;
      w = 1;
      if (attfl < -14) {
        attfl = -14;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      attfr--;
      w = 1;
      if (attfr < -14) {
        attfr = -14;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      atttl--;
      w = 1;
      if (atttl < -14) {
        atttl = -14;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      atttr--;
      w = 1;
      if (atttr < -14) {
        atttr = -14;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      attcn--;
      w = 1;
      if (attcn < -14) {
        attcn = -14;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      attsub--;
      w = 1;
      if (attsub < -14) {
        attsub = -14;
      } audio_tda();
      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;
      } audio_tda();
      cl();
      time = millis();
    }
    if (analogRead(A2) > 900) {
      ddd--;
      w = 1;
      if (ddd < 0) {
        ddd = 1;
      } audio_tda();
      cl();
      time = millis();
    }
    lcd.setCursor(0, 0); if (ddd == 0) {
      lcd.print("     3D  ON  ");
    } else {
      lcd.print("     3D  OFF  ");
    }
  }

  ////////////////////////////////////////////////////////////////////////////////
  if (analogRead(A3) > 900) {
    in++;  // 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;
  }
  //  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 audio_tda(){
  tda.setAtt(1,vol1); // 0 макс громк, -79(79) мин громк
  tda.setAtt(2,vol2);
  tda.setAtt(3,vol3);
  tda.setAtt(4,vol4);
  tda.setAtt(5,vol5);
  tda.setAtt(6,vol6);
  }

6

Re: PT2323+TDA7448

логика простая))...нужно оставить весь функционал управления PT2323 а TDA7448 что бы этим же скетчем управлять просто звуком...грубо говоря выкинуть из первого скетча управление звуком PT2322 и вставить управление звуком TDA7448))....

7

Re: PT2323+TDA7448

Вы точно названия микросхем не перепутали, в TDA7448 нет ничего кроме громкости, а PT2323 просто коммутатор входов. У Вас будет всего два меню - IN и VOLUME

Управление какое? Кнопки, энкодер, пульт? Если кнопки то какие?

Какие входа используете?

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

#include <Wire.h>
#include <PT2323.h>
#include <TDA7448.h>
 TDA7448 tda;
  PT2323 pt0; 

void setup(){Wire.begin();}

void loop() {
   audio_tda();
   audio1();
   delay(1000);
  }

void audio1(){
  pt0.setInput(0); // входы 1...4 (0...3) или 6 моно (4)
  pt0.setMute(0,0,0,0,0,0,0); 
  pt0.setFeature(0,1); // дополнительные функции 0...3
                     // 0 - Enhanced Surround Function Active
                     // 1 - Enhanced Surround Function Disabled
                     // 0 - Mixed Channel (0dB) Setup
                     // 1 - Mixed Channel (+6dB) Setup 
}

void audio_tda(){
  tda.setAtt(1,0);// 0 макс громк, -79(79) мин громк
  tda.setAtt(2,0);
  tda.setAtt(3,0);
  tda.setAtt(4,0);
  tda.setAtt(5,0);
  tda.setAtt(6,0);
  }

Если со скетчем все нормально, то уже к нему приделывают экран и управление.

8

Re: PT2323+TDA7448

Библиотеки:
https://github.com/liman324/PT2323.git
https://github.com/liman324/TDA7448.git

9

Re: PT2323+TDA7448

Спасибо большое за помощ) мне до вас еще оооочень далеко) микросхемы я уже запускал,немного другим способом,я писал что удалось их включить на полную громкость)мне нужно именно управление входами и громкостью на выходе,не важно чем кнопками или энкодером или пультом,логика простая"включилось питание-включилась PT2323- включилась TDA7448-экран перешел на упрпвление звуком-при нажатии кнопки "меню" происходит управление входами"in1,in2,in3,in4,in5",кто то вот здесь http://rcl-radio.ru/?p=62504  очень хорошо сделал,тоже самое я хотел повторить только с TDA7448,но такого функционала в ней нет поэтому хотя бы управление звуком,дальше я на вход поставлю mp3 pleer который и будет рулить всем остальным,одним словом сабвуфер станет просто усилителем с 5.1 звуком,вы извение если я не понятно обьяснил))дальше буду разбиратся как туда впихнуть пульт)))

10

Re: PT2323+TDA7448

Я Вас понял, тот скетч который я опубликовал работает? Если да, то тогда можно двигаться дальше.
Управление я сделаю с энкодера, при старте меню громкость, нажимаем на кнопку энкодера меню выбора входа. Пульт дублирует нажатие кнопки энкодера и поворот ручки энкодера.

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

11

Re: PT2323+TDA7448

У меня эмоций выше крыши)))наконец то запустить эту штуку)))я сейчас с суток сменюсь , приеду попробую и отпишусь))

12

Re: PT2323+TDA7448

ты гений,скетч работает) только какой то писк стоит,наверное от того что PT2323 включены сразу все входы,пытался только что прикрутить дисплей) а не тут то было)) в твоем скетче ни на что не ругается а в моем начинает ругаться что то я косячу не понимаю где...

13 (2019-11-09 13:44:22 отредактировано Ti-Oo)

Re: PT2323+TDA7448

не понимаю где ошибка) постоянно ругается на (audio_tda();)  ткни щенка дай хоть пойму где косяк)))))
#include <Wire.h>
#include <PT2323.h>
#include <TDA7448.h>
#include <LiquidCrystal.h>
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};
int menu, vol;

TDA7448 tda;
PT2323 pt0;

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

}

void loop() {
  audio1();
  audio_tda();
  delay(1000);

  if (menu == 0) {
    if (analogRead(A1) > 900) {
      vol++;  // 79 максимальная громкость
      if (vol > 79) {
        vol = 79;
      } audio_tda();


    }
    if (analogRead(A2) > 900) {
      vol--;  // 0 минимум громкости
      if (vol < 0) {
        vol = 0;
      } audio_tda();


    }
    lcd.setCursor(0, 0); lcd.print("Volume   ");
    lcd.print(-79 + vol); lcd.setCursor(13, 0); lcd.print("dB");


  }

  void audio1() {
    pt0.setInput(0); // входы 1...4 (0...3) или 6 моно (4)
    pt0.setMute(0, 0, 0, 0, 0, 0, 0);
    pt0.setFeature(0, 1); // дополнительные функции 0...3
    // 0 - Enhanced Surround Function Active
    // 1 - Enhanced Surround Function Disabled
    // 0 - Mixed Channel (0dB) Setup
    // 1 - Mixed Channel (+6dB) Setup
  }

  void audio_tda() {
    tda.setAtt(1, 0); // 0 макс громк, -79(79) мин громк
    tda.setAtt(2, 0);
    tda.setAtt(3, 0);
    tda.setAtt(4, 0);
    tda.setAtt(5, 0);
    tda.setAtt(6, 0);
  }

14

Re: PT2323+TDA7448

Управление энкодер + IR

IR - открыть монитор порта, нажать на кнопку пульта и вписать в скетч свои коды кнопок

http://rcl-radio.ru/wp-content/uploads/ … ncoder.zip
http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
http://rcl-radio.ru/wp-content/uploads/ … remote.zip

#define IR_8 0x2FDB24D // Кнопка MENU
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <

#include <Wire.h> 
#include <PT2323.h>
#include <TDA7448.h> 
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
  TDA7448 tda;
  PT2323 pt; 
 IRrecv irrecv(10); // указываем вывод модуля IR приемника
 decode_results ir;
 LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
 Encoder myEnc(9, 8);//CLK, DT подключение энкодера
   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,times,oldPosition  = -999;
  int i,w,w1,menu,vol,vol_d,z,z0,z1,gr1,gr2,in;
  
void setup(){
   Serial.begin(9600);Wire.begin();irrecv.enableIRIn(); // запускаем модуль IR
   lcd.begin(16, 2);
   pinMode(13,INPUT);// КНОПКА ЭНКОДЕРA
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   lcd.setCursor(0,0);lcd.print("    TDA 7448    ");
   lcd.setCursor(0,1);lcd.print("    PT  2323    ");
   delay(1000);cl();
   if(EEPROM.read(100)!=0){for(i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-79;in = EEPROM.read(1);
   audio_tda();audio_pt();
}

void loop(){
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);times=millis();w=1;w1=1;irrecv.resume();}// IR приемник
  if(digitalRead(13)==LOW){menu++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню
  if(ir.value==IR_8){menu++;gr1=0;gr2=0;cl();times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню 

 //////////////////// VOLUME ///////////////////////////////////////////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <<<<<<
  
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio_tda();audio_pt();}
  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;
    if(w1==1){
   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);}w1=0;}}

 /////////////////// INPUT //////////////////////////////////////////////////////////////////////////////////////// 
  if(menu==1){
     if(ir.value==IR_3){in++;gr1=1;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){in++;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){in--;gr1=0;gr2=1;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){in--;gr1=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <<<<<<
    
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   in=in+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;in_func();audio_tda();audio_pt();}
 lcd.setCursor(0,0);lcd.print("INPUT  ");
 switch(in){ // пропишите свои названия входов
  case 0: lcd.print("IN1  ");break;
  case 1: lcd.print("IN2  ");break;
  case 2: lcd.print("IN3  ");break;
  case 3: lcd.print("IN4  ");break;
  case 4: lcd.print("6 IN ");break;}}

 ///////////////// EEPROM ///////////////////////////////////////////////////////////////////////////////////////
 if(millis()-times>10000 && w==1){
     EEPROM.update(0,vol+79);
     EEPROM.update(1,in);
     menu=0;cl();w=0,w1=1;}
  
}//loop

void in_func(){if(in<0){in=4;}if(in>4){in=0;}}
void vol_func(){if(vol>0){vol=0;}if(vol<-79){vol=-79;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void audio_pt(){
  pt.setInput(in); // входы 1...4 (0...3) или 6 моно (4)
  pt.setMute(0,0,0,0,0,0,0); 
  pt.setFeature(0,1); // дополнительные функции 0...3
                     // 0 - Enhanced Surround Function Active
                     // 1 - Enhanced Surround Function Disabled
                     // 0 - Mixed Channel (0dB) Setup
                     // 1 - Mixed Channel (+6dB) Setup 
}
void audio_tda(){
  tda.setAtt(1,vol);// 0 макс громк, -79(79) мин громк
  tda.setAtt(2,vol);
  tda.setAtt(3,vol);
  tda.setAtt(4,vol);
  tda.setAtt(5,vol);
  tda.setAtt(6,vol);
  }

void to_Timer(){newPosition = myEnc.read()/4;}

если нужны обычные кнопки, то могу приделать

15

Re: PT2323+TDA7448

не понимаю где ошибка) постоянно ругается на (audio_tda();)  ткни щенка дай хоть пойму где косяк)))))

Не хватает ковычек

16 (2019-11-09 19:09:26 отредактировано Ti-Oo)

Re: PT2323+TDA7448

Ты его ОЖИВИИИИИЛ))))))) скетч порошел, сейчас припаяю энкодер с ИК и проверю)))) мне до такого еще лет 10 учится))

17

Re: PT2323+TDA7448

залил скетч,припоял кнонку энкодера и ir и что то где то косяк))))на дисплее постоянно скачит (переключается) то звук то вход...то звук то вход...и так постоянно....отключил энкодер и ir все равно такая же ерунда)))

18

Re: PT2323+TDA7448

С энкодерами у многих проблема, кнопка энкодера инверсная, когда кнопка не нажата на выходе лог 1, это происходит если перепутать полярность питания энкодера, нет поддрягивощих резисторов или они подсоеденены к минусу а не к плюсу питания.
Просто подайте +5 В на вход D13, меню перестанет скакать.

19

Re: PT2323+TDA7448

ОООООО ГУРУ АРДУИНО))))))))))))))все получилось))))))))осталось узнать кнопки пульта)))))))) у меня сейчас улыбка до ушей)))))))))

20

Re: PT2323+TDA7448

блин)))) рано радовался))) энкодер своей жизнью живет))))))))))) звук на минус не хочет убирать)) зато на плюс.....уже соседи по потолку лупят))))))))))))))))))))))))

21

Re: PT2323+TDA7448

Выход WS при отжатой кнопке должно быть 5 В, при нажатой 0В.

http://forum.rcl-radio.ru/uploads/images/2019/11/32197b6e0f723a818863dd971fdf3208.png

Все выходы энкодера соединены с +5В через 10 кОм

Скетч я проверил в железе, только микросхемы не подключал (у меня их нет)
Проверьте подключение:
D9 = CLK
D8 = DT
D13 = SW

22

Re: PT2323+TDA7448

Ты молодец просто слов нет) а энкодер я выпаял из старой схемы управления сабвуфером у него всего 3 контакта...может он неисправен

23

Re: PT2323+TDA7448

Энкодер все равно должен иметь подтягивающие резисторы на +5В, если 3 контакта, то это скорее всего DT CLK и GND, кнопки нет, ее придется делать отдельно.
Я использую модуль энкодера, в нем все уже припаяно как надо, но в бытовой аппаратуре подтягивающие резисторе стоят на плате.
Если делать кнопку энкодера отдельно, то на вход D13 надо подать gnd через 10 К, а коммутировать нажатие +5В и поменять:
if(digitalRead(13)==LOW)
на
if(digitalRead(13)==HIGH)

24

Re: PT2323+TDA7448

http://forum.rcl-radio.ru/uploads/images/2019/11/59be5121e14e176b508b9a07b15a38fb.png

25

Re: PT2323+TDA7448

или такая схема
http://forum.rcl-radio.ru/uploads/images/2019/11/4efab643f39d1298c30b5b5ae9650f88.png