1

Тема: BD37543FS - Sound Processor with Built-in 3-band Equalizer

BD37543FS is a sound processor with built-in 3-band
equalizer for car audio. The functions are stereo input
selector (which can switch single and ground isolation
input), input-gain control, main volume, loudness, 5ch
fader volume, LPF and HPF for subwoofer and mixing
input. Moreover, “Advanced switch circuit”, which is an
original ROHM technology, can reduce various
switching noise (ex. No-signal, low frequency like 20Hz
& large signal inputs). Also, “Advanced switch” makes
control of microcomputer easier, and can construct a
high quality car audio system.

Данный контент доступен только зарегистрированным пользователям.

Данный контент доступен только зарегистрированным пользователям.

https://github.com/liman324/BD37543FS.git

test.ino

#include <Wire.h> 
#include <BD37543FS.h>
BD37543FS bd; 

void setup(){
   Wire.begin();
   audio();
}

void loop(){}

void audio(){
   bd.setSetup_1(0,2,1); 
                   // default (0,2,1) | int 0...3, 0...3, 0...1
    bd.setSetup_2(0,0,0,0); 
                   // int sub_f ------ OFF 55Hz 85Hz 120Hz 160Hz = int 0...4
                   // int sub_out ---- LPF Front Rear Prohibition = int 0...3
                   // int level_metr - HOLD REST = int 0..1
                   // int faza ------- 0 180 = int 0...1
    bd.setSetup_3(0,0,0); 
                   // int f_r_hpf ---- 55Hz 85Hz 120Hz 160Hz = int 0...3
                   // int r_hpf ------ pass NOT_pass = int 0...1
                   // int f_hpf ------ pass NOT_pass = int 0...1
    bd.setIn(0); 
                   // 0...10 | in A B C = int 0 1 2 
    bd.setIn_gain(0,0); 
                   // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
    bd.setVol(0); 
                   // -79...+15 dB = int -79...15
    bd.setFront_1(0); 
                   // -79...+15 dB = int -79...15
    bd.setFront_2(0); 
                   // -79...+15 dB = int -79...15
    bd.setRear_1(0); 
                   // -79...+15 dB = int -79...15
    bd.setRear_2(0); 
                   // -79...+15 dB = int -79...15
    bd.setSub(0); 
                   // -79...+15 dB = int -79...15
    bd.setMix(-79);
                   // -79...+7 dB = int -79...7
    bd.setBass_setup(0, 0); 
                   // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
    bd.setMiddle_setup(0,0); 
                   // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
    bd.setTreble_setup(0,0); 
                   // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
    bd.setBass_gain(0); 
                   // --20 ... +20 dB = int -20 ... 20    
    bd.setMiddle_gain(0); 
                   // --20 ... +20 dB = int -20 ... 20
    bd.setTreble_gain(0); 
                   // --20 ... +20 dB = int -20 ... 20        
    bd.setLoudness_gain(0,0); 
                   // Hicut1 Hicut2 Hicut3 Hicut4 = int 0...3
                   // 0 ... 20 dB = int 0 ... 20
  }

Скетч использует 2174 байт (6%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 219 байт (10%) динамической памяти, оставляя 1829 байт для локальных переменных. Максимум: 2048 байт.

BD37543FS.h

#ifndef BD37543FS_H
#define BD37543FS_H

#define BD37543FS_address 0b1000000 

#define SETUP_1        0x01
#define SETUP_2        0x02
#define SETUP_3        0x03
#define INPUT_SELECT   0x05
#define INPUT_GAIN     0x06
#define VOLUME_GAIN    0x20
#define FADER_1_FRONT  0x28
#define FADER_2_FRONT  0x29
#define FADER_1_REAR   0x2A
#define FADER_2_REAR   0x2B
#define FADER_SUB      0x2C
#define MIXING         0x30
#define BASS_SETUP     0x41
#define MIDDLE_SETUP   0x44
#define TREBLE_SETUP   0x47
#define BASS_GAIN      0x51
#define MIDDLE_GAIN    0x54
#define TREBLE_GAIN    0x57
#define LOUDNESS_GAIN  0x75

#include <Arduino.h>
class BD37543FS
{
  public:
    BD37543FS();
    void setSetup_1(int sw_time_mute, int sw_time, int sw_on_off); 
                   // default (0,2,1) | int 0...3, 0...3, 0...1
    void setSetup_2(int sub_f, int sub_out, int level_metr, int lpf_faza); 
                   // int sub_f ------ OFF 55Hz 85Hz 120Hz 160Hz = int 0...4
                   // int sub_out ---- LPF Front Rear Prohibition = int 0...3
                   // int level_metr - HOLD REST = int 0..1
                   // int faza ------- 0 180 = int 0...1
    void setSetup_3(int f_r_hpf, int r_hpf, int f_hpf); 
                   // int f_r_hpf ---- 55Hz 85Hz 120Hz 160Hz = int 0...3
                   // int r_hpf ------ pass NOT_pass = int 0...1
                   // int f_hpf ------ pass NOT_pass = int 0...1
    void setIn(int in); 
                   // 0...10 | in A B C = int 0 1 2 
    void setIn_gain(int in_gain, int mute); 
                   // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
    void setVol(int vol); 
                   // -79...+15 dB = int -79...15
    void setFront_1(int front_1); 
                   // -79...+15 dB = int -79...15
    void setFront_2(int front_2); 
                   // -79...+15 dB = int -79...15
    void setRear_1(int rear_1); 
                   // -79...+15 dB = int -79...15
    void setRear_2(int rear_2); 
                   // -79...+15 dB = int -79...15
    void setSub(int sub); 
                   // -79...+15 dB = int -79...15
    void setMix(int mix_gain);
                   // -79...+7 dB = int -79...7
    void setBass_setup(int bass_q, int bass_f); 
                   // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
    void setMiddle_setup(int mid_q, int mid_f); 
                   // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
    void setTreble_setup(int treb_q, int treb_f); 
                   // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
    void setBass_gain(int bass_gain); 
                   // --20 ... +20 dB = int -20 ... 20    
    void setMiddle_gain(int mid_gain); 
                   // --20 ... +20 dB = int -20 ... 20
    void setTreble_gain(int treb_gain); 
                   // --20 ... +20 dB = int -20 ... 20        
    void setLoudness_gain(int loud_hicut, int loud_gain); 
                   // Hicut1 Hicut2 Hicut3 Hicut4 = int 0...3
                   // 0 ... 20 dB = int 0 ... 20

  private:
    void writeWire(char a, char b);
};
    
#endif //BD37543FS_H

BD37543FS.cpp

#include <Arduino.h>
#include <Wire.h>
#include "BD37543FS.h"

BD37543FS::BD37543FS(){
    Wire.begin();
}

void BD37543FS::setSetup_1(int sw_time_mute, int sw_time, int sw_on_off){
       switch(sw_time){
         case 0: sw_time = 0b00000000;break;
         case 1: sw_time = 0b00010000;break;
         case 2: sw_time = 0b00100000;break;
         case 3: sw_time = 0b00110000;break;
  }    
       switch(sw_on_off){
         case 0: sw_on_off = 0b00000000;break;
         case 1: sw_on_off = 0b10000000;break;
  }
           writeWire(SETUP_1, 0b00000100 + sw_time_mute + sw_time + sw_on_off); 
  }

void BD37543FS::setSetup_2(int sub_f, int sub_out, int level_metr, int lpf_faza){
       switch(sub_out){
         case 0: sub_out = 0b00000000;break;
         case 1: sub_out = 0b00010000;break;
         case 2: sub_out = 0b00100000;break;
         case 3: sub_out = 0b00110000;break;  
  }
       switch(level_metr){
         case 0: level_metr = 0b00000000;break;
         case 1: level_metr = 0b01000000;break;
   }
       switch(lpf_faza){
         case 0: lpf_faza = 0b00000000;break;
         case 1: lpf_faza = 0b10000000;break;
   }
         writeWire(SETUP_2, sub_f + sub_out + level_metr + lpf_faza); 
   }
   
void BD37543FS::setSetup_3(int f_r_hpf, int r_hpf, int f_hpf){
       switch(f_r_hpf){
         case 0: f_r_hpf = 0b00000000;break;
         case 1: f_r_hpf = 0b00001000;break;
         case 2: f_r_hpf = 0b00110000;break;
         case 3: f_r_hpf = 0b00010000;break;  
   }
       switch(r_hpf){
         case 0: r_hpf = 0b00000000;break;
         case 1: r_hpf = 0b01000000;break;
   }
       switch(f_hpf){
         case 0: r_hpf = 0b00000000;break;
         case 1: r_hpf = 0b10000000;break;
       
   }   
         writeWire(SETUP_3, 0b00000010 + f_r_hpf + r_hpf + f_hpf); 
   }

void BD37543FS::setIn(int in){
       switch(in){
         case 0: in = 0b00000000;break;
         case 1: in = 0b00000001;break;
         case 2: in = 0b00000010;break;
         case 3: in = 0b00000011;break;
         case 4: in = 0b00001010;break;
         case 5: in = 0b00001011;break;
         case 6: in = 0b00001111;break;
         case 7: in = 0b00010000;break;
         case 8: in = 0b00000110;break;
         case 9: in = 0b00001000;break;
        case 10: in = 0b00001001;break;
   }  
         writeWire(INPUT_SELECT, in); 
   }


void BD37543FS::setIn_gain(int in_gain, int mute){
       switch(mute){
         case 0: mute = 0b00000000;break;
         case 1: mute = 0b10000000;break;
   }
         writeWire(INPUT_GAIN, in_gain + mute); 
   }

void BD37543FS::setVol(int vol){
       if(vol > 0){vol = 128 - vol;}
       if(vol <= 0){vol = abs(vol) + 128;}
       writeWire(VOLUME_GAIN, vol); 
   }

void BD37543FS::setFront_1(int front_1){
       if(front_1 > 0){front_1 = 128 - front_1;}
       if(front_1 <= 0){front_1 = abs(front_1) + 128;}
       writeWire(FADER_1_FRONT, front_1); 
   }

void BD37543FS::setFront_2(int front_2){
       if(front_2 > 0){front_2 = 128 - front_2;}
       if(front_2 <= 0){front_2 = abs(front_2) + 128;}
       writeWire(FADER_2_FRONT, front_2); 
   }

void BD37543FS::setRear_1(int rear_1){
       if(rear_1 > 0){rear_1 = 128 - rear_1;}
       if(rear_1 <= 0){rear_1 = abs(rear_1) + 128;}
       writeWire(FADER_1_REAR, rear_1); 
   }

void BD37543FS::setRear_2(int rear_2){
       if(rear_2 > 0){rear_2 = 128 - rear_2;}
       if(rear_2 <= 0){rear_2 = abs(rear_2) + 128;}
       writeWire(FADER_2_REAR, rear_2); 
   }

void BD37543FS::setSub(int sub){
       if(sub > 0){sub = 128 - sub;}
       if(sub <= 0){sub = abs(sub) + 128;}
       writeWire(FADER_SUB, sub); 
   }

void BD37543FS::setMix(int mix_gain){
       if(mix_gain > 0){mix_gain = 128 - mix_gain;}
       if(mix_gain <= 0){mix_gain = abs(mix_gain) + 128;}
            writeWire(MIXING, mix_gain); 
   }

void BD37543FS::setBass_setup(int bass_q, int bass_f){
       switch(bass_f){
         case 0: bass_f = 0b00000000;break;
         case 1: bass_f = 0b00010000;break;
         case 2: bass_f = 0b00100000;break;
         case 3: bass_f = 0b00110000;break;  
   }
         writeWire(BASS_SETUP, bass_q + bass_f); 
   }
   
void BD37543FS::setMiddle_setup(int mid_q, int mid_f){
       switch(mid_f){
         case 0: mid_f = 0b00000000;break;
         case 1: mid_f = 0b00010000;break;
         case 2: mid_f = 0b00100000;break;
         case 3: mid_f = 0b00110000;break;  
   }
         writeWire(MIDDLE_SETUP, mid_q + mid_f); 
   }
   

void BD37543FS::setTreble_setup(int treb_q, int treb_f){
       switch(treb_f){
         case 0: treb_f = 0b00000000;break;
         case 1: treb_f = 0b00010000;break;
         case 2: treb_f = 0b00100000;break;
         case 3: treb_f = 0b00110000;break;  
   }
         writeWire(TREBLE_SETUP, treb_q + treb_f); 
   }

void BD37543FS::setBass_gain(int bass_gain){
       if(bass_gain>0){bass_gain = bass_gain;}                     
       if(bass_gain<=0){bass_gain = abs(bass_gain) + 0b10000000;}  
       writeWire(BASS_GAIN, bass_gain);   
   }

void BD37543FS::setMiddle_gain(int mid_gain){
       if(mid_gain>0){mid_gain = mid_gain;}                     
       if(mid_gain<=0){mid_gain = abs(mid_gain) + 0b10000000;}  
       writeWire(MIDDLE_GAIN, mid_gain);   
   }

void BD37543FS::setTreble_gain(int treb_gain){
       if(treb_gain>0){treb_gain = treb_gain;}                     
       if(treb_gain<=0){treb_gain = abs(treb_gain) + 0b10000000;}  
       writeWire(TREBLE_GAIN, treb_gain);   
   }

void BD37543FS::setLoudness_gain(int loud_hicut, int loud_gain){
       switch(loud_hicut){
         case 0: loud_hicut = 0b00000000;break;
         case 1: loud_hicut = 0b00100000;break;
         case 2: loud_hicut = 0b01000000;break;
         case 3: loud_hicut = 0b01100000;break;
   }
         writeWire(LOUDNESS_GAIN, loud_hicut + loud_gain);  
   }





void BD37543FS::writeWire(char a, char b){
  Wire.beginTransmission(BD37543FS_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}

2

Re: BD37543FS - Sound Processor with Built-in 3-band Equalizer

Liman324 не могли бы вы дать описание функции bd.setSetup_1(); не совсем понятно что она выполняет ? Смотрел в даташит и не понял для чего эта функция.

И вопрос по функции управления фильтрами. У фронтальных и задних каналов нет возможности раздельной настройки я правильно понял? Частота среза настраивается сразу для всех каналов и есть только вкл/откл фильтра без возможности раздельной настройки частоты среза для фронта и задних ?

3

Re: BD37543FS - Sound Processor with Built-in 3-band Equalizer

Я Вам не смогу ни чего определенного ответить по поводу функции bd.setSetup_1(), библиотека была написана по просьбе пользователя сайта, он должен был ее тестировать, но куда то пропал. Пока настройки функции выставлены по умолчанию.

И вопрос по функции управления фильтрами. У фронтальных и задних каналов нет возможности раздельной настройки я правильно понял? Частота среза настраивается сразу для всех каналов и есть только вкл/откл фильтра без возможности раздельной настройки частоты среза для фронта и задних ?

Раздельной регулировки нет.

4

Re: BD37543FS - Sound Processor with Built-in 3-band Equalizer

Спасибо за ответ !