51 (Вчера 20:48:39 отредактировано honda473)

Re: TDA8425 + OLED 128x32

kkmaz пишет:

Добрый день. Наконец-то собрал все в кучу. Все работает. Есть один нюанс, какой-то шум идет от ТДАшки.
При коротком на входе усилителя тишина полная. линейный вход минуя тда тоже тихо. 
Может ли шуметь длинная линия на А4,А5? Или то, что дисплей висит на одной линии данных с ТДАшкой?
И еще один вопрос, можно ли как-то выровнять входные уровни каналов?

Шум какой идет от процессора ,просто шипение или фон?
Баланс вроде есть в настройках ,им и отрегулируйте уровень лк и пк сигнала на усилитель.

52

Re: TDA8425 + OLED 128x32

honda473 пишет:
honda473 пишет:
www.aleksandrov74 пишет:

Заменил еще одно но, картинка находится в верхних строках, а не по середине , как то можно поправить?

Логично, что строка вверх сместилась. Ведь скетч написан под дисплей  128х32 пикселя ,а вы поставили дисплей 128х64 . Пикселей по вертикали стало в два раза больше. Нужно во всем скетче править расположение по вертикали.

// энкодер
#define ENC_DT       9
#define ENC_CLK      8
#define ENC_SW       10

// ИК датчик
#define IR           12

// кнопки управления
#define IN_BUTTON       2
#define POWER_BUTTON    3
#define MUTE_BUTTON     4

// выход управления standby
#define STANDBY_OUT     13
#define IN_OUT     11

// коды кнопок ИК пульта
#define MENU      0x2FDB24D // button encoder
#define UP        0x2FDD02F // >>>
#define DW        0x2FD32CD // <<<
#define INPUT_IR  0x2FD6A95 // IN
#define POWER_IR  0x2FD00FF // POWER
#define MUTE_IR   0x2FDB04F // MUTE

#include <Wire.h> 
#include <U8glib.h>             // https://github.com/olikraus/u8glib/
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip    
#include <EEPROM.h>
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip       
#include <boarddefs.h>          // входит в состав библиотеки IRremote
#include <IRremote.h>           // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include <TDA8425.h>            // http://rcl-radio.ru/wp-content/uploads/2018/11/TDA8425.zip

 
 U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI

 IRrecv irrecv(IR);
 Encoder myEnc(ENC_DT, ENC_CLK);
 decode_results ir; 
 TDA8425 tda;

 extern uint8_t SmallFont[],BigNumbers[];
 long times,oldPosition  = -999,newPosition;
 int vol,balans,bass,treb,in,menu;
 bool mute=0,gr1,gr2,w,w1,power=0,in_flag;

 void setup(){
  Wire.begin();
  irrecv.enableIRIn();
  Serial.begin(9600);
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
  pinMode(IN_BUTTON,INPUT_PULLUP);
  pinMode(POWER_BUTTON,INPUT_PULLUP);
  pinMode(MUTE_BUTTON,INPUT_PULLUP);
  pinMode(STANDBY_OUT,OUTPUT);
  pinMode(IN_OUT,OUTPUT);  

 u8g.firstPage(); do {
  u8g.setFont(u8g_font_profont29r);u8g.drawStr(5,45,"TDA8425"); 
  }while( u8g.nextPage() );

  delay(300);
  digitalWrite(STANDBY_OUT,LOW);
  vol = EEPROM.read(0);bass = EEPROM.read(1);treb = EEPROM.read(2);balans = EEPROM.read(3)-4;in = EEPROM.read(4);
  if(in==0){digitalWrite(IN_OUT,HIGH);} 
  if(in==1){digitalWrite(IN_OUT,LOW);} 
  audio(); 
 }

 void loop(){
  // IR ////////////////////////////////////////
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта  
  
 if(power==0){ 
 if(digitalRead(ENC_SW)==LOW || ir.value==MENU){menu++;cl();delay(200);times=millis();w1=1;w=1;if(menu>3){menu=0;}} // меню

 if((digitalRead(IN_BUTTON)==LOW || ir.value==INPUT_IR) && mute==0){in++;cl();times=millis();w1=1;w=1;if(in>1){in=0;}audio();
 u8g.firstPage(); do {u8g.setFont(u8g_font_profont29r);u8g.drawStr(0,45,"INPUT");u8g.setPrintPos(95, 25);u8g.print(in+1);}while( u8g.nextPage() );delay(1000);} // input 

 if((digitalRead(MUTE_BUTTON)==LOW || ir.value==MUTE_IR)&& mute==0){mute=1;cl();times=millis();w1=1;w=1;audio();
 u8g.firstPage(); do {u8g.setFont(u8g_font_profont29r);u8g.drawStr(25,45,"MUTE");}while( u8g.nextPage() );delay(300);menu=100;} // mute on 

 if((digitalRead(MUTE_BUTTON)==LOW || ir.value==MUTE_IR)&& mute==1){mute=0;cl();times=millis();w1=1;w=1;audio();
 delay(300);menu=0;} // mute off 
 }

 if((digitalRead(POWER_BUTTON)==LOW || ir.value==POWER_IR)&& power==0){power=1;cl();times=millis();w1=1;w=1;mute=1;audio();digitalWrite(STANDBY_OUT,LOW);
 u8g.firstPage(); do {u8g.setFont(u8g_font_profont29r);u8g.drawStr(10,45,"STANDBY");}while( u8g.nextPage() );delay(2000);menu=100;
 u8g.firstPage(); do {}while( u8g.nextPage() );} // power on 

 if((digitalRead(POWER_BUTTON)==LOW || ir.value==POWER_IR)&& power==1){power=0;cl();times=millis();w1=1;w=1;mute=0;audio();digitalWrite(STANDBY_OUT,HIGH);delay(300);menu=0;} // power off 
 
  
//////// VOLUME //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==0){
   if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
   vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio();}
 
   if(ir.value==UP){vol++;gr1=1;gr2=0;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка >>>>>>
   if(ir.value==DW){vol--;gr1=0;gr2=1;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
 // Serial.println(63-vol+balans);
  u8g.firstPage();  
   do {
  u8g.setFont(u8g_font_profont12r);u8g.drawStr(0,28,"VOLUME");
  u8g.setFont(u8g_font_profont29r); u8g.setPrintPos(95, 44);u8g.print(vol-4);
  for(int v_pos=0; v_pos<(59-3)*1.5;v_pos+=4){u8g.drawBox(v_pos+0,36, 2, 1);}
  for(int v_pos=0; v_pos<(vol-3)*1.5;v_pos+=4){u8g.drawBox(v_pos+0,38, 2, 9);}
  for(int v_pos=0; v_pos<(59-3)*1.5;v_pos+=4){u8g.drawBox(v_pos+0,48, 2, 1);}
   } while( u8g.nextPage() );
  }}

///////// BASS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  if(menu==1){
   if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
   bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;bass_func();audio();}

   if(ir.value==UP){bass++;gr1=1;gr2=0;ir.value=0;times=millis();w=1;w1=1;bass_func();audio();}// кнопка > 
   if(ir.value==DW){bass--;gr1=0;gr2=1;ir.value=0;times=millis();w=1;w1=1;bass_func();audio();}// кнопка <
 
  if(w==1){w=0;

  u8g.firstPage();  
   do {
  u8g.setFont(u8g_font_profont12r);u8g.drawStr(0,28,"BASS");
  u8g.setFont(u8g_font_profont29r); u8g.setPrintPos(95, 44);u8g.print(bass-6);
  for(int v_pos=0; v_pos<(11-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,36, 2, 1);}
  for(int v_pos=0; v_pos<(bass-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,38, 2, 9);}
  for(int v_pos=0; v_pos<(11-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,48, 2, 1);}
   } while( u8g.nextPage() );
  }}

///////// TREB /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  if(menu==2){
   if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
   treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;treb_func();audio();}

   if(ir.value==UP){treb++;gr1=1;gr2=0;ir.value=0;times=millis();w=1;w1=1;treb_func();audio();}// кнопка > 
   if(ir.value==DW){treb--;gr1=0;gr2=1;ir.value=0;times=millis();w=1;w1=1;treb_func();audio();}// кнопка <
 
  if(w==1){w=0;

  u8g.firstPage();  
   do {
  u8g.setFont(u8g_font_profont12r);u8g.drawStr(0,28,"TREBLE");
  u8g.setFont(u8g_font_profont29r); u8g.setPrintPos(95, 44);u8g.print(treb-6);
  for(int v_pos=0; v_pos<(10-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,36, 2, 1);}
  for(int v_pos=0; v_pos<(treb-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,38, 2, 9);}
  for(int v_pos=0; v_pos<(10-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,48, 2, 1);}
   } while( u8g.nextPage() );
  }}

///////// BALL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  if(menu==3){
   if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
   balans=balans+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;ball_func();audio();}

   if(ir.value==UP){balans++;gr1=1;gr2=0;ir.value=0;times=millis();w=1;w1=1;ball_func();audio();}// кнопка > 
   if(ir.value==DW){balans--;gr1=0;gr2=1;ir.value=0;times=millis();w=1;w1=1;ball_func();audio();}// кнопка <
 
  if(w==1){w=0;
 // Serial.println(63-vol+balans);
 // Serial.println(63-vol-balans);
  u8g.firstPage();  
   do {
  u8g.setFont(u8g_font_profont12r);u8g.drawStr(0,28,"BALANCE");
  u8g.setFont(u8g_font_profont29r); 
  if(balans>=0){u8g.setPrintPos(112, 44);u8g.print(balans);u8g.drawStr(95,44,"+");}
  else{u8g.setPrintPos(95, 44);u8g.print(balans);}

  for(int v_pos=0; v_pos<(12-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,36, 2, 1);}
  const int SCREEN_WIDTH = 84; 
  u8g.drawBox(43,38, 1, 9);// 0 dB
  if(balans >= 0){for(int v_pos=0; v_pos<(balans*8);v_pos+=4){u8g.drawBox(v_pos+48,38, 2, 9);}} 
  else{for(int v_pos=SCREEN_WIDTH-48; v_pos>(SCREEN_WIDTH-(abs(balans)*8)-48); v_pos-=4){u8g.drawBox(v_pos,38, 2, 9);}}
  for(int v_pos=0; v_pos<(12-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,48, 2, 1);}
  
   } while( u8g.nextPage() );
  }}
  

////////////// EEPROM /////////////////////////////////////////////////////////////////////  
  if(millis()-times>5000 && w1==1 && power==0 && mute==0){
     EEPROM.update(0,vol);EEPROM.update(1,bass);EEPROM.update(2,treb);EEPROM.update(3,balans+4);EEPROM.update(4,in);
     menu=0;w1=0;w=1;myEnc.write(0);}
  }


  
void to_Timer(){newPosition = myEnc.read()/4;} 
void audio(){
  tda.setVolumeL(vol+balans);
  tda.setVolumeR(vol-balans);
  tda.setBass(bass);
  tda.setTreble(treb);
  tda.setMute(mute);
  tda.setSource(in);
 } 

void vol_func(){if(vol>59){vol=59;}if(vol<=4){vol=4;}} // int 0 = min ... int 63 = max + ballans 4 dB 
void bass_func(){if(bass>11){bass=11;}if(bass<2){bass=2;}} // int 6 = 0 dB | int 2 = -12 dB | int 11 = 15 dB
void treb_func(){if(treb>10){treb=10;}if(treb<2){treb=2;}} // int 6 = 0 dB | int 2 = -12 dB | int 10 = 12 dB
void ball_func(){if(balans>4){balans=4;}if(balans<=-4){balans=-4;}}
void cl(){ir.value=0;delay(200);} 

Попробовал поправить строки,не все ,попробуйте,что изменится. Дисплея такого нет ,не на чем проверить.