Тема: BD34701KS2
Требуется тестирование!!!
BD34701KS2 - Данный контент доступен только зарегистрированным пользователям.
BD34701KS2.h
// liman324@yandex.ru rcl-radio.ru
#ifndef BD34701KS2_H
#define BD34701KS2_H
#define ADDR_0 0
#define ADDR_1 1
#define ADDR_2 2
#define ADDR_3 3
#define ADDR_7 11
#include <Arduino.h>
class BD34701KS2
{
public:
BD34701KS2(uint8_t cl, uint8_t da);
void set0(int chip, int sub, int rec, int input_main);
// Input Selector (MAIN)
// chip >> 0 (0...1)
// sub >> 0 (0...1)
// rec >> 0 (0...1)
// input >> 1 (1...12 = in1...in12 , 0 = MUTE)
void set1(int chip, int input);
// IInput Selector (SUB)
// chip >> 0 (0...1)
// input >> 1 (1...12 = in1...in12 , 0 = MUTE)
void set2(int chip, int adc_att, int mode_sbl_sbrch, int mode_sl_srch, int mode_c_swch, int mode_fr_frch);
// chip >> 0 (0...1)
// adc_att >> 0 (0...8)
// mode_sbl_sbrch >> 1 (0...3)
// mmode_sl_srch >> 1 (0...3)
// mode_c_swch >> 1 (0...3)
// mode_fr_frch >> 1 (0...3)
void set3(int chip, int volume, int ch_vol_sel);
// chip >> 0 (0...1)
// volume >> 0 (-190...64)
// ch_vol_sel >> 0,1,2,3,4,5,6,7
void set7(int chip, int reset, int base_clock, int sw_ba, int sw_ab);
// chip >> 0 (0...1)
// reset >> 0 (0...1)
// base_clock >> 0 (0...1)
// sw_ba >> 0 (0...7)
// sw_ab >> 0 (0...7)
private:
void writeBD(char data);
uint8_t CL;
uint8_t DA;
};
#endif //BD34701KS2_H
BD34701KS2.cpp
#include <Arduino.h>
#include "BD34701KS2.h"
BD34701KS2::BD34701KS2(uint8_t cl, uint8_t da){
CL = cl;
DA = da;
pinMode(CL,OUTPUT);
pinMode(DA,OUTPUT);
}
void BD34701KS2::set0(int chip, int sub, int rec, int input_main){
writeBD(ADDR_0 + (2 << chip) + (6 << sub) + (9 << rec) + (10 << input_main) );
}
void BD34701KS2::set1(int chip, int input){
writeBD(ADDR_1 + (2 << chip) + (10 << input) );
}
void BD34701KS2::set2(int chip, int adc_att, int mode_sbl_sbrch, int mode_sl_srch, int mode_c_swch, int mode_fr_frch){
writeBD(ADDR_2 + (2 << chip) + (4 << adc_att) + (8 << mode_sbl_sbrch) + (10 << mode_sl_srch) + (12 << mode_c_swch) + (14 << mode_fr_frch) );
}
void BD34701KS2::set3(int chip, int volume, int ch_vol_sel){
int vol_d;
if(volume > 0) {vol_d = 0;}
if(volume <= 0) {volume = abs(volume);vol_d = 1;}
writeBD(ADDR_3 + (2 << chip) + (4 << volume) + (13 << ch_vol_sel) + (12 << vol_d) );
}
void BD34701KS2::set7(int chip, int reset, int base_clock, int sw_ba, int sw_ab){
writeBD(ADDR_7 + (2 << chip) + (6 << reset) + (9 << base_clock) + (10 << sw_ba) + (13 << sw_ab) );
}
void BD34701KS2::writeBD(char data){
for(int i = 15; i >= 0; i--){
digitalWrite(CL,LOW);
digitalWrite(DA, (data >> i) & 0x01);
digitalWrite(CL,HIGH);
}
digitalWrite(CL,LOW);
digitalWrite(DA,LOW);
delay(100);
}
test.ino
#include <BD34701KS2.h>
BD34701KS2 bd(2,3); // CL, DA
void setup() {
audio();
}
void loop() {
// put your main code here, to run repeatedly:
}
void audio(){
bd.set0(0, 0, 0, 1);
// Input Selector (MAIN)
// chip >> 0 (0...1)
// sub >> 0 (0...1)
// rec >> 0 (0...1)
// input >> 1 (1...12 = in1...in12 , 0 = MUTE)
bd.set1(0, 1);
// IInput Selector (SUB)
// chip >> 0 (0...1)
// input >> 1 (1...12 = in1...in12 , 0 = MUTE)
bd.set2(0,0,1,1,1,1);
// chip >> 0 (0...1)
// adc_att >> 0 (0...8)
// mode_sbl_sbrch >> 1 (0...3)
// mmode_sl_srch >> 1 (0...3)
// mode_c_swch >> 1 (0...3)
// mode_fr_frch >> 1 (0...3)
bd.set3(0, 0, 0);
bd.set3(0, 0, 1);
bd.set3(0, 0, 2);
bd.set3(0, 0, 3);
bd.set3(0, 0, 4);
bd.set3(0, 0, 5);
bd.set3(0, 0, 6);
bd.set3(0, 0, 7);
// chip >> 0 (0...1)
// volume >> 0 (-190...64)
// ch_vol_sel >> 0,1,2,3,4,5,6,7
bd.set7(0, 0, 0, 0, 0);
// chip >> 0 (0...1)
// reset >> 0 (0...1)
// base_clock >> 0 (0...1)
// sw_ba >> 0 (0...7)
// sw_ab >> 0 (0...7)
}
Скетч использует 1184 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 11 байт (0%) динамической памяти, оставляя 2037 байт для локальных переменных. Максимум: 2048 байт.