Аудиопроцессор LC75421M позволяет регулировать громкость, тембр, баланс, содержит аттенюаторы выхода, 5-и канальный коммутатор входов с предварительным предусилителем.
Основные возможности аудиопроцессора LC75421M:
- Регулировка громкости от 0 дБ до -79 дБ с шагом 1 дБ и –∞ (81 уровень)
- Раздельный регулятор громкости L/R
- Аттенюаторы фронт/тыл в 16 уровней (с шагом 2 дБ от 0 дБ до -20 дБ, с шагом 5 дБ от -20 дБ до -25 дБ, с шагом 10-дБ от -25 дБ до -45 дБ и -60 дБ, –∞)
- Регулятор тембра ВЧ и НЧ 15 уровней с регулировкой от 0 дБ до ±11,9 дБ с шагом 1,7 дБ
- Входной усилитель от 0 дБ до +18,75 дБ (с шагом 1,25 дБ)
- Выходной усилитель с фиксированными значениями 0 дБ, +6,5 дБ и +8,5 дБ
- 5-и канальный селектор входов
- Функция SUPER BASS ступенчатое управление с 11 уровнями
- Электрические параметры:
- Напряжение питания от 7,5 до 10 В
- Управление 3-Wire с частотой до 500 кГц (CL, DI, CE)
- THD (VIN = 1 Vrms, f = 1 kHz) не более 0.003 %
- Рассеиваемая мощность 550 мВт
- Input resistance 50 кОм
Управление аудиопроцессором осуществляется при помощи трех проводной шины CL, DI, CE
Команда управления содержит 52 бита, 8 бит адрес и 44 бита данные.
При изменении одного или нескольких параметров аудиопроцессора всегда необходимо передавать 52 бита данных, а так как управление аттенюаторами front/rear раздельное, то необходимо передавать пакет данных дважды (для rear и front отдельно по 52 бита).
Схема подключения
Тестовый скетч:
#define CE 3 #define DI 2 #define CL 4 void setup(){ pinMode(CE,OUTPUT); pinMode(DI,OUTPUT); pinMode(CL,OUTPUT); digitalWrite(CL,LOW); digitalWrite(CE,LOW); digitalWrite(DI,LOW); delay(200); //fader s_bass bass treb vol in_g in rf out_g ch mute audio(15, 1 , 7, 8, 0, 0, 1, 1, 0, 1, 0 );// Lch (ch=1) | front(rf=1,fader=15) audio(15, 1 , 7, 8, 0, 0, 1, 0, 0, 2, 0 );// Rch (ch=2) | rear (rf=0,fader=15) } void loop(){ } void audio(int fader, int super_bass, int bass, int treb, int vol, int in_gain, int in, int rf, int out_gain, int ch, int mute){ byte tembr[15]{0b1111,0b0111,0b1011,0b0011,0b1101,0b0101,0b1001,0b0000,0b1000,0b0100,0b1100,0b0011,0b1010,0b0110,0b1110}; byte volume_m[81]{0b000100101,0b11000101,0b01000101,0b10000101,0b00111001,0b11011001,0b01011001,0b10011001,0b00101001,0b11001001,0b01001001,0b10001001,0b00110001, 0b11010001,0b01010001,0b10010001,0b00100001,0b11000001,0b01000001,0b10000001,0b00111110,0b11011110,0b01011110,0b10011110,0b00101110,0b11001110,0b01001110,0b10001110, 0b00110110,0b11010110,0b01010110,0b10010110,0b00100110,0b11000110,0b01000110,0b10000110,0b00111010,0b11011010,0b01011010,0b10011010,0b00101010,0b11001010,0b01001010, 0b10001010,0b00110010,0b11010010,0b01010010,0b10010010,0b00100010,0b11000010,0b01000010,0b10000010,0b00111100,0b11011100,0b01011100,0b10011100,0b00101100,0b11001100, 0b01001100,0b10001100,0b00110100,0b11010100,0b01010100,0b10010100,0b00100100,0b11000100,0b01000100,0b10000100,0b00111000,0b11011000,0b01011000,0b10011000,0b00101000, 0b11001000,0b01001000,0b10001000,0b00110000,0b11010000,0b01010000,0b10010000,0b00000000}; digitalWrite(CL,LOW); digitalWrite(CE,LOW); byte addr = 0b10000001; for(int i = 7; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, (addr >> i) & 0x01); digitalWrite(CL,HIGH); } digitalWrite(CL,LOW); delayMicroseconds(1); digitalWrite(CE,HIGH); ///////////// Fader step control ///////////////////////// /// int 0...15 === - ... 0 dB // 0...3 bit for(int i = 0; i <= 3; i++){ digitalWrite(CL,LOW); switch(i){ case 0: digitalWrite(DI, (fader & 0b0001)>>0);break; case 1: digitalWrite(DI, (fader & 0b0010)>>1);break; case 2: digitalWrite(DI, (fader & 0b0100)>>2);break; case 3: digitalWrite(DI, (fader & 0b1000)>>3);break; } digitalWrite(CL,HIGH); } /////////////// Super bass control //////////////////////// /// int 0...10 === flat ... boos max // 4...7 bit for(int i = 0; i <= 3; i++){ digitalWrite(CL,LOW); switch(i){ case 0: digitalWrite(DI, (super_bass & 0b0001)>>0);break; case 1: digitalWrite(DI, (super_bass & 0b0010)>>1);break; case 2: digitalWrite(DI, (super_bass & 0b0100)>>2);break; case 3: digitalWrite(DI, (super_bass & 0b1000)>>3);break; } digitalWrite(CL,HIGH); } //////////// bass ////////////////////////////////// /// int 1...15 === step1...step15 // 8...11 bit for(int i = 3; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, (tembr[bass] >> i) & 0x01); digitalWrite(CL,HIGH); } //////////// treb ////////////////////////////////// /// int 1...15 === step1...step15 // 12...15 bit for(int i = 3; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, (tembr[treb] >> i) & 0x01); digitalWrite(CL,HIGH); } //////////// volume ///////////////////////// // int 0...80 === -79...0 dB // 16...23 bit for(int i = 7; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, (volume_m[vol] >> i) & 0x01); digitalWrite(CL,HIGH); } ///////////// input gain control ///////////////////////// /// int 0...15 === 0 ... 18.75 dB // 24...27 bit for(int i = 0; i <= 3; i++){ digitalWrite(CL,LOW); switch(i){ case 0: digitalWrite(DI, (in_gain & 0b0001)>>0);break; case 1: digitalWrite(DI, (in_gain & 0b0010)>>1);break; case 2: digitalWrite(DI, (in_gain & 0b0100)>>2);break; case 3: digitalWrite(DI, (in_gain & 0b1000)>>3);break; } digitalWrite(CL,HIGH); } /////////// input_1 ////////////////////////////////// /// int 1...5 === in1...in5 // 28...29 bit int in1; switch(in){ case 1: in1 = 0b00;break; case 2: in1 = 0b10;break; case 3: in1 = 0b01;break; case 4: in1 = 0b11;break; case 5: in1 = 0b00;break; } for(int i = 1; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, (in1 >> i) & 0x01); digitalWrite(CL,HIGH); } ////////// rear/front /////////// // int 0...1 === rear...front // 30 bit digitalWrite(CL,LOW); digitalWrite(DI, rf); digitalWrite(CL,HIGH); ////////// out gain /////////// // int 0...3 === 0 0 +6.5 +8.5 // 31 bit int out_gain1; switch(out_gain){ case 0: out_gain1 = 0;break; case 1: out_gain1 = 0;break; case 2: out_gain1 = 1;break; case 3: out_gain1 = 1;break; } digitalWrite(CL,LOW); digitalWrite(DI, out_gain1); digitalWrite(CL,HIGH); /////////// input_2 ////////////////////////////////// /// int 1...5 === in1...in5 // 32 bit int in2; switch(in){ case 1: in2 = 1;break; case 2: in2 = 1;break; case 3: in2 = 1;break; case 4: in2 = 1;break; case 5: in2 = 0;break; } digitalWrite(CL,LOW); digitalWrite(DI, in2); digitalWrite(CL,HIGH); /////////// Channel selection ////////////////////////////////// /// int 0...3 === Initial setting, Lch, Rch, LR // 33...34 bit switch(ch){ case 0: ch = 0b00;break; case 1: ch = 0b01;break; case 2: ch = 0b10;break; case 3: ch = 0b11;break; } for(int i = 1; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, (ch >> i) & 0x01); digitalWrite(CL,HIGH); } ////////// mute /////////// // int 0...1 === off...on // 35 bit digitalWrite(CL,LOW); digitalWrite(DI, mute); digitalWrite(CL,HIGH); ///// test //////////// // 36...38 bit for(int i = 2; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, 0); digitalWrite(CL,HIGH); } ////////// out gain /////////// // int 0...3 === 0 0 +6.5 +8.5 // 39 bit int out_gain2; switch(out_gain){ case 0: out_gain2 = 0;break; case 1: out_gain2 = 1;break; case 2: out_gain2 = 0;break; case 3: out_gain2 = 1;break; } digitalWrite(CL,LOW); digitalWrite(DI, out_gain2); digitalWrite(CL,HIGH); ///// test //////////// // 40 ... 43 bit for(int i = 3; i >= 0; i--){ digitalWrite(CL,LOW); digitalWrite(DI, 0); digitalWrite(CL,HIGH); } //// end byte digitalWrite(CL,LOW); delayMicroseconds(1); digitalWrite(CE,LOW); }
Скетч использует 1638 байт (5%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
Функция управления аудиопроцессором:
//fader s_bass bass treb vol in_g in rf out_g ch mute
audio(1, 2 , 3, 4, 5, 6, 7, 8, 9, 10, 11 );
- Аттенюаторы (byte 0…15) read / front, значение нужно отсылать 2 раза, отдельно для front и отдельно для rear
- Super bass (byte 0…10)
- Bass (byte 1…15)
- Treble (byte 1…15)
- Volume (int 0…81)
- Input gain (byte 0…15)
- Input (byte 1…5)
- Переключатель регулирования rear/front , значение нужно отсылать 2 раза (bool 0…1)
- Output gain (byte 0…3)
- Channel selection (byte 0…3)
- Mute
Пример:
Как видно в первой функции параметр fader = 15, это значить что аттенюатор выхода установлен на уровень 0 дБ, а в параметре rf установлена 1, это значит что значение аттенюатора применимо только к фронтальному выходу. Параметр ch имеет значение 1, это значить что регулировка громкости доступна только по левому каналу.
Во второй функции все аналогично, за исключением того, регулировка аттенюатора доступна только для тылового выхода, а громкость для правого канала. fr = 0 а ch = 2.
параметр ch |
параметр rf |
Более подробно узнать допустимые значения всех параметров можно в даташите — lc75421
Тестовый скетч настроен на максимальную громкость, активен вход №1, регуляторы тембра в среднем положении, аттенюаторы и предусилители на 0 дБ. Регулировка громкости раздельная для левого и правого канала.