| Ваш IP: 3.230.1.126 | Online(18) - гости: 12, боты: 5 | Загрузка сервера: 2.58 ::::::::::::

PT2259 2-х канальный регулятор громкости (Arduino)

ИМС PT2259 — 2-х канальный регулятор громкости с микроконтроллерным управлением. Управление аудиопроцессором PT2259 осуществляется при помощи шины I2C. PT2259 имеет низкий уровень собственных шумов и низкий коэффициент нелинейных искажений. Регулировка громкости осуществляется по двум каналам одновременно или поканально, диапазон регулировки громкости от -79 до 0 дБ.

Основные характеристики PT2259:

  • Напряжение питания однополярное от 4 до 12 В, 9 В — рекомендуемое
  • Ток потребления 2,5 мА (9В)
  • Диапазон регулировки от -79 до 0 дБ
  • Максимальное выходное напряжение 2.5 Vrms
  • Коэффициент нелинейных искажений 0.003 % (Vout= 200mVrms, f=1kHz, Vol.Att.=0dB, A-weight Rload = 50 KΩ )
  • Отношение сигнал/шум 120 дБ
  • Режим MUTE, уровень -95 дБ
  • Входное сопротивление 33 кОм

За управление работой PT2259 отвечают 8 регистров:

Как видно из таблицы, имеется регулировка звука одновременно по двум каналам, так и раздельная, при этом уровень громкости изменяется при помощи двух регистров, для единиц и десятков дБ.

Два последних регистра это регистр сброса и регистр управления функцией MUTE.

Производитель рекомендует перед отправкой данных о громкости производить сброс аудиопроцессора (очистка регистров):

Далее следует отправка данных в регистры управления громкостью:

На платформе Arduino можно сделать простой регулятор громкости, управление громкостью осуществляется при помощи энкодера, а информация от текущем уровне громкости выводится на дисплей TM1637 (часовой с двумя точками).

энкодер ky-040

При нажатии на кнопку энкодера активируется режим MUTE.

#include <Wire.h> // Входит в состав Arduino IDE
#include <Encoder.h> // https://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h> // Входит в состав Arduino IDE
#include <MsTimer2.h> // https://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <PT2259.h> // https://github.com/liman324/PT2259.git
#include <STM32_TM1637.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=452&download=1
 
 STM32_TM1637 tm(2,3);// CLK, DIO
 PT2259 pt;
 Encoder myEnc(9, 8);// DT, CLK
 
 int vol,w,w1,mute;
 unsigned long time,oldPosition  = -999,newPosition;   
 
void setup(){
  pinMode(10,INPUT);  // МЕНЮ КНОПКА SW энкодера
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
  tm.brig(7); // ЯРКОСТЬ 0...7
  tm.print_float(0,0,  0b01000000,0b01110011,0b01111000,0b01000000);
  delay(2000);
  tm.print_float(2259,0,  0,0,0,0);
  delay(2000);
  vol = EEPROM.read(0);
  audio();
  }
 
void loop(){
////////// VOLUME //////////////
 if(newPosition != oldPosition&&mute==0){oldPosition = newPosition;vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;vol_func();} 
 if(w==1){w=0;audio();tm.print_float(vol,1,  0b00001000,0,0,0b00001000);}
 
///////// MUTE //////////// 
  if(digitalRead(10)==LOW&&mute==0){mute=1; audio();tm.print_float(0,0,  0b01000000,0b01000000,0b01000000,0b01000000);delay(200);}
  if(digitalRead(10)==LOW&&mute==1){mute=0; audio();w=1;delay(200);}
 
///////// EEPROM /////////////
   if(millis()-time>5000 && w1==1){w1=0;EEPROM.update(0,vol);}
   delay(10);
}// loop
 
void audio(){
 pt.setVol_ch2(mute, vol); // mute, vol
// mute on  === 1
// mute off === 0
// vol === -79...0 dB === int 0...79  
// channel-by-channel adjustment
// pt.setVol_left(0, 79);
// pt.setVol_right(0, 79);
  } 
 
void to_Timer(){newPosition = myEnc.read()/4;} 
void vol_func(){if(vol<0){vol=0;}if(vol>79){vol=79;}}

Библиотека — http://forum.rcl-radio.ru/viewtopic.php?id=169

PT2259.pdf


Следующий скетч аналогичен предыдущему, но в нем вместо энкодера используются три кнопки.

Подключение кнопок (цифровые входы D10 — mute, D6 — громкость+, D7 — громкость- )

#include <Wire.h> // Входит в состав Arduino IDE
#include <EEPROM.h> // Входит в состав Arduino IDE
#include <PT2259.h> // https://github.com/liman324/PT2259.git
#include <STM32_TM1637.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=452&download=1
 
 STM32_TM1637 tm(2,3);// CLK, DIO
 PT2259 pt;
 
 
 int vol,w=1,w1,mute;
 unsigned long time;
 
void setup(){
  pinMode(10,INPUT_PULLUP);  // mute
  pinMode(6,INPUT_PULLUP);  // +
  pinMode(7,INPUT_PULLUP);  // -
 
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
  tm.brig(7); // ЯРКОСТЬ 0...7
  tm.print_float(0,0,  0b01000000,0b01110011,0b01111000,0b01000000);
  delay(2000);
  tm.print_float(2259,0,  0,0,0,0);
  delay(2000);
  vol = EEPROM.read(0);
  audio();
  }
 
void loop(){
////////// VOLUME //////////////
 if(digitalRead(6)==LOW&&mute==0){vol++;delay(300);time=millis();w=1;w1=1;vol_func();} 
 if(digitalRead(7)==LOW&&mute==0){vol--;delay(300);time=millis();w=1;w1=1;vol_func();} 
 if(w==1){w=0;audio();tm.print_float(vol,1,  0b00001000,0,0,0b00001000);}
 
///////// MUTE //////////// 
  if(digitalRead(10)==LOW&&mute==0){mute=1; audio();tm.print_float(0,0,  0b01000000,0b01000000,0b01000000,0b01000000);delay(500);}
  if(digitalRead(10)==LOW&&mute==1){mute=0; audio();w=1;delay(500);}
 
///////// EEPROM /////////////
   if(millis()-time>5000 && w1==1){w1=0;EEPROM.update(0,vol);}
   delay(10);
}// loop
 
void audio(){
 pt.setVol_ch2(mute, vol); // mute, vol
// mute on  === 1
// mute off === 0
// vol === -79...0 dB === int 0...79  
// channel-by-channel adjustment
// pt.setVol_left(0, 79);
// pt.setVol_right(0, 79);
  } 
 
void vol_func(){if(vol<0){vol=0;}if(vol>79){vol=79;}}

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

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

Случайные статьи

  • Радиомикрофон

    Схема радиомикрофона показана на рисунке. Радиомикрофон работает на частоте 87,9 МГц и представляет собой автогенератор с емкостной обратной связью и дополнительной емкостью С4 в индуктивной ветви (схема Клаппа). Дополнительная емкость необходима, во-первых, для развязки по постоянному току цепей питания и смещения. Во2вторых, она обеспечивает дополнительную степень свободы для получения оптимального …Подробнее...
  • HEF4051B — увеличение количества аналоговых входов Arduino

    HEF4051B — увеличение количества аналоговых входов Arduino

    ИМС HEF4051B (4051) представляет собой 8 канальный аналоговый CMOS мультиплексор/демультиплексор. HEF4051B можно применить для увеличения числа аналоговых входов Arduino, для этого будет задействован одни аналоговый вход и три цифровых входа Arduino. #include <HEF4051.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=748&download=1 HEF4051 hef(A0,2,3,4);// analog_input A0, D2,D3,D4 void setup() {  Serial.begin(9600); } void loop() {  for(byte i=0;i<8;i++){ …Подробнее...
  • Два простых УМЗЧ

    Два простых УМЗЧ

    Характеристики Номинальная чувствительность 0,35В Номинальная выходная мощность при нагрузке 4 Ом — 10Вт Диапазон воспроизводимых частот от 40 до 20000 Гц Скорость нарастания выходного напряжения 25В\мкс Коэф. нелинейных искажений по всем диапазоне 0,35% Напряжение питания 11…16В Первый каскад на VT1 работает в усилителе напряжения, а остальные VT2-VT5 образуют эмиттерный повторитель …Подробнее...
  • Однофазная мостовая схема выпрямления

    Однофазная мостовая схема выпрямления

    Схема мостового выпрямителя показана на рисунке а), которая состоит из двухобмоточного трансформатора, четырех диодов включенных по схеме моста и нагрузки выпрямителей Rн. К одной диагонали моста подключена вторичная обмотка трансформатора, к другой нагрузка. В схеме четыре диода соединены так, что напряжение вторичной обмотки трансформатора подается на нагрузку в течении одного …Подробнее...
  • Регулятор температуры воды

    Регулятор предназначен для регулировки температуры воды в аквариуме или в другой емкости в диапазоне 10-40°С. В основе уст-ва интегральный компаратор напряжения К553СА3. Эта микросхема имеет мощный выход, достаточный для подключения реле. Принцип действия схемы: На прямом входе (вывод3) компаратора создается образцовое напряжение при помощи делителя R1\R2. Это напряжение можно менять …Подробнее...