Тема: TEA6320
TEA6320 представляет собой четырехканальный аудиопроцессор с цифровым управлением. TEA6320 преобразует стерео сигнал в четырех канальный (квадро). Аудиопроцессор позволяет производить регулировку уровня звука в каждом канале отдельно и во всех каналах одновременно, а также имеется возможность регулировать тембр по низким и высоким частотам.
TEA6320.h
#ifndef TEA6320_H
#define TEA6320_H
#define TEA6320_address 0x40
//Sub addresses
#define TEA6320_VOL_LOUDNESS 0b00000000
#define TEA6320_FRONT_R 0b00000001
#define TEA6320_FRONT_L 0b00000010
#define TEA6320_REAR_R 0b00000011
#define TEA6320_REAR_L 0b00000100
#define TEA6320_BASS 0b00000101
#define TEA6320_TREBLE 0b00000110
#define TEA6320_INPUT 0b00000111
#include <Arduino.h>
class TEA6320
{
public:
TEA6320();
void setVol_Loud(int vol, int loud);
// vol = -31...+20 дБ = int -31...20
// loud = 0 off, 1 on
void setBallance(int out, int vol_out);
// 0...3 FR FL RR RL
// -55...0 дБ = int -55...0
void setBass(int bass); //-15...+15 дБ = int -10...10
void setTreb(int treb); //-12...+12 дБ = int -8...8
void setInput(int in, int mute); //int 0...3
private:
void writeWire(char a, char b);
};
#endif //TEA6320
TEA6320.cpp
#include <Arduino.h>
#include <Wire.h>
#include "TEA6320.h"
TEA6320::TEA6320(){
Wire.begin();
}
void TEA6320::setVol_Loud(int vol, int loud){
switch (vol) {
case 20: vol = 0b00111111;break;
case 19: vol = 0b00111110;break;
case 18: vol = 0b00111101;break;
case 17: vol = 0b00111100;break;
case 16: vol = 0b00111011;break;
case 15: vol = 0b00111010;break;
case 14: vol = 0b00111001;break;
case 13: vol = 0b00111000;break;
case 12: vol = 0b00110111;break;
case 11: vol = 0b00110110;break;
case 10: vol = 0b00110101;break;
case 9: vol = 0b00110100;break;
case 8: vol = 0b00110011;break;
case 7: vol = 0b00110010;break;
case 6: vol = 0b00110001;break;
case 5: vol = 0b00110000;break;
case 4: vol = 0b00101111;break;
case 3: vol = 0b00101110;break;
case 2: vol = 0b00101101;break;
case 1: vol = 0b00101100;break;
case 0: vol = 0b00101011;break;
case -1: vol = 0b00101010;break;
case -2: vol = 0b00101001;break;
case -3: vol = 0b00101000;break;
case -4: vol = 0b00100111;break;
case -5: vol = 0b00100110;break;
case -6: vol = 0b00100101;break;
case -7: vol = 0b00100100;break;
case -8: vol = 0b00100011;break;
case -9: vol = 0b00100010;break;
case -10: vol = 0b00100001;break;
case -11: vol = 0b00100000;break;
case -12: vol = 0b00011111;break;
case -13: vol = 0b00011110;break;
case -14: vol = 0b00011101;break;
case -15: vol = 0b00011100;break;
case -16: vol = 0b00011011;break;
case -17: vol = 0b00011010;break;
case -18: vol = 0b00011001;break;
case -19: vol = 0b00011000;break;
case -20: vol = 0b00010111;break;
case -21: vol = 0b00010110;break;
case -22: vol = 0b00010101;break;
case -23: vol = 0b00010100;break;
case -24: vol = 0b00010011;break;
case -25: vol = 0b00010010;break;
case -26: vol = 0b00010001;break;
case -27: vol = 0b00010000;break;
case -28: vol = 0b00001111;break;
case -29: vol = 0b00001110;break;
case -30: vol = 0b00001101;break;
case -31: vol = 0b00001100;break;
}
switch (loud) {
case 1: loud = 0b01000000;break;
case 0: loud = 0b00000000;break;
}
int vol_loud = vol + loud;
writeWire(TEA6320_VOL_LOUDNESS, vol_loud);
}
void TEA6320::setBallance(int out, int vol_out){
switch (vol_out) {
case 0: vol_out = 0b00111111;break;
case -1: vol_out = 0b00111110;break;
case -2: vol_out = 0b00111101;break;
case -3: vol_out = 0b00111100;break;
case -4: vol_out = 0b00111011;break;
case -5: vol_out = 0b00111010;break;
case -6: vol_out = 0b00111001;break;
case -7: vol_out = 0b00111000;break;
case -8: vol_out = 0b00110111;break;
case -9: vol_out = 0b00110110;break;
case -10: vol_out = 0b00110101;break;
case -11: vol_out = 0b00110100;break;
case -12: vol_out = 0b00110011;break;
case -13: vol_out = 0b00110010;break;
case -14: vol_out = 0b00110001;break;
case -15: vol_out = 0b00110000;break;
case -16: vol_out = 0b00101111;break;
case -17: vol_out = 0b00101110;break;
case -18: vol_out = 0b00101101;break;
case -19: vol_out = 0b00101100;break;
case -20: vol_out = 0b00101011;break;
case -21: vol_out = 0b00101010;break;
case -22: vol_out = 0b00101001;break;
case -23: vol_out = 0b00101000;break;
case -24: vol_out = 0b00100111;break;
case -25: vol_out = 0b00100110;break;
case -26: vol_out = 0b00100101;break;
case -27: vol_out = 0b00100100;break;
case -28: vol_out = 0b00100011;break;
case -29: vol_out = 0b00100010;break;
case -30: vol_out = 0b00100001;break;
case -31: vol_out = 0b00100000;break;
case -32: vol_out = 0b00011111;break;
case -33: vol_out = 0b00011110;break;
case -34: vol_out = 0b00011101;break;
case -35: vol_out = 0b00011100;break;
case -36: vol_out = 0b00011011;break;
case -37: vol_out = 0b00011010;break;
case -38: vol_out = 0b00011001;break;
case -39: vol_out = 0b00011000;break;
case -40: vol_out = 0b00010111;break;
case -41: vol_out = 0b00010110;break;
case -42: vol_out = 0b00010101;break;
case -43: vol_out = 0b00010100;break;
case -44: vol_out = 0b00010011;break;
case -45: vol_out = 0b00010010;break;
case -46: vol_out = 0b00010001;break;
case -47: vol_out = 0b00010000;break;
case -48: vol_out = 0b00001111;break;
case -49: vol_out = 0b00001110;break;
case -50: vol_out = 0b00001101;break;
case -51: vol_out = 0b00001100;break;
case -52: vol_out = 0b00001011;break;
case -53: vol_out = 0b00001010;break;
case -54: vol_out = 0b00001001;break;
case -55: vol_out = 0b00001000;break;
}
switch(out) {
case 0: writeWire(TEA6320_FRONT_R, vol_out);break;
case 1: writeWire(TEA6320_FRONT_L, vol_out);break;
case 2: writeWire(TEA6320_REAR_R, vol_out);break;
case 3: writeWire(TEA6320_REAR_L, vol_out);break;
}
}
void TEA6320::setBass(int bass){
switch(bass){
case 10: bass = 0b00011011;break;
case 9: bass = 0b00011010;break;
case 8: bass = 0b00011001;break;
case 7: bass = 0b00011000;break;
case 6: bass = 0b00010111;break;
case 5: bass = 0b00010110;break;
case 4: bass = 0b00010101;break;
case 3: bass = 0b00010100;break;
case 2: bass = 0b00010011;break;
case 1: bass = 0b00010010;break;
case 0: bass = 0b00010001;break;
case -1: bass = 0b00001111;break;
case -2: bass = 0b00001110;break;
case -3: bass = 0b00001101;break;
case -4: bass = 0b00001100;break;
case -5: bass = 0b00001011;break;
case -6: bass = 0b00001010;break;
case -7: bass = 0b00001001;break;
case -8: bass = 0b00001000;break;
case -9: bass = 0b00000111;break;
case -10:bass = 0b00000110;break;
}
writeWire(TEA6320_BASS, bass);
}
void TEA6320::setTreb(int treb){
switch(treb){
case 8: treb = 0b00011001;break;
case 7: treb = 0b00011000;break;
case 6: treb = 0b00010111;break;
case 5: treb = 0b00010110;break;
case 4: treb = 0b00010101;break;
case 3: treb = 0b00010100;break;
case 2: treb = 0b00010011;break;
case 1: treb = 0b00010010;break;
case 0: treb = 0b00010001;break;
case -1: treb = 0b00001111;break;
case -2: treb = 0b00001110;break;
case -3: treb = 0b00001101;break;
case -4: treb = 0b00001100;break;
case -5: treb = 0b00001011;break;
case -6: treb = 0b00001010;break;
case -7: treb = 0b00001001;break;
case -8: treb = 0b00001000;break;
}
writeWire(TEA6320_TREBLE, treb);
}
void TEA6320::setInput(int in, int mute){
switch(in){
case 0: in = 0b00000111;break;
case 1: in = 0b00000110;break;
case 2: in = 0b00000101;break;
case 3: in = 0b00000100;break;
}
switch (mute) {
case 0: mute = 0b00000000;break;
case 1: mute = 0b10000000;break;
}
int input = in + mute;
writeWire(TEA6320_INPUT, input);
}
void TEA6320::writeWire(char a, char b){
Wire.beginTransmission(TEA6320_address);
Wire.write (a);
Wire.write (b);
Wire.endTransmission();
}