Микросхема 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);
- I/O вывод Arduino для CLK
- I/O выводы Arduino для DATA
- Регулировка громкости раздельная 0, одновременно оба канала 1
- Номер канала 1,2 ПК ЛК (1 в 3 пункте, эта функция не активна)
- Уровень громкости от 83 (можно указывать -83) до 0 (макс.)
Библиотеки
#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 дБ */ }
Здравствуйте. Не могу скомпилировать, ругается на setVolume (11,12,0,0,vol-4+balans);
} наверное скобку в самом низу не скопировали
Скобку не скопировал вначале. Теперь скобка есть, ошибка та же
Arduino: 1.8.19 (Windows 10), Плата:»Arduino Nano, ATmega328P (Old Bootloader)»
C:\Users\User\Documents\Arduino\____________________M62429__Arduino_\____________________M62429__Arduino_.ino: In function ‘void audio()’:
____________________M62429__Arduino_:62:1: error: ‘setVolume’ was not declared in this scope
setVolume (11,12,0,0,vol-4+balans);
^~~~~~~~~
exit status 1
‘setVolume’ was not declared in this scope
Вот сообщение об ошибке
Всё разобрался. Удалил библиотеку М62429. Потом установил заново, подключил и всё заработало. Спасибо