Регулятор тембра и громкости на PT2313 (Arduino)

Микросхема PT2313 — аудиопроцессор который используется как предварительный усилитель, микросхема PT2313 имеет три стерео входа и четыре выхода (спевдоквадро), так же дополнительно имеется электронная регулировка громкости и тембра ВЧ и НЧ. Управление аудиопроцессором осуществляется по шине I2C в моем случает при помощи Arduino Nano. Уст-во содержит минимальный набор внешних элементов, после сборке в настройке не нуждается. Номинальное питание 9 В.

Основные характеристики аудипроцессора PT2313:

  • Напряжение питания от 6 до 10 В, номинальное 9 В
  • КНИ не более 0.1 %
  • Регулировка громкости от -63 до 0 дБ
  • Регулировка тембра ВЧ и НЧ ±14 дБ
  • Регулировка баланса ±8 дБ (ограничено программно)
  • Максимальный ток потребления 11 мА

Уст-во содержит два основных блока, это плата Arduino Nano (Uno) и блок аудипроцессора. Управление аудипроцессором осуществляется четырьмя кнопками. При помощи кнопки MENU можно осуществить перебор основных параметров, громкость (Volume), тембр НЧ (Bass), тембр ВЧ (Trebble), баланс (Balance). Кнопки «+» и  «-» позволяют изменять параметры громкости, тембра и баланса. Кнопка IN предназначена для переключения входа 0…2.

Вся необходимая информация выводится LCD дисплей 1602, на базе контроллера HD44780. Все настройки сохраняются в энергонезависимую память.

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini — PT2313 (GND — 26 вывод) A4 — 27 вывод PT2313 A5 — 28 вывод PT2313

Библиотека — PT2313.zip

#include <Wire.h>
#include <PT2313.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
#include <EEPROM.h>//#include <EEPROMex.h>- для старой версии Arduino IDE
PT2313 audioChip;
 byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
 byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000};
 byte menu,in,w,w1;
 int vol,z,vol_d,bass,treb,balans;
 unsigned long time;
void setup(){
  Serial.begin(9600);Wire.begin(); lcd.begin(16, 2);
  audioChip.initialize(0,true);
  pinMode(12,INPUT);// меню
  pinMode(11,INPUT);// плюс
  pinMode(10,INPUT);// минус
  pinMode(9,INPUT);// IN
  vol = EEPROM.read(0);// vol eeprom 
  bass = EEPROM.read(1)-7;// bass eeprom
  treb = EEPROM.read(3)-7;// treb eeprom
  balans = EEPROM.read(4)-4;// balans eeprom
  in = EEPROM.read(5);// in eeprom
  lcd.createChar(0,a1); lcd.createChar(1,a2);
  audio();
}
void loop(){
    if(digitalRead(12)==HIGH){menu++;time=millis();w1=1;w=1;cl();if(menu>3){menu=0;}}// меню
    if(digitalRead(9)==HIGH){in++;time=millis();w1=1;audio();delay(200);if(in>2){in=0;}}// in
  // индикация громкости + управление кнопками //////////////
   if(menu==0){
   if(digitalRead(11)==HIGH){vol++;w=1;if(vol>62){vol=62;}}// 47 максимальная громкость  
   if(digitalRead(10)==HIGH){vol--;w=1;if(vol<0){vol=0;}}// 0 минимум громкости 
   if(w==1){audio();cl();time=millis();w=0;w1=1;}
  lcd.setCursor(0,0);lcd.print("Volume ");
  lcd.print(-62+vol);lcd.setCursor(11,0);lcd.print("dB K");lcd.print(in);
  vol_d=(vol-40);
   if(vol_d>=0){for(z=0;z<=vol_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}}
   if((vol_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}
   lcd.setCursor(13,1);lcd.print(vol);
 }
 
  // индикация тембр НЧ + управление кнопками //////////////
   if(menu==1){
   if(digitalRead(11)==HIGH){bass++;w=1;if(bass>7){bass=7;}} 
   if(digitalRead(10)==HIGH){bass--;w=1;if(bass<-7){bass=-7;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print("Bass      ");
  lcd.print(bass*2);lcd.setCursor(13,0);lcd.print("dB");
   for(z=-7;z<=bass;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);}
 }
 ///////////////////////////////////////////////////////////
 
   // индикация тембр BЧ + управление кнопками //////////////
   if(menu==2){
   if(digitalRead(11)==HIGH){treb++;w=1;if(treb>7){treb=7;}} 
   if(digitalRead(10)==HIGH){treb--;w=1;if(treb<-7){treb=-7;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print("Trebble   ");
  lcd.print(treb*2);lcd.setCursor(13,0);lcd.print("dB");
   for(z=-7;z<=treb;z++){lcd.setCursor(z+7,1);lcd.write((uint8_t)0);}
 }
 ///////////////////////////////////////////////////////////
 
 // индикация баланс + управление кнопками +\- 4 дБ ///////
   if(menu==3){
   if(digitalRead(11)==HIGH){balans++;w=1;if(balans>4){balans=4;}}
   if(digitalRead(10)==HIGH){balans--;w=1;if(balans<-4){balans=-4;}}
  lcd.setCursor(0,0);
   if(balans>=0){lcd.print("-");}else{lcd.print("+");}
  lcd.print(abs(balans*2));lcd.print(" dB ");
  lcd.print(" <>  ");
   if(balans>=0){lcd.print("+");}else{lcd.print("-");}
  lcd.print(abs(balans*2));lcd.print(" dB ");
  lcd.setCursor(0,1);lcd.print("R");
  lcd.setCursor(15,1);lcd.print("L");
   if(balans<0){lcd.setCursor(balans+7,1);lcd.write((uint8_t)0);}
   if(balans>0){lcd.setCursor(balans+8,1);lcd.write((uint8_t)0);}
   if(balans==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
 }
 /////////////////////////////////////////////////////////////
 
 // запись всех настроек в EEPROM если кнопки + и - не нажимались в течении 10 сек
 // если настройки тембра, баланса и номер входа не менялись в течении 10 сек, переход в рег. Громкости
   if(millis()-time>10000 && w1==1){
     EEPROM.update(0,vol);
     EEPROM.update(4,balans+4);
     EEPROM.update(1,bass+7);
     EEPROM.update(3,treb+7);
     EEPROM.update(5,in);
  menu=0;w1=0;cl();
 }
 
}
void cl(){delay(200);lcd.clear();}
void audio(){  
  audioChip.source(in);//select your source 1...3  вход 3...1
  audioChip.volume(vol);//Vol 0...62 шаг 1 дБ
  audioChip.gain(0);//gain 0...3 шаг 3.75 дБ
  audioChip.bass(bass);//bass -7...+7 шаг 2 дБ
  audioChip.treble(treb);//treble -7...+7 шаг 2 дБ
  audioChip.balance(balans);//-31...+31 программно ограничено до +\-8 дБ
  audioChip.loudness(true);//true or false // тонкомпенсация
}


Тестирование скетча:

PT2313 + энкодер + ИК пульт + анализатор спектра — http://forum.rcl-radio.ru/viewtopic.php?pid=56#p56

Comments

  1. Здраствуйте прошил даним скетчом на екрани только надпись громкость ивсе больше нечего не работает,библиотеку в програму добавил ,когда прошиваем библиотека автоматои подтягуеца в скеч или туда нужно добавлять

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

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