| Ваш IP: 54.81.220.239 | Online(33) - гости: 18, боты: 15 | Загрузка сервера: 1.31 ::::::::::::


PT2257 — цифровой регулятор громкости (Arduino)

PT2257 2-х канальный I2C цифровой контроллер громкости, разработан для использования в HI-FI аппаратуре и качественных автомобильных аудиосистемах, обладает низким уровнем шумов и искажений.

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

  • Напряжение питания от 3 до 9 В
  • Регулировка громкости от -79 до 0 дБ
  • Раздельная для каждого канала регулировка громкости
  • Режим MUTE
  • КНИ при выходном напряжении 200 мВ не превышает 0,003% при входном напряжении 2 В КНИ не более 0,07%

Библиотека https://github.com/liman324/PT2257/archive/master.zip или PT2257.zip

Тестовый скетч

#include <Wire.h>
#include <PT2257.h>
PT2257 rt;
 
void setup() {
  Wire.begin();
}
 
void loop() {
  rt.setLeft(33); // int 0...79 
  rt.setRight(33);// int 0...79
  rt.setMute(0);  // int 0...1
  delay(1000);
}

Тестовый скетч позволяет задавать громкость для каждого канала от 0 (мин) до 79 (макс), поддерживает режим MUTE.

PT2257.pdf


На основе PT2257 и Arduino можно сделать простой регулятор громкости и баланса, регулировка будет осуществляться при помощи энкодера, а информация будет выводится на LCD дисплей 1602. Так же необходимо добавить кнопку MUTE.

Для выбора регулировки между громкостью и баланса необходимо нажать кнопку энкодера. Значения установленной громкости и баланса сохраняются в энергонезависимой памяти.

#include <Wire.h>
#include <EEPROMex.h>
#include <PT2257.h>
#include <LiquidCrystal.h>
 PT2257 rt;
#include <Encoder.h>
 Encoder myEnc(10, 11);//CLK, DT
 LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
int menu,vol,vol_ram,vol_d,z,balans,balans_ram,balans_d,z1;
byte w,mute;
long oldPosition  = -999;
unsigned long time,time1;
  byte a1[8]={0b00000,0b00000,0b11011,0b11011,0b11011,0b11011,0b00000,0b00000};
  byte a2[8]={0b00000,0b00000,0b11000,0b11000,0b11000,0b11000,0b00000,0b00000};
  byte a3[8]={0b00000,0b00000,0b00000,0b11011,0b11011,0b00000,0b00000,0b00000};
  byte a4[8]={0b00000,0b00000,0b00000,0b11000,0b11000,0b00000,0b00000,0b00000};
void setup() {
  Wire.begin();Serial.begin(9600);lcd.begin(16, 2);
  pinMode(12,INPUT);// кнопка энкодера
  pinMode(A0,INPUT);// кнопка mute
   lcd.createChar(0,a1); lcd.createChar(1,a2);lcd.createChar(2,a3); lcd.createChar(3,a4);
   vol = EEPROM.read(0);// vol eeprom
   balans = EEPROM.read(1)-7;
   vol_ram=vol;balans_ram=balans;
   delay(1000);
   audio();
}
 
void loop() {  
    if(digitalRead(12)==LOW){menu++;myEnc.write(0);vol_ram=vol;balans_ram=balans;delay(300);if(menu>1||menu<0){menu=0;}}
/////////////////////////////////////// vol /////////////////////////////////////
if(menu==0){    
    long newPosition = myEnc.read()/4+vol_ram;
    if (newPosition != oldPosition) {
    oldPosition = newPosition;vol=newPosition;    
    audio();time = millis();w=1;
    if(vol>79){myEnc.write(0);vol_ram=79;}
    if(vol<0){myEnc.write(0);vol_ram=0;}   
}}
 
// индикация баланс + управление кнопками +\- 4 дБ ///////
 if(menu==1){    
    long newPosition = myEnc.read()/4+balans_ram;
    if (newPosition != oldPosition) {
    oldPosition = newPosition;balans=newPosition;    
    audio();time = millis();w=1;
    if(balans>7){myEnc.write(0);balans_ram=7;}
    if(balans<-7){myEnc.write(0);balans_ram=-7;}   
}}
 /////////////////////////////////////////////////////////////
   if(millis()-time1>100){lcd.clear();vol_d=vol/3;
   if(vol_d>=0){for(z=0;z<=vol_d;z++){lcd.setCursor(z/2,0);if(menu==0){lcd.write((uint8_t)0);}else{lcd.write((uint8_t)2);}}}
   if((vol_d)%2==0){lcd.setCursor(z/2,0);if(menu==0){lcd.write((uint8_t)1);}else{lcd.write((uint8_t)3);}}
   lcd.setCursor(14,0);lcd.print(vol);time1=millis();
 
   if(balans<0){lcd.setCursor(balans+7,1);if(menu==1){lcd.write((uint8_t)0);}else{lcd.write((uint8_t)2);}}
   if(balans>0){lcd.setCursor(balans+8,1);if(menu==1){lcd.write((uint8_t)0);}else{lcd.write((uint8_t)2);}}
   if(balans==0){lcd.setCursor(7,1);if(menu==1){lcd.write((uint8_t)0);}else{lcd.write((uint8_t)2);}lcd.setCursor(8,1);
   if(menu==1){lcd.write((uint8_t)0);}else{lcd.write((uint8_t)2);}}else{lcd.setCursor(7,1);if(balans>0){lcd.print("+");}lcd.print(balans);}
   }
///////////// mute ////////////////////////////////
  if(analogRead(A1)>900){mute++;delay(300);if(mute>1){mute=0;}audio();}
///////////// eeprom //////////////////////////////
 if(millis()-time>10000 && w==1){// запись всех настроек в EEPROM через 60 сек неактивности
     EEPROM.update(0,vol);EEPROM.update(1,balans+7); w=0;}
}
 
void audio(){
  rt.setLeft(vol-8+balans); // int 0...79 
  rt.setRight(vol-8-balans);// int 0...79
  rt.setMute(mute);  // int 0...1
}

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

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

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

  • Маркировка конденсаторов

    Маркировка конденсаторов

    Маркировка тремя цифрами. В этом случае первые две цифры определяют мантиссу, а последняя — показатель степени по основанию 10, для получения номинала в пикофарадах. Последняя цифра «9» обозначает показатель степени «-1». Если первая цифра «0», то емкость менее 1пФ (010 = 1.0пФ). Маркировка четырьмя цифрами. Эта маркировка аналогична описанной выше, …Подробнее...
  • Широкополосной малошумящий усилитель диапазона 20…600МГц

    На рис.1 показана принципиальная схема широкополосного малошумящего усилителя, в котором изменена традиционная последовательность включения корректирующих цепей и транзисторов. На рис.2 показан чертеж печатной платы, на рис.3 – расположение элементов, а на рис.4 – фотография внешнего вида усилителя. Технические характеристики усилителя Полоса рабочих частот………………………………20…600 МГц Неравномерность амплитудно-частотной характеристики………………………………………………..±1 дБ Коэффициент усиления …Подробнее...
  • Простой дискретный стабилизатор постоянного напряжения

    Простой дискретный стабилизатор постоянного напряжения

    На рисунке показана схема простого дискретного регулятора постоянного напряжения с диапазоном от 3 до 12В с шагом 3В. Схема достаточно проста, содержит малое кол-во элементов в настройке не нуждается. Выходное напряжение стабилизатора зависит от кол-ва стабилитронов включенных последовательно к базе транзистора VT1. Источник — http://www.eleccircuit.com/simple-step-down-dc-converter-multi-voltage/Подробнее...
  • Микрофонный предусилитель

    Микрофонный предусилитель

    Микрофонный предусилитель состоит из 2-х каналов (VR1 необходим спаренный на два канала). Питание усилителя от батареи, что дает нам избежать наводок от сетевого источника питания и значительно упрощает схему. Ток потребления схемы около 2 мА. Схема основана на малошумящих транзисторах, усилитель охвачен ООС по постоянному напряжению которое осуществляется через R6. …Подробнее...
  • Простой измеритель емкости(от 100пФ до 1мкФ)

    На рисунке представлена схема простого стрелочного измерителя емкости, который позволяет относительно точно измерить емкость конденсаторов от 100пФ до 1 мкФ. В измерителе емкости 4-е предела: 100…1000пФ, 1000пФ…0,01мкФ(10000пФ), 0,01…0,1мкФ, 0,1…1,0мкФ. Главное достоинство измерителя — простота конструкции, низкая себестоимость, относительно низкая погрешность измерения. На DD1.1 — DD1.3 собран опорный генератор на 100кГц. …Подробнее...