I2C vs TDA7468 can't do anything only mute!!!

I everyone i hope i can get help from you all because im near to explode!!!

here is my situation,

I want to connect my arduino uno to the tda7468 and control volume, tone (bass and treble), balance (Left/Rigth), from a audio source (Mp3 Player), via I2C.

I´ve follow the tda7468 datasheet and setup everything on a breadboard, conected all I2C lines (With pullups resistors (5k ohms)).

With an I2C_Scanner i’ve found the device 0x44 (68 in DEC).

From here i get nothing, only mute, i’ve tried several combinations of the following code but i can’t get nothing from the tda7468.

Can anyone help me understand what’s wrong?

#include <Wire.h>

void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
  
  
 
  //input select and mic
  Wire.beginTransmission(68); // transmit to device
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x00));            // sends instruction byte  
  Wire.write(uint8_t(0x70));             // sends  value byte  
  Wire.endTransmission(); 
  
  
  //input gain
  Wire.beginTransmission(68); // transmit to device 
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x01));            // sends instruction byte  
  Wire.write(uint8_t(0x07));             // sends value byte  
  Wire.endTransmission(); 
  
  //surround
  Wire.beginTransmission(68); // transmit to device
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x02));            // sends instruction byte  
  Wire.write(uint8_t(0x00));             // sends value byte  
  Wire.endTransmission(); 
  
  
  //volume left
  Wire.beginTransmission(68); // transmit to device 
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x03));            // sends instruction byte  
  Wire.write(uint8_t(0x00));             // sends value byte  
  Wire.endTransmission(); 
  
  //volume right
  Wire.beginTransmission(68); // transmit to device 
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x04));            // sends instruction byte  
  Wire.write(uint8_t(0x00));             // sends value byte  
  Wire.endTransmission(); 
  
  //treble and bass
  Wire.beginTransmission(68); // transmit to device 
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x05));            // sends instruction byte  
  Wire.write(uint8_t(0xFF));             // sends value byte  
  Wire.endTransmission(); 
  
    //output
  Wire.beginTransmission(68); // transmit to device 
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x06));            // sends instruction byte  
  Wire.write(uint8_t(0x00));             // sends value byte  
  Wire.endTransmission(); 
  
  //Bass ALC
  Wire.beginTransmission(68); // transmit to device 
                            // device address is specified in datasheet
  Wire.write(uint8_t(0x07));            // sends instruction byte  
  Wire.write(uint8_t(0x00));             // sends value byte  
  Wire.endTransmission(); 
}

void loop()
{
  
   
   
}

Many thanks to all

Greetings

Hello lusoscx,

Its a long time though… but i think my experience will be worth sharing…

After a long search i couldn’t find a single post related to TDA7468 other than datasheet!! :slightly_frowning_face:
So i decided to built it by myself and share it. After going through the datasheet i was able to design a breakout for TDA7468 in EagleCAD. In the attachments below you can find the schematic and codes.

I have successfully communicated with TDA7468 with Arduino Uno and it works perfectly.

Codes:

TDA7468.ino

#include <Wire.h>
#include "TDA7468.h"

void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)

  checkConnection();  
  writeWire(input_select,0x01);
  writeWire(input_gain,0x07);
  writeWire(surround,0x01);
  setVolume(88);
  writeWire(treble_bass, 0x77);
  writeWire(output,1);
  writeWire(bass_alc,0x87);
}

void loop()
{  
   
}

TDA7468.h

/*#ifndef TDA7468_H
#define TDA7468_H*/

#define TDA7468_address 0x44

#define input_select  0x00
#define input_gain    0x01
#define surround      0x02
#define vol_left      0x03
#define vol_right     0x04
#define treble_bass   0x05
#define output        0x06
#define bass_alc      0x07

#define input_1 0x00
#define input_2 0x01
#define input_3 0x02
#define input_4 0x03

void checkConnection(){
  Serial.begin(115200);
  Serial.print("Checking Connection...");
  Wire.beginTransmission(TDA7468_address);
  byte error = Wire.endTransmission();
  Serial.println((error == 0) ? "\nTDA7468 Connected!" : "\nUnknown error!");
}

void writeWire(char subaddress, char data)
{
  Wire.beginTransmission(TDA7468_address);
  Wire.write(subaddress);
  Wire.write(data);
  Wire.endTransmission();
}

void setVolume (int volume)
{
  if(volume != 0){
    volume = 88 - volume;
  }
  writeWire(vol_left, volume);
  writeWire(vol_right, volume);
}

tda7468.pdf (17.8 KB)

TDA7468.h (1.17 KB)

tda7468.ino (2.74 KB)

tda7468_top.pdf (28.8 KB)

I know that I am to late to answer, but I have the solution from this web page:
https://www.diyaudio.com/forums/chip-amps/199874-tda7468-friends.html

Send this command on the beginning of your code :

Wire.beginTransmission(TDA7468_address);
Wire.write(0b00000010);
Wire.write(0b00011000); // set mixing in surround to 0%
Wire.endTransmission();