| Ваш IP: 3.236.132.132 | Online(35) - гости: 27, боты: 8 | Загрузка сервера: 1.02 ::::::::::::


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;}}

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

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

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

  • Удвоитель напряжения на микросхеме NE555

    Описание. Схема простейшего удвоителя напряжения использованием микросхемы NE555 показана на рисунке. Здесь IC NE555 подключен в схеме как нестабильный мультивибратор с частотой генерации около 9KHz. Базы двух транзисторов (Q1 и Q2) подключены напрямую к выходу мультивибратора (контакт 3). При выходе сигнала из мультивибратора в первый момент Q1 будет OFF и …Подробнее...
  • Преобразователь =12В\ 220В

    Преобразователь =12В\ 220В

    Схема преобразователя состоит из 3-х узлов: задающего мультивибратора, двухтактного транзисторного ключевого усилителя и повышающего трансформатора. Мультивибратор выполнен на микросхеме D1(D1.1  D1.2). Его частота зависит от R1 C1. На выходе мультивибратора включен инвертор на D1.4 который создает противофазные сигналы поступающие на базы VT1 VT2. Затем следует двухтактный усилитель на VT3 VT4 …Подробнее...
  • Термопары

    Термопары

    Термопара (термоэлектрический преобразователь) — устройство, применяемое для измерения температуры в промышленности, научных исследованиях, медицине, в системах автоматики. Принцип действия основан на эффекте Зеебека или, иначе, термоэлектрическом эффекте. Между соединёнными проводниками имеется контактная разность потенциалов; если стыки связанных в кольцо проводников находятся при одинаковой температуре, сумма таких разностей потенциалов равна нулю. …Подробнее...
  • TDA7499 — УМЗЧ 2х6 Вт

    TDA7499 — УМЗЧ 2х6 Вт

    TDA7499 — усилитель мощности звуковой частоты (класс АВ), с выходной мощность 6 Вт на канал (стерео). Усилитель относиться к классу Hi-Fi аппаратуры. В усилителе имеются функции STANDBY и MUTE, беззвучное включение и выключение (отсутствие щелчков), защита выхода от КЗ на землю, тепловая защита и защита от перегрузки. ИМС TDA7499 может …Подробнее...
  • Логический пробник для ТТЛ и ТТЛШ

    Схема отличается высокой точностью и возможностью контроля логических уровней «1» и «0», К3 и «Не определено». При неподключенном входе пробника светится светодиод «Не определено». Резисторы R1.R4 желательно применить с допуском 1%. ОУ любые, со своими частотными коррекциями, важно только, чтобы выходной ток был не менее 15 мА и Rвх не …Подробнее...