101

Re: PT2323+TDA7448

liman324 пишет:

Хорошо, как все посылки получите пишите, открою новую тему на форуме и начнем работу.

Добрый вечер! Заказал Arduino и экран, но у них там новый год, отгрузят тока на следующей неделе. Может пока начнем подготовительную работу? Откроете тему, я пока накидаю вопросиков?))) Спасибо

102

Re: PT2323+TDA7448

Господа приветствую! Такой єкран могу использовать? https://www.aliexpress.com/item/3282142 … 1802uYWNT0

103

Re: PT2323+TDA7448

Нет.
lcd1602

104

Re: PT2323+TDA7448

nora11 пишет:
liman324 пишет:

Хорошо, как все посылки получите пишите, открою новую тему на форуме и начнем работу.

Добрый вечер! Заказал Arduino и экран, но у них там новый год, отгрузят тока на следующей неделе. Может пока начнем подготовительную работу? Откроете тему, я пока накидаю вопросиков?))) Спасибо

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

105

Re: PT2323+TDA7448

http://forum.rcl-radio.ru/uploads/images/2022/03/bc36ac7b4227fea933b37bb5e02db993.jpg

Здравствуйте!

Перед началом Вам необходимо выпаять экран и контроллер, у Вас на плате присутствуют кнопки управления, поэтому будем восстанавливать весь прежний функционал с использованием этих кнопок.
Нам понадобятся 15 пинов ардуино под кнопки и энкодер, 2 пина под шину I2C, на ней будет экран (он должен быть с платой I2C) и аудиопроцессоры.

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

Библиотеки:
http://forum.rcl-radio.ru/misc.php?acti … download=1
http://forum.rcl-radio.ru/misc.php?acti … download=1

После загрузки скетча должен появиться звук:

#include <Wire.h>
#include <PT2323.h>
#include <PT2322.h>

 PT2323 pt0; 
 PT2322 pt1;

 int mute = 0;
 int in = 0; // 0...4
 int ddd = 1; // 0...1
 int bass = 0; // -7...7
 int mid = 0; // -7...7
 int treb = 0; // -7...7
 int vol = 50; // 0...79

 void setup(){
  Wire.begin();delay(500);
  audio1();audio2();
  }

 void loop(){

} 

 void audio1(){
  pt0.setInput(in); 
  pt0.setMute(0,0,0,0,0,0,mute); 
  pt0.setFeature(1,1); 
}
 
void audio2(){
  pt1.setFront_lk_att(abs(0));// att front L
  pt1.setFront_rk_att(abs(0));// att front R
  pt1.setCenter_att(abs(0));  // att center
  pt1.setRear_lk_att(abs(0)); // att rear L
  pt1.setRear_rk_att(abs(0)); // att rear R
  pt1.setSub_att(abs(0));     // att sub
  pt1.setFunc(0,ddd,0); // mute,3d,тембр on/off
  pt1.setBass(bass);            // BASS    -14...0...14 dB (int -7...0...7)
  pt1.setMiddle(mid);          // MIDDLE  -14...0...14 dB (int -7...0...7)
  pt1.setTreble(treb);          // TREBLE  -14...0...14 dB (int -7...0...7)
  pt1.setVol(vol); // 0...79
}

106

Re: PT2323+TDA7448

Пины ардуино которые будем использовать
0
1
2
3
4
5
6
7
8
9
10
11
12
13
A0


и шина I2C это А4 и А5

остаются свододные 3 пина А1 А2 А3

Если будете использовать регулируемую яркость свечения подсветки экрана (например неполное затемнение  в режиме STANDBY) то надо освободить для него пин 6.

107

Re: PT2323+TDA7448

Добрый вечер! Если вы не против, я изложу свои хотелки и то ,что хотелось бы получить в итоге. Это немного облегчит задачу и вам и мне.
1. Использовать все кнопки нет необходимости. Из опыта эксплуатации системы, я практически ими не пользовался, оставим только кнопки Standby(1),Mute(2),Input(3).
Выход звука всегда в режиме 5-1, другие никогда не использовал,
эквалайзер всегда в режиме DISCO, он дает наиболее хороший звук. Этот режим надо сделать по умолчанию при включении.
Режим 3D вообще ни о чем.
Функционал всех кнопок сохраним полностью с пульта.
2.Если возможно, можете выложить схему подключения ИК, энкодера, с какой ноги режим mute.
3. В режиме STANDBY никакого затемнения использовать не планирую, просто полное выключение дисплея.
Возможно потом, когда основной функционал запустим, тогда уже всякие украшательства буду делать)).
У меня вообще есть мысль, родную плату управления сохранить, мало ли что....поэтому подскажите, какой ИК-датчик лучше подойдет.
Пока вроде бы все. На выходных постараюсь запустить тест и отпишусь как реализован режим MUTE.

108

Re: PT2323+TDA7448

ИК-датчик - любой
Энкодер у Вас какой будет? С кнопкой или без?
У Вас микросхема УМЗЧ имеет режим STANDBY?

http://forum.rcl-radio.ru/uploads/images/2022/03/60dfaedc0fb68c25f7636841c5506c69.png

Энкодер если в виде модуля то резисторы 10 кОм ставить не надо.

109

Re: PT2323+TDA7448

с какой ноги режим mute

mute будет реализован программно

110

Re: PT2323+TDA7448

http://forum.rcl-radio.ru/uploads/images/2022/03/d267b5a609c445c4ef49caf57139a782.png

111 (2022-03-19 00:01:15 отредактировано nora11)

Re: PT2323+TDA7448

liman324 пишет:

ИК-датчик - любой
Энкодер у Вас какой будет? С кнопкой или без?
У Вас микросхема УМЗЧ имеет режим STANDBY?

Добрый вечер! Спасибо за схему.
Энкодер будет без кнопки.

Звуковой тракт собран на TDA7264(фронт,тыл). Он имеет режим STANDBY и MUTE.
Саб собран на LM3886. Он имеет только режим MUTE согласно данным даташита.

Центр собран на микросхеме TDA2030A, которая не имеет ни STANDBY, ни MUTE.
Поэтому сейчас проблема в том, что в режиме STANDBY из центра идет высокочастотный фон, который я победить не смог. Он пропадает, когда отключаю дисплей (отключал цепь накала).Но это не важно, так ,к слову...

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

112 (2022-03-20 17:31:44 отредактировано nora11)

Re: PT2323+TDA7448

Добрый день!
И так....Все пошло не так с самого начала. Первое подключение ардуино и экрана результата не дало. Экран не запустился по I2C. Попытка в лоб решить проблему не помогла. Экран и ардуино заказывал с али. Сканирование адреса экрана тоже никакого результата не дало, видимо все таки битый экран. Он изначально пришел с немного поцарапанным экраном и деньги я за него получил назад. Но это так, немного лирики. Это будет отдельная битва...

По делу...

Скетч вами предложенный я залил, но увы никакого результата у меня тоже не получилось.
Я подключил провода SDA SCL и землю от платы ардуино к центру...и ничего.
Я отключил из разъема провода, которые идут к аудиопроцессорам и подключил к ним провода от ардуино (SDA SCL).
Что сделал не так?
Экран отключил, кнопки и все остальное не подключал.

Почему-то не могу прикрепить фото подключения...

113

Re: PT2323+TDA7448

Подключите только один экран к ардуино и запустите i2c сканер, покажите скриншот монитора порта.

114

Re: PT2323+TDA7448

liman324 пишет:

Подключите только один экран к ардуино и запустите i2c сканер, покажите скриншот монитора порта.

Делал... Сканер не находит вообще никакого адреса

115

Re: PT2323+TDA7448

Я еще в своей практике не встречал неисправные lcd1602, как правило сними не бывает проблем.

Что пишет  монитор порта?

116

Re: PT2323+TDA7448

liman324 пишет:

Что пишет  монитор порта?

Долго висел в режиме сканирования , потом написал, что устройство не обнаружено. Сейчас попробую ещё раз . Почему не могу добавить фото  в сообщение?

117

Re: PT2323+TDA7448

http://forum.rcl-radio.ru/uploads/images/2022/03/841bfd1f021b11bc29bd8c5e45e8aa25.png

118

Re: PT2323+TDA7448

Загрузите скетч проверки экрана который использует другие пины:

D11  =  SDA
D12  =  SCL

#define ADDR    0x27
#define SDA 3 // PB3
#define SCL 4 // PB4
#define RS      0
#define E       2
#define LED     3

byte led_b,h[8];

void setup() {

    i2c_write(led_b |= (1<<LED));// включаем подсветку
    lcdInit();
}

void loop() {
   lcdCurs(0,3);
   lcdString("Test");
   lcdCurs(1,3);
   lcdLong(1234567890);  
}

void lcdSend(bool rs, byte data) {
    if(rs==0){led_b |= (1<<RS);} else {led_b &= ~(1<<RS);}//RS
    
    del();
    if(((data >> 7) & 1) ==1){i2c_write(led_b |= (1<<7));} else {i2c_write(led_b &= ~(1<<7));}
    if(((data >> 6) & 1) ==1){i2c_write(led_b |= (1<<6));} else {i2c_write(led_b &= ~(1<<6));}
    if(((data >> 5) & 1) ==1){i2c_write(led_b |= (1<<5));} else {i2c_write(led_b &= ~(1<<5));}
    if(((data >> 4) & 1) ==1){i2c_write(led_b |= (1<<4));} else {i2c_write(led_b &= ~(1<<4));}
    e_pin();
    if(((data >> 3) & 1) ==1){i2c_write(led_b |= (1<<7));} else {i2c_write(led_b &= ~(1<<7));}
    if(((data >> 2) & 1) ==1){i2c_write(led_b |= (1<<6));} else {i2c_write(led_b &= ~(1<<6));}
    if(((data >> 1) & 1) ==1){i2c_write(led_b |= (1<<5));} else {i2c_write(led_b &= ~(1<<5));}
    if(((data >> 0) & 1) ==1){i2c_write(led_b |= (1<<4));} else {i2c_write(led_b &= ~(1<<4));}
    e_pin();
}

void lcdInit(){ 
    del();
    lcd(0x03);delayMicroseconds(4500);
    lcd(0x03);delayMicroseconds(4500);
    lcd(0x03);delayMicroseconds(200);
    
    lcd(0b00000010);del();
    lcd(0b00001100);del();
    lcdClear();
  } 

void lcdClear(){lcd(0b00000001);} 
void lcd(uint8_t cmd) {lcdSend(true, cmd);}
void lcdChar(const char chr) {lcdSend(false, (uint8_t)chr);}
void lcdString(const char* str) {while(*str != '\0') {del();lcdChar(*str);str++;}}
void del(){delayMicroseconds(1000);}
void e_pin(){i2c_write(led_b |= (1<<E));del();i2c_write(led_b &= ~(1<<E));}


void lcdCurs(byte str, byte mesto){
  if(str==0){lcd(0b10000000+mesto);}
  if(str==1){lcd(0b11000000+mesto);}
  }  

void lcdLong(long int_x){
   byte h[8];
   long int_y=int_x;
   int i,i_kol;
  if(int_x<0){int_x=abs(int_x);lcdChar('-');}    // если минус
  for(i_kol=0;int_x>0;i_kol++){int_x=int_x/10;}  // определяем кол-во цифр в long
  for(i=0;i<i_kol;i++){h[i]=int_y%10; int_y=int_y/10;}// разбиваем число на отдельные цифры
  for(i=i_kol-1;i>=0;i--){lcdChar(h[i] +'0');} // преобразуем числа в char
  if(i_kol==0){lcdChar('0');} // если long = 0, то выводить ноль
  }  


bool i2c_read_bit() {
    bool i2c_bit = 1;        
    DDRB &= ~(1 << SDA);            
    delayMicroseconds(10); 
    DDRB &= ~(1 << SCL);                
    if((PINB >> SDA) & 1) i2c_bit=0;                            
    delayMicroseconds(10);  
    DDRB |= (1 << SCL);              
    return i2c_bit;  
}
 
byte i2c_write_byte(byte data){
    for (byte i=0; i<8; i++){i2c_write_bit((data&0x80)==0);data<<=1;}    
    return i2c_read_bit(); 
}
 
void i2c_write_bit(byte b){
    delayMicroseconds(5);
    if(b){DDRB |= (1 << SDA);}else{DDRB &= ~(1 << SDA);}
    delayMicroseconds(5);
    DDRB &= ~(1 << SCL);       
    delayMicroseconds(10);
    DDRB |= (1 << SCL);
}
 
void i2c_start(){
     delayMicroseconds(10);  
     DDRB &= ~(1 << SDA); DDRB &= ~(1 << SCL); 
     delayMicroseconds(10); 
     DDRB |= (1 << SDA);  PORTB &= ~(1 << SDA);
     delayMicroseconds(10); 
     DDRB |= (1 << SCL);  PORTB &= ~(1 << SCL);   
     delayMicroseconds(10);
}
 
void i2c_stop()  {
     DDRB |= (1 << SDA);            
     delayMicroseconds(10);
     DDRB &= ~(1 << SCL);               
     delayMicroseconds(10); 
     DDRB &= ~(1 << SDA);             
}
 

 
void i2c_write(byte lcd){
     i2c_start();
     i2c_write_byte(ADDR<<1);
     i2c_write_byte(lcd);
     i2c_stop();
  }  

119

Re: PT2323+TDA7448

Этот скетч заработал! на экране надпись "Test" и цифры.

120

Re: PT2323+TDA7448

Значит экран рабочий, что то с платой ардуино или библиотекой Wire.h

121

Re: PT2323+TDA7448

Как обновить эту библиотеку? Она же идет по умолчанию в основном пакете

122

Re: PT2323+TDA7448

Проверим шину I2c, подключение стандартное:
Arduino Nano аналоговый порт A4 соответствует SDA, аналоговый порт A5 соответствует SCL

Установите библиотеки:

http://rcl-radio.ru/wp-content/uploads/ … 2c_low.zip
http://forum.rcl-radio.ru/misc.php?acti … download=1

http://rcl-radio.ru/wp-content/uploads/2022/03/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-%D0%BE%D1%82-2022-03-07-100623.png

// ATMEGA8 ATMEGA48 ATMEGA88 ATMEGA168 ATMEGA328

#include <avr/io.h>
#include <util/delay.h>
#include <Wire_low.h>
#include <Lcd1602_i2c_low.h>
  Lcd1602_i2c_low lcd(0x27);// адрес I2C

int main(){ 
  wire_set(16000000,100000); // тактовая частота контроллера, частота шины I2C
  lcd.setInit();
  lcd.Clear(); // очистка экрана
  lcd.led(1);  // включение и отключение подсветки экрана
 // собственные символы, 0...7  
  lcd.Write(0,    0b11111,
                  0b00000,
                  0b10001,
                  0b10001,
                  0b10001,
                  0b10001,
                  0b00000,
                  0b11111);
                  
  lcd.Write(1,    0b11111,
                  0b10001,
                  0b11111,
                  0b10001,
                  0b11111,
                  0b10001,
                  0b11111,
                  0b00000);                
   
while(1){
    lcd.Curs(0,0);                // номер строки, положение курсора 
    lcd.PrintString("ATMEGA88  ");// вывод String
    lcd.PrintFloat(1.227,3);      // вывод Float
    lcd.Curs(1,4);                // номер строки, положение курсора 
    lcd.PrintInt(-30125);         // вывод int
    lcd.PrintChar(0);             // вывод собственного символа 0
    lcd.PrintChar(1);             // вывод собственного символа 1
    _delay_ms(100);
    }}

123 (2022-03-20 18:38:45 отредактировано nora11)

Re: PT2323+TDA7448

Последний скетч тоже заработал! Я залили пример из библиотеки LiquidCrystal_I2C и появилась надпись "Hello world". Там она просит библиотеку Wire. Может я что-то напортачил при подключении. hmm
Залил скетч с русским языком и тоже все работает!

124

Re: PT2323+TDA7448

Значит все в порядке, тот скетч который я Вам опубликовал не поддерживает экран, там только код для аудиопроцессоров.
Загрузите i2c сканер, проверьте снова адрес экрана:
http://forum.rcl-radio.ru/viewtopic.php?id=64

Если монитор порта покажет адрес 0x27, то можно подключить аудиопрцессоры и проверить их адреса.

125

Re: PT2323+TDA7448

Показал адрес 0x27,все хорошо. Странно, что первый раз ничего не показывал. Аудиопроцессоры я подключал без экрана