TDA8425 audio CPU ПРОБЛЕМА!!!
Добрый вечер всем!
Собрал процессор на TDA8425, по датышу. ошибок в схеме нет, проверил. Она общается по i2c, написал на ардуине минимальный скетч чтобы просто выставить громкость, режим, вход. Но при подачи сигнала на выходе всегда пусто (тихо)
Грешу на скетч, так как не особо силен, и наверняка накидал грабли.
PHP код:
#include <Wire.h> // Библиотека
byte MAD = B10000010; // адрес модуля
byte VL = B11111111; // Громкость левого канала
byte VR = B11111111; // Громкость правого канала
byte BA = B11110110; // Регулировка НЧ / Басса
byte TR = B11110110; // Регулировка ВЧ
byte S1 = B11001010; // Функция входа
void setup()
{
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
Wire.begin(); // Включить i2c
set();
}
void loop() // Главный цикл
{
}
void set() // Главный цикл
{
Wire.beginTransmission(MAD); // начало передачи, с адресом нужного нам Slave
//Wire.write(MAD); // отправляем данные для выбраного Slave
delay(100);
Wire.write(B00000000);
delay(100);
Wire.write(VL);
delay(100);
Wire.endTransmission(); // конец передачи
delay(100);
Wire.beginTransmission(MAD); // отправляем данные для выбраного Slave
delay(100);
Wire.write(B00000001);
delay(100);
Wire.write(VR);
delay(100);
Wire.endTransmission(); // конец передачи
delay(100);
Wire.beginTransmission(MAD); // отправляем данные для выбраного Slave
delay(100);
Wire.write(B00000010);
delay(100);
Wire.write(BA);
delay(100);
Wire.endTransmission(); // конец передачи
delay(100);
Wire.beginTransmission(MAD); // отправляем данные для выбраного Slave
delay(100);
Wire.write(B00000011);
delay(100);
Wire.write(TR);
delay(100);
Wire.endTransmission(); // конец передачи
delay(100);
Wire.beginTransmission(MAD); // отправляем данные для выбраного Slave
delay(100);
Wire.write(B00001000);
delay(100);
Wire.write(S1);
delay(100);
Wire.endTransmission(); // конец передачи
delay(100); // пауза
digitalWrite(13, HIGH);
}
В чем я ошибся?
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
Возможно что устройство должно как то инициализироваться. В даташите не описан процесс инициализации?
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
Цитата:
Сообщение от
Chip
Возможно что устройство должно как то инициализироваться. В даташите не описан процесс инициализации?
Датыш могу приложишь.
вот тут уже разбирали этот проц. у него все заработало.
кусок кода для регулировки громкости лев или прав канала
PHP код:
void VL(signed char VLbyte) //Громкость левого канала
{
if (VLbyte>6) VLbyte = 6; //6 дБ наш максимум
if (VLbyte<-64) VLbyte = -80; //-80 дБ наш минимум
if (VLbyte<-80) VLbyte = -80;
if (!(VLbyte%2)) //если идем с шагом 2 дБ
{
if (VLbyte == -80) //если -80
{
I2CStart();
I2CSend(0x82); //адрес тда8425
I2CSend(0x00); //байт выбора левого канала
I2CSend(192 | 0); //шлем нулевое значение
I2CStop();
} else
{
I2CStart();
I2CSend(0x82);
I2CSend(0x00);
I2CSend(192 | (63 - (6-VLbyte)/2)); //иначе шлем по формуле
I2CStop();
}
}//!VLbyte
}
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
А для чего после отправки данных выдерживается пауза 100мс?
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
Цитата:
Сообщение от
Chip
А для чего после отправки данных выдерживается пауза 100мс?
Можно в принципе убрать. там в датише указано что после получения первого байта проц отвечает мастеру, после второго тоже отвечает что понял задачу. и после третьего. я поставил выдержку чтобы все это прошло. как то так.
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
А что приходит в ответ, и приходит ли? Возможно это поможет понять где проблема?
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
Цитата:
Сообщение от
manu_245
А что приходит в ответ, и приходит ли? Возможно это поможет понять где проблема?
по датышу в ответ проц должен прижать SDA к земле. На сколько я понял
Датыш
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
По даташиту (стр.9, fig. 4,5), вроде как, после включения команды должны идти одна за другой без STO после каждой, и с одним стопом в конце. А в скетче получается, команды уходят как не после ресета. (стр. 9. fig.6). Ну и я бы посмотрел, что приходит в ответ.
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
Код:
#include <Wire.h>
#define MAD 130 // адрес модуля аудио процессора
#define LC 0 // адрес левого канала
#define RC 1 // адрес правого канала
void setup()
{
Wire.begin(); // Включить i2c
}
void loop() // Главный цикл
{
set(LC, 63 );
delay(1000);
set(LC, 0);
delay(1000);
set(RC, 63);
delay(1000);
set(RC, 0);
delay(1000);
}
void set(byte sab, byte volume)
{
Wire.beginTransmission(MAD); // начало передачи, с адресом аудио процессора MAD
Wire.write( sab ); // SAB адрес
Wire.write(volume); //уровень
Wire.endTransmission(); // конец передачи
}
Re: TDA8425 audio CPU ПРОБЛЕМА!!!
а зачем через секунду громкость в 0 выставлять? чтобы проверить каждый канал по отдельности, тогда надо хотя бы сек 3