Аудиопроцессор PT2319 (Arduino)

ИМС PT2319 представляет собой аудиопроцессор специально разработанный для регулирования параметров аудиосигнала с минимальными искажениями. Аудиопроцессор включает в себя регулятор громкости, тембра, коммутатор входов и предусилители входа и выхода.

Основные параметры аудиопроцессора PT2319:

  • 5-и канальный коммутатор входа
  • 4-х канальный выход (FRONT, REAR)
  • регулятор громкости 0…-79 дБ (шаг 1 дБ)
  • регулировка BASS ±11.9 дБ
  • регулировка TREBLE ±11.9 дБ
  • регулировка SUPER BASS 0 дБ … +20 дБ
  • КНИ не более 0,003% при выходном напряжении 1 Vrms
  • сопротивление нагрузки выхода 600 Ом
  • аттенюатор REAR (тыл) 0 дБ … -60 дБ
  • режим MUTE
  • предусилитель входа 0 дБ …+18.75 дБ с шагом 1.25 дБ
  • усилитель входа 0 дБ, +6.5 дБ, +8.5 дБ
  • цифровой 3-х проводной интерфейс управления (макс. частота шыны 500 кГц)
  • напряжение питания 5…10 В (9 В — рекомендуемое)
  • ток потребления 15 мА
  • разделение каналов 110 дБ
  • отношение сигнал.шум 100 дБ
  • уровень MUTE -100 дБ
  • входное сопротивление 50 кОм
  • 36-контактный SSOP корпус

Для управления любой из функций PT2319 необходимо передавать управляющие сигналы микроконтроллера
через 3-проводной интерфейс CE, DI и CL. Основная временная последовательность управляющих кодов показана ниже:

Код управления для PT2319 состоит из 8-разрядного кода адреса и 44-разрядного кода данных, общая длина одного посылаемого в аудиопроцессор пакета данных 52 бита.

Отправка адреса 8 бит

Отправка данных 44 бита

После подачи питания на микросхему необходимо очистить регистр путем заполнения битов D33 и D34 нулями. При обращении к определенной функции, например к громкости, необходимо каждый раз отправлять 52 битный байт, при этом нужно повторно подтверждать данные которые Вы не меняли.

Ниже показан тестовый скетч который позволяет запустить аудиопроцессор используя платформу Arduino (Nano, Uno, Atmega8, Atmega168, Atmega328).

#define CE 2
#define DI 3
#define CL 4
 
byte fader_m[16]={0b1111,0b0111,0b1011,0b0011,0b1101,0b0101,0b1001,0b0001,0b1110,0b0110,0b1010,0b0010,0b1100,0b0100,0b1000,0b0000};
byte sup_bass_m[11]={0b0000,0b1000,0b0100,0b1100,0b0010,0b1010,0b0110,0b1110,0b0001,0b1001,0b0101};
byte tembr_m[15]={0b1111,0b0111,0b1011,0b0011,0b1101,0b0101,0b1001,0b0000,0b1000,0b0100,0b1100,0b0010,0b1010,0b0110,0b1110};
byte in_gain_m[16]={0b0000,0b1000,0b0100,0b1100,0b0010,0b1010,0b0110,0b1110,0b0001,0b1001,0b0101,0b1101,0b0011,0b1011,0b0111,0b1111};
byte vol_m[81]={0b00100101,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};
 
void setup() {
   pinMode(CE,OUTPUT);pinMode(DI,OUTPUT);pinMode(CL,OUTPUT);
   digitalWrite(CL,LOW);digitalWrite(CE,LOW);digitalWrite(DI,LOW);
   Serial.begin(9600);
   Write(0,0,0,0,0,0,0,0,0,0,0);delay(100);  
}
 
void loop() {
  Write(0,1,7,15,0,0,1,0,0,3,0);
 
  delay(1000);
}
 
void Write(byte fader, byte sup_bass,byte bass, byte treb, int vol, byte in_gain,long in,long f_r,long out_gain,long c_set,long mute){  
 // fader 0...-60 ∞ dB >> byte 0...15 - ослабление тыл
 // sup_bass step0...step10 >> byte 0...10
 // bass step1...step15 >> byte 0...15
 // treb step1...step15 >> byte 0...15
 // vol 0...-79 ∞ dB >> int 0...80
 // in_gain 0...18.75 dB step 1.25dB >> int 0...15
 // in 1...5 >> int 1...5
 // f_r - Fader resr/front control >> int 0 >> не менять
 // out_gain 0, 6.5, 8.5 dB >> int 0...2
 // c_set >> int 0...3 >> 3 - не менять
 // mute >> 0 - off, 1 - on
 
  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(CE,HIGH);
     for(int i = 3; i >= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (fader_m[fader] >> i) & 0x01);
        digitalWrite(CL,HIGH);
        }
     for(int i = 3; i >= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (sup_bass_m[sup_bass] >> i) & 0x01); 
        digitalWrite(CL,HIGH);
        }                
     for(int i = 3; i >= 0; i--){
        digitalWrite(CL,LOW); 
        digitalWrite(DI, (tembr_m[bass] >> i) & 0x01);
        digitalWrite(CL,HIGH);
        } 
     for(int i = 3; i >= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (tembr_m[treb] >> i) & 0x01);
        digitalWrite(CL,HIGH);
        } 
     for(int i = 7; i >= 0; i--){
        digitalWrite(CL,LOW); 
        digitalWrite(DI, (vol_m[vol] >> i) & 0x01);
        digitalWrite(CL,HIGH);
        }
     for(int i = 3; i >= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (in_gain_m[in_gain] >> i) & 0x01);
        digitalWrite(CL,HIGH);
        } 
     long in1,in2,out_gain1,out_gain2;      
     switch(in){
      case 1: in1=0b00;in2=1;break;
      case 2: in1=0b10;in2=1;break;
      case 3: in1=0b01;in2=1;break;
      case 4: in1=0b11;in2=1;break;
      case 5: in1=0;in2=0;break;
      }
     switch(out_gain){
      case 0: out_gain1=0;out_gain2=1;break;
      case 1: out_gain1=1;out_gain2=0;break;
      case 2: out_gain1=1;out_gain2=1;break;
      } 
 
     long grup = (in1<<14)+(f_r<<13)+(out_gain1<<12)+(in2<<11)+(c_set<<9)+(mute<<8)+(out_gain2<<4);  
     for(int i = 15; i >= 0; i--){
        digitalWrite(CL,LOW); 
        digitalWrite(DI, (grup >> i) & 0x01); 
        digitalWrite(CL,HIGH); 
        }              
        digitalWrite(CL,LOW);
        digitalWrite(CE,LOW);
        Serial.println(grup,BIN);
  }

Основная и единственная функция управления аудиопроцессором Write(). Эта функция позволяет управлять всеми параметрами аудиопроцессора.

Описание функции:

  • Аттенюатор: REAR (тыл) fader 0…-60 ∞ dB >> byte 0…15
  • Регулировка SUER BASS: sup_bass step0…step10 >> byte 0…10
  • Регулировка BASS:bass step1…step15 >> byte 0…15
  • Регулировка TREBLE: treb step1…step15 >> byte 0…15
  • Регулировка VOLUME:vol 0…-79 ∞ dB >> int 0…80
  • Предупредить входа: in_gain 0…18.75 dB step 1.25dB >> int 0…15
  • Коммутатор входа: in 1…5 >> int 1…5
  • Выбор тыл или фронт для регулировки аттенюатора (выбран тыл it 0): f_r — Fader resr/front control >> int 0 >> не менять
  • Усилитель выхода: out_gain 0, 6.5, 8.5 dB >> int 0…2
  • Режим работы: c_set >> int 0…3 >> 3 — не менять
  • Режим MUTE: mute >> 0 — off, 1 — on

pt2319.pdf

Comments

Добавить комментарий

Войти с помощью: