| Ваш IP: 3.236.112.98 | Online(32) - гости: 21, боты: 11 | Загрузка сервера: 1.74 ::::::::::::

Регулятор громкости M62429 (Arduino)

Микросхема M62429 при совместном использовании с Arduino Nano (Uno) позволяет регулировать громкость (стерео) в диапазоне от -83 до 0 дБ, регулировка громкости осуществляется одновременно по двум каналам, так и раздельно. Для управления микросхемой M62429 используется последовательный интерфейс с пакетной передачей данных.

Основные характеристики M62429 (m62429.pdf):

  • Напряжение питания 4.5 … 5.5 В
  • THD = 0.01 % Typ. (V0 = 0.5 Vrms)
  • Разделение каналов 80 дБ
  • Диапазон регулировки громкости от -83 до дБ с шагом 1 дБ
  • Ток потребления 8 мА
  • Максимальное входное напряжение 1.7 Vrms

Выходной сигнал необходимо подавать на нагрузку (наушники или вход усилителя) через разделительный конденсатор 2.2 мкФ.

Функция библиотеки setVolume содержит несколько переменных, значения которых необходимо указать:

setVolume (1,2,3,4,5);

  1. I/O вывод Arduino для CLK
  2. I/O выводы Arduino для DATA
  3. Регулировка громкости раздельная 0, одновременно оба канала 1
  4. Номер канала 1,2 ПК ЛК (1 в 3 пункте, эта функция не активна)
  5. Уровень громкости от 83 (можно указывать -83) до 0 (макс.)

Библиотеки

M62429.zip

MsTimer2.ZIP

Encoder.zip

#include <M62429.h>
void setup(){}
void loop(){
audio();
delay(1000);
}
 
void audio(){
setVolume (11,12,0,0,5); 
setVolume (11,12,0,1,5);
/* pin CLK
   pin DATA
   0 - по одному каналу, 1 - оба вместе
   0 ПК 1 ЛК
   83 ... 0 громкость 83 = -83 дБ */  
}

Ниже показан пример использования M62429 в качестве регулятора громкости. Регулировка громкости происходит при помощи энкодера KY-040, информация выводится на LCD дисплея LCD1602 на базе контроллера HD44780.

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

#include <M62429.h>
#include <MsTimer2.h>
#include <LiquidCrystal.h>
#include <Encoder.h>
#include <EEPROMex.h>
   Encoder myEnc(9, 8);//CLK, DT подключение энкодера
   LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
   byte a1[8]={0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
   byte a2[8]={0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
   byte a3[8]={0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
   int z,z0,z1,vol,vol_d,w,menu,balans;
   unsigned long newPosition,time,oldPosition  = -999;
 
   void to_Timer(){newPosition = myEnc.read()/4;}
 
void setup(){
  lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
  pinMode(A0,INPUT);// КНОПКА ЭНКОДЕРA
  vol = EEPROM.read(0)-83;balans = EEPROM.read(1)-4;
  MsTimer2::set(3, to_Timer);MsTimer2::start();
}
 
void loop(){
    if(analogRead(A0)<900){menu++;cl();myEnc.write(0);time=millis();w=1;if(menu>1){menu=0;}}// меню
 
if(menu==0){ delay(10);
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(vol>0){vol=0;}if(vol<-83){vol=-83;}audio();}
  lcd.setCursor(0,0);lcd.print("Volume  ");
  lcd.print(" ");lcd.print(vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol+48;
   for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}}
   if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}}
 
    if(menu==1){
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    balans=balans+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(balans>4){balans=4;}if(balans<-4){balans=-4;}audio();}
  lcd.setCursor(0,0);
   if(balans>=0){lcd.print("-");}else{lcd.print("+");}
  lcd.print(abs(balans));lcd.print(" dB ");
  lcd.print(" <>  ");
   if(balans>=0){lcd.print("+");}else{lcd.print("-");}
  lcd.print(abs(balans));lcd.print(" dB ");
  lcd.setCursor(0,1);lcd.print("L");
  lcd.setCursor(15,1);lcd.print("R");
   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(millis()-time>10000 && w==1){// сохранение всех настроек в eeprom через 10 сек неактивности
     EEPROM.update(0,vol+83);
     EEPROM.update(1,balans+4);
     w=0;menu=0;lcd.clear();}
}
 
void cl(){delay(300);lcd.clear();}
void audio(){
setVolume (11,12,0,0,vol-4+balans); 
setVolume (11,12,0,1,vol-4-balans);
/* pin CLK
   pin DATA
   0 - по одному каналу, 1 - оба вместе
   0 ПК 1 ЛК
   83 ... 0 громкость 83 = -83 дБ */  
}

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

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

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

  • Регулятор громкости на полевом транзисторе

    Регулятор громкости на полевом транзисторе

    На рисунке показана схема простого регулятора громкости на полевом транзисторе. Регулировка громкости осуществляется подачей отрицательного напряжения от 0 до -3 В на затвор полевого транзистора. Напряжение 0 В на затворе транзистора соответствует минимальному уровню громкости, а напряжение -3 В — максимальной громкости. Источник — https://freecircuitdiagram.com/4656-voltage-controlled-attenuator-volume-control-using-fet/Подробнее...
  • Трансформаторный источник питания с гасящим конденсатором 3 В/0,5 А

    Простой ИП с гасящим конденсатором и доступным для изготовления трансформатором с небольшим числом витков, обеспечивающим гальваническую развязку от сети, а значит, электробезопасность. Трансформатор становится простым в изготовлении, если напряжение на его первичной обмотке ограничить значением около 30 В. Для этого достаточно 600…650 витков сравнительно толстого, удобного при намотке провода. Излишек …Подробнее...
  • Термопары

    Термопары

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

    Сигнализатор перегорания предохранителя

    Сигнализатор перегорания предохранителя предназначен для контроля исправности плавкого предохранителя и наличия напряжения электроосветительной сети. Подключают его параллельно сетевому предохранителю. Если предохранитель исправен, то светодиод HL1 горит постоянно, если перегорел, то светодиод начинает мигать. При отсутствии сетевого напряжения он, естественно, погаснет. На элементах DD1.1 и DD1.2 собран генератор импульсов с частотой …Подробнее...
  • RIAA предусилитель на TDA2320A

    RIAA предусилитель на TDA2320A

    ИМС TDA2320A содержит в своем корпусе два низкочастотных ОУ, с очень низким током потребления, порядка 0,8 мА и работающих в широком диапазоне питающих напряжений от 3 до 36 В. ИМС TDA2320A предназначена для широкого применения в аудиотехнике (усилители воспроизведения, предварительные усилители, эквалайзеры, активные фильтры и т.д.). ИМС TDA2320A может работать …Подробнее...