51

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

Можно не ставить транзисторы, но тогда нужно померить ток катода, при поданном на все аноды 5В через резисторы 330 Ом, если ток будет в пределах 20 мА, то транзисторы не нужны.

52

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

liman324 пишет:

Вам нужно 2 транзистора n-p-n bc337 bc557 или аналогичные
2 резистора по 1-10 кОм
8 резисторов по 200-330 Ом

Имеется в наличии 2 резистора 4,7 кОм, 8 резисторов 330 Ом, 2 транзистора bc547

53

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

Отлично.

54

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

Вот распиновка к ардуино

#define SEG_A       0
#define SEG_B       1
#define SEG_C       2
#define SEG_D       3
#define SEG_E       4
#define SEG_F       5
#define SEG_G       6
#define DP          7

#define KAT_0       A0
#define KAT_1       A1

55

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

Вот распиновка энкодера

#define ENC_CLK     8 
#define ENC_DT      9 
#define ENC_SW      10

56

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

У Вас энкодер с кнопкой?

57

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

да, с кнопкой

58

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

У энкодера должна быть такая схема

http://forum.rcl-radio.ru/uploads/images/2023/09/632dc3fd3470793dccc116df2eedc14f.png

59

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

завтра постараюсь все распаять

60

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

Готово, все распаял.

61

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

#define ENC_CLK     8 
#define ENC_DT      9 
#define ENC_SW      10

#define SEG_A       0
#define SEG_B       1
#define SEG_C       2
#define SEG_D       3
#define SEG_E       4
#define SEG_F       5
#define SEG_G       6
#define DP          7

#define KAT_0       A0
#define KAT_1       A1

#include <Wire.h> 
#include <PT2322.h>
#include <EEPROM.h>
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip    
 Encoder myEnc(ENC_DT, ENC_CLK);// DT, CLK
 PT2322 pt1;

 long oldPosition  = -999,newPosition,times; 
 int an, segm,i,vol,menu;
 byte a[2];
 bool w;
 
void setup(){
    Wire.begin();Serial.begin(9600);
    MsTimer2::set(2, to_Timer);MsTimer2::start();
    pinMode(ENC_SW,INPUT); 
    pinMode(SEG_A,OUTPUT);
    pinMode(SEG_B,OUTPUT);
    pinMode(SEG_C,OUTPUT);
    pinMode(SEG_D,OUTPUT);
    pinMode(SEG_E,OUTPUT);
    pinMode(SEG_F,OUTPUT);
    pinMode(SEG_G,OUTPUT);
    pinMode(DP,OUTPUT);
    pinMode(KAT_0,OUTPUT);
    pinMode(KAT_1,OUTPUT);
    vol = EEPROM.read(0);
    if(vol>79){vol=0;}
  }

void loop(){
////////////// BUTTON //////////////////////////////////////////////////////////////////  
  if(digitalRead(10)==LOW){menu++;if(menu>2){menu=0;}w=1;times=millis();delay(200);}
  
////////////// 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;if(vol>79){vol=79;}if(vol<0){vol=0;}}
    audio();
    a[0]=(79-vol)/10%10;
    a[0]=(79-vol)%10;
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    

////////////////// EEPROM //////////////////////////////////////////////////////////////
 if(millis()-times>5000 && w==1){
     EEPROM.update(0,vol);
     menu=0;w=1;}   

}//end loop

void to_Timer(){newPosition = myEnc.read()/4;
   switch(i){
    case 0: segm = 10; segment();segm=a[0]; an=0; anod(); segment();break;
    case 1: segm = 10; segment();segm=a[1]; an=1; anod(); segment();break;
    i++;if(i>1){i=0;} 
}}

void segment(){
  switch(segm){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,0);break;// 0 
    case 1: ch(SEG_A,0);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// 1
    case 2: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,0);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,0);ch(SEG_G,1);break;// 2
    case 3: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,1);break;// 3   
    case 4: ch(SEG_A,0);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 4 
    case 5: ch(SEG_A,1);ch(SEG_B,0);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 5 
    case 6: ch(SEG_A,1);ch(SEG_B,0);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,1);break;// 6 
    case 7: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// 7 
    case 8: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,1);break;// 8
    case 9: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 9 
   case 10: ch(SEG_A,0);ch(SEG_B,0);ch(SEG_C,0);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// пусто 
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(KAT_0,1);ch(KAT_1,0); break;  
    case 1:ch(KAT_0,0);ch(KAT_1,1); break; 
  }}
void ch(int pin, int logic){digitalWrite(pin,logic);}
  
 void audio(){
pt1.setFront_lk_att(0);// att front L
pt1.setFront_rk_att(0);// att front R
pt1.setCenter_att(0);  // att center
pt1.setRear_lk_att(0); // att rear L
pt1.setRear_rk_att(0); // att rear R
pt1.setSub_att(0);     // att sub
// int -7...7 = -14...+14 dB 

pt1.setFunc(0,0,0);// FUNC:  
                   // mute - 0 выкл, 1 вкл 
                   // 3d - 0 вкл, 1 выкл
                   // тембр - 0 вкл, 1 выкл
                   // (int 0,0,0) - по умолчанию
        
pt1.setBass(0);            // BASS    -14...0...14 dB (int -7...0...7)
pt1.setMiddle(0);          // MIDDLE  -14...0...14 dB (int -7...0...7)
pt1.setTreble(0);          // TREBLE  -14...0...14 dB (int -7...0...7)
        
pt1.setVol(vol); // 0...79
}

62

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

Прошил ардуино представленным выше скетчем.
Имеются следующие проблемы:
- постоянно светятся сегменты А и В вне зависимости от отображаемых цифр(проверял, каждый светодиод светится по отдельности нормально);
- светиться первый ряд светодиодов, если в скетче поменять значение "#define KAT_0 A0" на "#define KAT_0 A1", и "#define KAT_1 A1" на "#define KAT_1 A0"  начинает светится второй ряд светодиодов, первый выключается;
- опять появился неприятный писк в колонках, с тестовый скетчем с энкодером писк отсутствует.

Ниже прикладываю изображение с отображением информации на индикаторе, а именно отображение цифр 1, 4, 5, 6.
http://forum.rcl-radio.ru/uploads/images/2023/09/94fed9ce3075f08df957fec9614a6b77.png

63

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

#define ENC_CLK     8 
#define ENC_DT      9 
#define ENC_SW      10

#define SEG_A       0
#define SEG_B       1
#define SEG_C       2
#define SEG_D       3
#define SEG_E       4
#define SEG_F       5
#define SEG_G       6
#define DP          7

#define KAT_0       A0
#define KAT_1       A1

#include <Wire.h> 
#include <PT2322.h>
#include <EEPROM.h>
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip    
 Encoder myEnc(ENC_DT, ENC_CLK);// DT, CLK
 PT2322 pt1;

 long oldPosition  = -999,newPosition,times; 
 int an, segm,i,vol,menu;
 byte a[2];
 bool w;
 
void setup(){
    Wire.begin();
    MsTimer2::set(4, to_Timer);MsTimer2::start();
    pinMode(ENC_SW,INPUT); 
    pinMode(SEG_A,OUTPUT);
    pinMode(SEG_B,OUTPUT);
    pinMode(SEG_C,OUTPUT);
    pinMode(SEG_D,OUTPUT);
    pinMode(SEG_E,OUTPUT);
    pinMode(SEG_F,OUTPUT);
    pinMode(SEG_G,OUTPUT);
    pinMode(DP,OUTPUT);
    pinMode(KAT_0,OUTPUT);
    pinMode(KAT_1,OUTPUT);
    vol = EEPROM.read(0);
    if(vol>79){vol=0;}
  }

void loop(){
////////////// BUTTON //////////////////////////////////////////////////////////////////  
  if(digitalRead(10)==LOW){menu++;if(menu>2){menu=0;}w=1;times=millis();delay(200);}
  
////////////// 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;if(vol>79){vol=79;}if(vol<0){vol=0;}}
    audio();
    a[0]=(79-vol)/10%10;
    a[1]=(79-vol)%10;
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    

////////////////// EEPROM //////////////////////////////////////////////////////////////
 if(millis()-times>5000 && w==1){
     EEPROM.update(0,vol);
     menu=0;w=1;}   

}//end loop

void to_Timer(){newPosition = myEnc.read()/4;
   switch(i){
    case 0: segm = 10; segment();an=0; anod();delayMicroseconds(200);segm=a[0]; an=0; anod(); segment();break;
    case 1: segm = 10; segment();an=1; anod();delayMicroseconds(200);segm=a[1]; an=1; anod(); segment();break;
    i++;if(i>1){i=0;} 
}}

void segment(){
  switch(segm){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,0);break;// 0 
    case 1: ch(SEG_A,0);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// 1
    case 2: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,0);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,0);ch(SEG_G,1);break;// 2
    case 3: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,1);break;// 3   
    case 4: ch(SEG_A,0);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 4 
    case 5: ch(SEG_A,1);ch(SEG_B,0);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 5 
    case 6: ch(SEG_A,1);ch(SEG_B,0);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,1);break;// 6 
    case 7: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// 7 
    case 8: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,1);break;// 8
    case 9: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 9 
   case 10: ch(SEG_A,0);ch(SEG_B,0);ch(SEG_C,0);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// пусто 
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(KAT_0,1);ch(KAT_1,0); break;  
    case 1:ch(KAT_0,0);ch(KAT_1,1); break; 
  }}
void ch(int pin, int logic){digitalWrite(pin,logic);}
  
 void audio(){
pt1.setFront_lk_att(0);// att front L
pt1.setFront_rk_att(0);// att front R
pt1.setCenter_att(0);  // att center
pt1.setRear_lk_att(0); // att rear L
pt1.setRear_rk_att(0); // att rear R
pt1.setSub_att(0);     // att sub
// int -7...7 = -14...+14 dB 

pt1.setFunc(0,0,0);// FUNC:  
                   // mute - 0 выкл, 1 вкл 
                   // 3d - 0 вкл, 1 выкл
                   // тембр - 0 вкл, 1 выкл
                   // (int 0,0,0) - по умолчанию
        
pt1.setBass(0);            // BASS    -14...0...14 dB (int -7...0...7)
pt1.setMiddle(0);          // MIDDLE  -14...0...14 dB (int -7...0...7)
pt1.setTreble(0);          // TREBLE  -14...0...14 dB (int -7...0...7)
        
pt1.setVol(vol); // 0...79
}

64

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

Теперь все сегменты отображаются как нужно, писк стал намного тише, но все еще работает только одна строка которая отображает цифры от 0 до 7

65

Re: Переделка акустики BBK MA-970S 5.1 на ручное управление

#define ENC_CLK     8 
#define ENC_DT      9 
#define ENC_SW      10

#define SEG_A       0
#define SEG_B       1
#define SEG_C       2
#define SEG_D       3
#define SEG_E       4
#define SEG_F       5
#define SEG_G       6
#define DP          7

#define KAT_0       A0
#define KAT_1       A1

#include <Wire.h> 
#include <PT2322.h>
#include <EEPROM.h>
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip    
 Encoder myEnc(ENC_DT, ENC_CLK);// DT, CLK
 PT2322 pt1;

 long oldPosition  = -999,newPosition,times; 
 int an, segm,i,vol,menu;
 byte a[2];
 bool w;
 
void setup(){
    Wire.begin();
    MsTimer2::set(6, to_Timer);MsTimer2::start();
    pinMode(ENC_SW,INPUT); 
    pinMode(SEG_A,OUTPUT);
    pinMode(SEG_B,OUTPUT);
    pinMode(SEG_C,OUTPUT);
    pinMode(SEG_D,OUTPUT);
    pinMode(SEG_E,OUTPUT);
    pinMode(SEG_F,OUTPUT);
    pinMode(SEG_G,OUTPUT);
    pinMode(DP,OUTPUT);
    pinMode(KAT_0,OUTPUT);
    pinMode(KAT_1,OUTPUT);
    vol = EEPROM.read(0);
    if(vol>79){vol=0;}
  }

void loop(){
////////////// BUTTON //////////////////////////////////////////////////////////////////  
  if(digitalRead(10)==LOW){menu++;if(menu>2){menu=0;}w=1;times=millis();delay(200);}
  
////////////// 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;if(vol>79){vol=79;}if(vol<0){vol=0;}}
    audio();
    a[0]=(79-vol)/10%10;
    a[1]=(79-vol)%10;
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    

////////////////// EEPROM //////////////////////////////////////////////////////////////
 if(millis()-times>5000 && w==1){
     EEPROM.update(0,vol);
     menu=0;w=0;}   

}//end loop

void to_Timer(){
   newPosition = myEnc.read()/4;
   switch(i){
    case 0: segm = 10; segment();an=0; anod();delayMicroseconds(200);segm=a[0]; an=0; anod(); segment();break;
    case 1: segm = 10; segment();an=1; anod();delayMicroseconds(200);segm=a[1]; an=1; anod(); segment();break;
    }i++;if(i>1){i=0;}}

void segment(){
  switch(segm){                                                                 
             //  A          B           C            D          E          F         G  
    case 0: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,0);break;// 0 
    case 1: ch(SEG_A,0);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// 1
    case 2: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,0);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,0);ch(SEG_G,1);break;// 2
    case 3: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,1);break;// 3   
    case 4: ch(SEG_A,0);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 4 
    case 5: ch(SEG_A,1);ch(SEG_B,0);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 5 
    case 6: ch(SEG_A,1);ch(SEG_B,0);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,1);break;// 6 
    case 7: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// 7 
    case 8: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,1);ch(SEG_F,1);ch(SEG_G,1);break;// 8
    case 9: ch(SEG_A,1);ch(SEG_B,1);ch(SEG_C,1);ch(SEG_D,1);ch(SEG_E,0);ch(SEG_F,1);ch(SEG_G,1);break;// 9 
   case 10: ch(SEG_A,0);ch(SEG_B,0);ch(SEG_C,0);ch(SEG_D,0);ch(SEG_E,0);ch(SEG_F,0);ch(SEG_G,0);break;// пусто 
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(KAT_0,1);ch(KAT_1,0); break;  
    case 1:ch(KAT_0,0);ch(KAT_1,1); break; 
  }}
void ch(int pin, int logic){digitalWrite(pin,logic);}
  
 void audio(){
pt1.setFront_lk_att(0);// att front L
pt1.setFront_rk_att(0);// att front R
pt1.setCenter_att(0);  // att center
pt1.setRear_lk_att(0); // att rear L
pt1.setRear_rk_att(0); // att rear R
pt1.setSub_att(0);     // att sub
// int -7...7 = -14...+14 dB 

pt1.setFunc(0,0,0);// FUNC:  
                   // mute - 0 выкл, 1 вкл 
                   // 3d - 0 вкл, 1 выкл
                   // тембр - 0 вкл, 1 выкл
                   // (int 0,0,0) - по умолчанию
        
pt1.setBass(0);            // BASS    -14...0...14 dB (int -7...0...7)
pt1.setMiddle(0);          // MIDDLE  -14...0...14 dB (int -7...0...7)
pt1.setTreble(0);          // TREBLE  -14...0...14 dB (int -7...0...7)
        
pt1.setVol(vol); // 0...79
}