Вроде нашел ошибку в коде
// M61541FP
// указываем пины подключения M61541FP
#define DATA 3
#define CLK 4
// treb and bass int -7...+7 === -14...+14 dB
int bass = 0, treb = 7;
// volume int 0...99 === 0...-99 dB
int volume_L = 15, volume_R = 0, volume_C = 0, volume_SW = 0, volume_SL = 0, volume_SR = 0;
// gain int 0 1 2 3 === 0 6 12 18 dB
int gain_L = 0, gain_R = 0, gain_C = 0, gain_SW = 0, gain_SL = 0, gain_SR = 0;
void setup() {
Serial.begin(9600);
pinMode(DATA,OUTPUT);
pinMode(CLK,OUTPUT);
delay(100);
}
void loop() {
byte_1(bass,treb);
byte_2(gain_L, volume_L, gain_R, volume_R);
byte_3(gain_C, volume_C, gain_SW, volume_SW);
byte_4(gain_SL, volume_SL, gain_SR, volume_SR);
delay(1000);
}
void byte_1(unsigned long bass_reg,unsigned long treb_reg){
bass_reg = bass_treb(bass_reg);
treb_reg = bass_treb(treb_reg);
write_byte((bass_reg << 12) + (treb_reg << 8));
}
void byte_2(unsigned long gain_L,unsigned long volume_L,long gain_R,long volume_R){
write_byte((gain_L << 22) + (volume_L << 15) + (gain_R << 13) + (volume_R << 6) + 1);
}
void byte_3(unsigned long gain_C,unsigned long volume_C,long gain_SW,long volume_SW){
write_byte((gain_C << 22) + (volume_C << 15) + (gain_SW << 13) + (volume_SW << 6) + 2);
}
void byte_4(unsigned long gain_SL,unsigned long volume_SL,long gain_SR,long volume_SR){
write_byte((gain_SL << 22) + (volume_SL << 15) + (gain_SR << 13) + (volume_SR << 6) + 3);
}
int bass_treb(int data_tone){
switch(data_tone){
case 7: data_tone = 0b1111; break; // +14 dB
case 6: data_tone = 0b1110; break; // +12 dB
case 5: data_tone = 0b1101; break; // +10 dB
case 4: data_tone = 0b1100; break; // +8 dB
case 3: data_tone = 0b1011; break; // +6 dB
case 2: data_tone = 0b1010; break; // +4 dB
case 1: data_tone = 0b1001; break; // +2 dB
case 0: data_tone = 0b1000; break; // 0 dB
case -1: data_tone = 0b0001; break; // −2 dB
case -2: data_tone = 0b0010; break; // −4 dB
case -3: data_tone = 0b0011; break; // −6 dB
case -4: data_tone = 0b0100; break; // −8 dB
case -5: data_tone = 0b0101; break; // −10 dB
case -6: data_tone = 0b0110; break; // −12 dB
case -7: data_tone = 0b0111; break; // −14 dB
}
return data_tone;
}
void write_byte(unsigned long data){
// 0-22 bit
digitalWrite(CLK, LOW); delayMicroseconds(3);
for (int i = 23; i >= 1; i--) {
digitalWrite(DATA, (data >> i) & 1); delayMicroseconds(3);
digitalWrite(CLK, HIGH); delayMicroseconds(3);
digitalWrite(CLK, LOW); delayMicroseconds(3);
}
// 23 bit
digitalWrite(DATA,(data << 0)& 1); delayMicroseconds(3);
digitalWrite(CLK, HIGH);delayMicroseconds(3);
digitalWrite(DATA, HIGH);delayMicroseconds(1);// CLOCK
digitalWrite(CLK, LOW);delayMicroseconds(1);
digitalWrite(DATA, LOW);delayMicroseconds(1);
digitalWrite(CLK, HIGH);delayMicroseconds(10);
}