1

Тема: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Библиотеки:
https://rcl-radio.ru/wp-content/uploads … 8544-2.zip
https://rcl-radio.ru/wp-content/uploads … Timer2.zip
https://rcl-radio.ru/wp-content/uploads … ncoder.zip
https://rcl-radio.ru/wp-content/uploads … 7313-1.zip

http://forum.rcl-radio.ru/uploads/images/2019/12/94b79fab49347941da5e5aa8d6a9ae8f.png

#include <Wire.h> 
#include <SPI.h>
#include <PCD8544.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <Encoder.h>
#include <TDA7313.h>
  TDA7313 tda;
  Encoder myEnc(9, 8);//CLK, DT подключение энкодера
  PCD8544 lcd; // RST,CE,DC,DIN,CLK   VCC,BL,GND (3,4,5,6,7   +3.3V,200 OM +3.3V, GND)
 static const byte asd[] = { B00111100,B00000000,B00000000,B00000000,B00000000 };
 static const byte asd1[] = { B00111100,B00111100,B00111100,B0000000,B11111111 };
 static const byte asd2[] = { B00111100,B00111100,B00111100,B0000000,B00111100 };
   unsigned long newPosition,time,oldPosition  = -999;
   int i,w=1,w1=1,w2=1,menu,vol,lr,rr,lf,rf,in,loud,gain,bass,treb,eeprom;

void setup() {
  Serial.begin(9600);Wire.begin();
  lcd.begin(84, 48); 
  lcd.setContrast(120);//  контрастность 0-127
   pinMode(10,INPUT);// SW кнопка энкодера
  lcd.createChar(0, asd);  lcd.createChar(1, asd1);lcd.createChar(2, asd2);
  MsTimer2::set(1, to_Timer);MsTimer2::start();
    vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;in = EEPROM.read(3);
    loud = EEPROM.read(7);lr = EEPROM.read(8);rr = EEPROM.read(9);lf = EEPROM.read(10);rf = EEPROM.read(11);
   audio();
}

void loop() {
  if(digitalRead(10)==LOW){menu++;w=1;w1=1;w2=1;myEnc.write(0);time=millis();eeprom=1;delay(200);if(menu>8){menu=0;}}
 ////////////////////////////// vol ///////////////////////////////////////////////////////
 if(menu==0){
   if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
    }
    if(w==1){w=0;
    lcd.setCursor(0,0);lcd.print("}P");
     for(i=15;i<68;i++){lcd.setCursor(i,0);lcd.write(0);}
    lcd.setCursor(vol/1.3+15,0);if(menu==0){lcd.write(1);}else{lcd.write(2);}lcd.setCursor(72,0);if(vol<10){lcd.print(" ");}lcd.print(vol);
  }
///////////////////////////////////////// bass ///////////////////////////////////
 if(menu==1){
   if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w1=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();} 
    }
    if(w1==1){w1=0;
    lcd.setCursor(0,1);lcd.print("H'");            
    for(i=8;i<60;i=i+1){lcd.setCursor(i+7,1);lcd.write(0);}
    lcd.setCursor(bass*3+37,1);if(menu==1){lcd.write(1);}else{lcd.write(2);}lcd.setCursor(72,1);if(bass<10&&bass>=0){lcd.print(" ");}lcd.print(bass);
  }
//////////////////////////////////////////// treble /////////////////////////////
  if(menu==2){
   if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();} 
    }
    if(w2==1){w2=0;
    lcd.setCursor(0,2);lcd.print("B'");            
    for(i=8;i<60;i=i+1){lcd.setCursor(i+7,2);lcd.write(0);}
    lcd.setCursor(treb*3+37,2);if(menu==2){lcd.write(1);}else{lcd.write(2);}lcd.setCursor(72,2);if(treb<10&&treb>=0){lcd.print(" ");}lcd.print(treb);
  }
/////////////////////// att LR //////////////////////////////////////////////////////
  if(menu==3){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    lr=lr+newPosition;myEnc.write(0);newPosition=0;time=millis();if(lr>31){lr=31;}if(lr<0){lr=0;}audio();} 
    lcd.setCursor(0,3);lcd.print("+LR ");lcd.print(lr);lcd.print(" ");}else{lcd.setCursor(0,3);lcd.print(" LR ");lcd.print(lr);lcd.print(" ");}
/////////////////////// att RR //////////////////////////////////////////////////////
  if(menu==4){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    rr=rr+newPosition;myEnc.write(0);newPosition=0;time=millis();if(rr>31){rr=31;}if(rr<0){rr=0;}audio();} 
    lcd.setCursor(44,3);lcd.print("+RR ");lcd.print(rr);lcd.print(" ");}else{lcd.setCursor(44,3);lcd.print(" RR ");lcd.print(rr);lcd.print(" ");}
/////////////////////// att LF //////////////////////////////////////////////////////
  if(menu==5){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    lf=lf+newPosition;myEnc.write(0);newPosition=0;time=millis();if(lf>31){lf=31;}if(lf<0){lf=0;}audio();} 
    lcd.setCursor(0,4);lcd.print("+LF ");lcd.print(lf);lcd.print(" ");}else{lcd.setCursor(0,4);lcd.print(" LF ");lcd.print(lf);lcd.print(" ");} 
/////////////////////// att RF //////////////////////////////////////////////////////
  if(menu==6){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    rf=rf+newPosition;myEnc.write(0);newPosition=0;time=millis();if(rf>31){rf=31;}if(rf<0){rf=0;}audio();} 
    lcd.setCursor(44,4);lcd.print("+RF ");lcd.print(rf);lcd.print(" ");}else{lcd.setCursor(44,4);lcd.print(" RF ");lcd.print(rf);lcd.print(" ");}     
///////////////////////IN //////////////////////////////////////////////////////
  if(menu==7){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    in=in+newPosition;myEnc.write(0);newPosition=0;time=millis();if(in>2){in=2;}if(in<0){in=0;}audio();} 
    lcd.setCursor(0,5);lcd.print("+IN ");lcd.print(in+1);lcd.print(" ");}else{lcd.setCursor(0,5);lcd.print(" IN ");lcd.print(in+1);lcd.print(" ");}
/////////////////////// LOUDNESS //////////////////////////////////////////////////////
  if(menu==8){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    loud=loud+newPosition;myEnc.write(0);newPosition=0;time=millis();if(loud>1){loud=1;}if(loud<0){loud=0;}audio();} 
    lcd.setCursor(44,5);lcd.print("+LD ");lcd.print(loud);lcd.print(" ");}else{lcd.setCursor(44,5);lcd.print(" LD ");lcd.print(loud);lcd.print(" ");}               
///////////////////////////////////////////////////////////////////////////////////////

if(millis()-time>10000 && eeprom==1){
     EEPROM.update(0,vol);
     EEPROM.update(1,bass+7);
     EEPROM.update(2,treb+7);
     EEPROM.update(3,in);
     EEPROM.update(7,loud);
     EEPROM.update(8,lr);EEPROM.update(9,rr);EEPROM.update(10,lf);EEPROM.update(11,rf);
     menu=0;eeprom=0;w=1;w1=1;w2=1;}
  }

void cl(){delay(300);lcd.clear();}
void audio(){
  tda.setVolume(vol); // громкость 0...63
  tda.setAttLR(lr);   // аттенюатор LR 0...31
  tda.setAttRR(rr);   // аттенюатор RR 0...31
  tda.setAttLF(lf);   // аттенюатор LF 0...31
  tda.setAttRF(rf);   // аттенюатор RF 0...31
  tda.setSwitch(in,loud,3); // вход 0...2, тонкомпенсация 1 вкл 0 выкл, усиление 0...3
  tda.setBass(bass);    // тембр НЧ -7...+7
  tda.setTreble(treb);  // тембр ВЧ -7...+7
}

void to_Timer(){newPosition = myEnc.read()/4;}

2

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

картика есть, курсор двигается, контрастность у меня нормальная на 60

3

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

аудиопроцессор реагирует на управление?

4

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

1.реагирует, но почти всегда надо в каждом пункте изменить значение хотя бы на 1, чтобы на следующий пунк перейти. Иначе на громкость выбрасывает. т.е. просто нажимая по всему меню не пройдешь.
2. вход *0* как то странно, мб. их все таки обозначить как 1,2,3

5

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

bavbav пишет:

1.реагирует, но почти всегда надо в каждом пункте изменить значение хотя бы на 1, чтобы на следующий пунк перейти. Иначе на громкость выбрасывает. т.е. просто нажимая по всему меню не пройдешь.
2. вход *0* как то странно, мб. их все таки обозначить как 1,2,3

Первый пункт немного не понял, как понять громкость выбрасывает?

6

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Обновите прошивку, я сделал правки в коде.

7

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

всё равно, не так сильно, как в прошлый раз. но по меню полностью не пройтись. курсор на регулировку громкости вылетает. если изменю значение на 1, на следующий пункт стабильно перейду. и так по всему меню.

8

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Я собирал эту схему, только без TDA у меня все работает. Проверьте подключение энкодера, кнопка sw инверсная, у Вас должны быть подтягивающие резисторы на контактах CLK, DT и SW 10кОм на +5В.

9

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

п.с. надо подождать что бы первый раз произошла запись в еепром, потом все норма

10

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Я забыл добавить код сброса EEPROM, в памяти были данные не совместимые с аудиопроцессором, как правило достаточно просто пройтись по всем параметрам и подождать 10 сек для записи новых параметров в EEPROM.

Протестируйте все параметры, если все нормально, то можно добавлять пульт.

11

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

кстати, кажется и в основной версии tda7313 после прошивки приходилось по всем параметрам ходить, что бы нормально заработало

12

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Это да, у меня плата ардуино уже замученная и проблем с памятью не возникало, в последующих проектах я стал вставлять код очистки памяти. Если плата новая то вся память забита цифрами 255.

13

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

теперь только на регулировке громкости все равно надо изменить, что бы перейти дальше. и редко но проскакивает переход курсора на громкость из других параметров.
tda реагирует на изменения

14

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Что-то не так с энкодером, у меня регулировки происходили нормально, TDA ни как не может влиять на экран и органы управления. Проверьте подключение.
Пока я не понимаю, что не так.

15

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

При нажатии кнопки энкодера меню должно переключать по кругу, после LOUDNESS переходить в ГРОМКОСТЬ

16

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

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

17

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Обновите скетч, возможно я исправил проблему.

18

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

теперь норма сразу.
еще момент - до переключение входов долго добираться, м.б. отдельной кнопкой?

19

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Можно отдельной кнопкой, из меню убирать выбор входа?

Завтра тогда доделаю и пульт заодно. Я обычно делаю кнопки пульта: вверх вниз - перемещение по меню, право влево - имитация поворота ручки энкодера, кнопка IN. По желанию можно сделать кнопки быстрого доступа, например 1 кнопка вызова меню громкость, 2 - тембр НЧ и т.д.

Если надо добавить еще какие то кнопки пульта или изменить алгоритм их работы то пишите.

20

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

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

21

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

У экрана 6 строк, две нижние будут пустые?

22

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

м.б. попробовать верх и низ пустые, индикация в центре. как оно будет смотреться?

включил проект, может тонкомпенсацию оставить как было.

23

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

Потребуется большая правка кода.

выбор входа наверное можно и оставить или что бы индикация была. надо же знать какой вход работает.

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

24

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

bavbav пишет:

м.б. попробовать верх и низ пустые, индикация в центре. как оно будет смотреться?

включил проект, может тонкомпенсацию оставить как было.

Можно аттенюаторы и тонкомпенсацию убрать на второй экран, это редко регулируемые параметры.

25

Re: Аудиопроцессор TDA7313 + LCD дисплей 84×48 Nokia 5110

ок,