Естественно, в случае ноутбука/компьютера громкость, поступающая на темброблок, должна быть максимальна, а регулировка производиться уже за счёт темброблока, а не системного микшера в операционке.
Это также минимизирует возможные шумы и помехи.
Так и его не будет пока. Хочу просто запустить tda, убедиться что руки от туда растут, послушать ее. А потом продолжить.WiseLord писал(а):А какой смысл в анализаторе спектра без экрана?
Код: Выделить всё
#include <avr/interrupt.h>
#include "i2c.h"
#include "tda7439.h"
#include <avr/io.h>
int main (void)
{
I2CInit();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_INPUT_SELECT);
I2CWriteByte(0x02); //вход2
I2CStop();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_INPUT_GAIN);
I2CWriteByte(0x0A); //входной уровень 18dB
I2CStop();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_PREAMP);
I2CWriteByte(0x08); //громкость -8dB
I2CStop();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_BASS); //bass 0db
I2CWriteByte(0x0F);
I2CStop();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_MIDDLE); //middle 0db
I2CWriteByte(0x0F);
I2CStop();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_TREBLE); //treble 0db
I2CWriteByte(0x0F);
I2CStop();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_VOLUME_RIGHT); //balance 0db
I2CWriteByte(0x00);
I2CStop();
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_VOLUME_LEFT); //balance 0db
I2CWriteByte(0x00);
I2CStop();
}

Все оказалось правильно! Все работает, это просто мозгов еще мало. Я на выход стал включать наушники, напрямую от микросхемы, вот она и затыкалась. А щас повесил усилитель и все запело!!!WiseLord писал(а):Вроде как всё правильно.
Код: Выделить всё
I2CStart(TDA7439_I2C_ADDR);
I2CWriteByte(TDA7439_INPUT_SELECT | 0x10); // начальный адрес + бит автоинкремента
I2CWriteByte(0x02); //вход2
I2CWriteByte(TDA7439_INPUT_GAIN);I2CStop();
I2CWriteByte(TDA7439_PREAMP);
I2CWriteByte(TDA7439_BASS); //bass 0db
I2CWriteByte(TDA7439_MIDDLE); //middle 0db
I2CWriteByte(TDA7439_TREBLE); //treble 0db
I2CWriteByte(TDA7439_VOLUME_RIGHT); //balance 0db
I2CWriteByte(TDA7439_VOLUME_LEFT); //balance 0db
I2CStop();Тогда получается как на RDA5807, все сразу. Но это же не удобно, если нужно допустим только громкость поменять? Может быть удобно при первом включение, верно?WiseLord писал(а):Обычный для I²C автоинкремент адреса. Можно писать без лишних перестартовок, что значительно быстрее:Спойлер
Код: Выделить всё
I2CStart(TDA7439_I2C_ADDR); I2CWriteByte(TDA7439_INPUT_SELECT | 0x10); // начальный адрес + бит автоинкремента I2CWriteByte(0x02); //вход2 I2CWriteByte(TDA7439_INPUT_GAIN);I2CStop(); I2CWriteByte(TDA7439_PREAMP); I2CWriteByte(TDA7439_BASS); //bass 0db I2CWriteByte(TDA7439_MIDDLE); //middle 0db I2CWriteByte(TDA7439_TREBLE); //treble 0db I2CWriteByte(TDA7439_VOLUME_RIGHT); //balance 0db I2CWriteByte(TDA7439_VOLUME_LEFT); //balance 0db I2CStop();
Спасибо за разъяснения, пошел вешать энкодер и экран. Будем пробовать дальше )))WiseLord писал(а):При первом включении. При регулировке громкости (SPEAKER_LEFT + SPEAKER_RIGHT). При реализации предустановок типа ROCK, POP, FLAT и т.п., когда нужно менять настройки всех трёх тембров за раз. В общем, в любых случаях, когда нужно одновременно поменять несколько байт подряд, не обязательно все.