Re: Переделка акустики BBK MA-970S 5.1 на ручное управление
Можно не ставить транзисторы, но тогда нужно померить ток катода, при поданном на все аноды 5В через резисторы 330 Ом, если ток будет в пределах 20 мА, то транзисторы не нужны.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Переделки → Переделка акустики BBK MA-970S 5.1 на ручное управление
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Можно не ставить транзисторы, но тогда нужно померить ток катода, при поданном на все аноды 5В через резисторы 330 Ом, если ток будет в пределах 20 мА, то транзисторы не нужны.
Вам нужно 2 транзистора n-p-n bc337 bc557 или аналогичные
2 резистора по 1-10 кОм
8 резисторов по 200-330 Ом
Имеется в наличии 2 резистора 4,7 кОм, 8 резисторов 330 Ом, 2 транзистора bc547
Отлично.
Вот распиновка к ардуино
#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
Вот распиновка энкодера
#define ENC_CLK 8
#define ENC_DT 9
#define ENC_SW 10
У Вас энкодер с кнопкой?
да, с кнопкой
У энкодера должна быть такая схема
завтра постараюсь все распаять
Готово, все распаял.
#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
}
Прошил ардуино представленным выше скетчем.
Имеются следующие проблемы:
- постоянно светятся сегменты А и В вне зависимости от отображаемых цифр(проверял, каждый светодиод светится по отдельности нормально);
- светиться первый ряд светодиодов, если в скетче поменять значение "#define KAT_0 A0" на "#define KAT_0 A1", и "#define KAT_1 A1" на "#define KAT_1 A0" начинает светится второй ряд светодиодов, первый выключается;
- опять появился неприятный писк в колонках, с тестовый скетчем с энкодером писк отсутствует.
Ниже прикладываю изображение с отображением информации на индикаторе, а именно отображение цифр 1, 4, 5, 6.
#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
}
Теперь все сегменты отображаются как нужно, писк стал намного тише, но все еще работает только одна строка которая отображает цифры от 0 до 7
#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
}
Чтобы отправить ответ, вы должны войти или зарегистрироваться
forum.rcl-radio.ru → Переделки → Переделка акустики BBK MA-970S 5.1 на ручное управление
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|