Forum: Mikrocontroller und Digitale Elektronik Audio Prozessor TDA7318 am Arduino Uno


von Maddin89 (Gast)


Lesenswert?

Hallo zusammen

ich versuche gerade verzweifelt mit einem Audio Prozessor TDA7318 über 
den I2C Bus zu kommunizieren.
Aufbau: 2 Taster an digitalen Ports
Vcc vom TDA7318 an Vin
Gnd vom TDA7318 an GND
SCL vom TDA7318 an A4
SDA vom  TDA7318 an A5
DigGnd vom TDA7318 an GND

Sollte das soweit passen?

an Left in 1 hab ich einen MP3 Player angeschlossen.

Folgender Code:
1
#include <Wire.h>
2
3
#define audioControl 0b1000100
4
void setup()
5
{
6
  pinMode(13,OUTPUT);
7
  pinMode(3,INPUT);
8
  pinMode(4,INPUT);
9
10
  //Wire.begin();
11
}
12
13
void loop()
14
{
15
  if(digitalRead(3) == HIGH)
16
  {
17
    Wire.begin(audioControl);
18
    Wire.beginTransmission(audioControl);
19
    Wire.send(0); 
20
    Wire.send(1); 
21
    Wire.send(0b01011000);
22
    Wire.send(0b00001100);
23
    Wire.send(0b00001011);
24
    Wire.send(0b11010011);
25
    Wire.endTransmission();
26
  }  
27
28
  if(digitalRead(4) == HIGH)
29
  {
30
    Wire.begin(audioControl);
31
    Wire.beginTransmission(audioControl);
32
    Wire.send(0); 
33
    Wire.send(1); 
34
    Wire.send(B01010001);
35
    Wire.send(B00001100);
36
    Wire.send(B10001001);
37
    Wire.endTransmission();
38
}

Wenn ich die Tasten betätige sollte er ja umschalten.
Da mit im Moment noch passende Widerstände und Kondensatoren fehlen, hab 
mich meinen Kopfhörer im Moment an OUT(L) angeschlossen, sollte ja nach 
dem Schaltplan im Datenblatt direkt nach dem Umschalter kommen. Aber ich 
höre nur ganz leise ein Signal Aber es ist egal welcher Input geschaltet 
ist. Wo ist mein Fehler!?!?

Wäre nett wenn mir jemand helfen könnte...

Danke

von Jobst M. (jobstens-de)


Lesenswert?

Bekommst Du ein Acknowledge vom TDA?


Gruß

Jobst

von Maddin89 (Gast)


Lesenswert?

Woran erkenn ich das? Ist mein erstes Projekt mit i2c bus.

Grüße und Danke

von Jobst M. (jobstens-de)


Lesenswert?

Indem Du die Rückmeldungen auswertest.
Oder ein Scope dran hängst.
Ersteres solltest Du aber sowieso in Deiner SW tun.


Gruß

Jobst

von spess53 (Gast)


Lesenswert?

Hi

Interessant wäre, was hinter den Routinen 'Wire.begin'... steckt.

Diese zeilen

>    Wire.begin(audioControl);
>    Wire.beginTransmission(audioControl);

kommen mir schon etwas suspekt vor. Wozu zwei mal die Adresse?

MfG Spess

von Maddin89 (Gast)


Lesenswert?

Hab mir mal versucht mit der Rückgabe eine Testumgebung zu bauen:
1
void loop()
2
{
3
  digitalWrite(13,LOW);
4
  if(digitalRead(3) == HIGH)
5
  {
6
    Wire.beginTransmission(audioControl);
7
    digitalWrite(13,HIGH);
8
    Wire.send(0b00001100);
9
    Wire.requestFrom(audioControl,1);
10
    if(Wire.available())
11
    {
12
       Serial.print(Wire.receive());  //Hab am PC am Seriellen Port ein Monitor laufen, aber er gibt nichts zurück. Oder was ist gemeint?
13
    }
14
    delay(500);
15
    Wire.endTransmission();
16
  }

Das mit der Adresse 2 mal übergeben hab ich hier von 
http://www.arduino.cc/en/Reference/Wire
Bin ich echt zu blöde? Was tut der CREF Pin am TDA? Muss ich den mit auf 
die 9Volt legen?

Grüße und Danke für eure Gedult :)

von holger (Gast)


Lesenswert?

>Was tut der CREF Pin am TDA?

Datenblatt Seite 2.

von Maddin89 (Gast)


Angehängte Dateien:

Lesenswert?

So siehts bei mir aus.
Leider bekomme ich keinerlei Rückmeldung vom IC :(

Grüße

von holger (Gast)


Lesenswert?

Mal ne blöde Frage, wozu sind SCL und SDA da oben
links auf deinem Arduino wohl vorgesehen?

von Maddin89 (Gast)


Lesenswert?

Boa, ich dachte gerade schon... aber meiner  hat diese Pins leider 
nicht...
Aber http://www.arduino.cc/en/Main/arduinoBoardUno sagt:
The Uno has 6 analog inputs, labeled A0 through A5, each of which 
provide 10 bits of resolution (i.e. 1024 different values). By default 
they measure from ground to 5 volts, though is it possible to change the 
upper end of their range using the AREF pin and the analogReference() 
function. Additionally, some pins have specialized functionality:

    TWI: A4 or SDA pin and A5 or SCL pin. Support TWI communication 
using the Wire library.

Sollte doch denn so passen oder?

von holger (Gast)


Lesenswert?

Ok dann hat er die halt nicht. Evtl. fehlen aber noch die Pullups
an SDA und SCL. Ohne Osci wirds jetzt auch schwierig;)

von Maddin89 (Gast)


Lesenswert?

Auch mit Pullup tut sich nix :(
Osci hab ich nicht da...
Manno, als ich mich da eingelesen hatte sah das nicht so schwer aus...

Danke schonmal für eure Hinweise

von holger (Gast)


Lesenswert?

>Auch mit Pullup tut sich nix :(

Deine Schaltung sieht arg minimal aus.
Wenn das deine ganze Schaltung ist kann da nix rauskommen.
Also mindestens die Kondensatoren zwischen 7 und 6 sowie
17 und 16 müssen rein. Einen Kopfhörer treibt der TDA auch nicht ohne 
Verstärker. Und dann muss die Software natürlich funktionieren;)

von Maddin89 (Gast)


Lesenswert?

Jau, hab noch nicht mehr dran, weil ich die Kommunikation erst mal 
testen wollte.
Kondensatoren stecken und mittlerweile ist auch ein Verstärker 
angeschlossen. Gaaaanz leise ist auch was zu hören, aber immer, egal ob 
der Input auf 1,2,3 oder 4 steckt...

hab noch folgendes gefunden:
if you are using the Wire-lib check the return value of 
Wire.endTransmission().
It is 0 if the data was succesfully transmitted,
2 if your slave device did not ACK the address,
3 if the device did not ACK some data you send,
4 if there is some other TWI error.

Ich erhalte immer die 2 zurück.... Hat Conrad Dienstag offen? Dann muss 
ich wohl mal einkaufen ;)

von holger (Gast)


Lesenswert?

void setup()
{
  pinMode(13,OUTPUT);
  pinMode(3,INPUT);
  pinMode(4,INPUT);

// Nimm das mal wieder rein
  Wire.begin();
}

von Maddin89 (Gast)


Lesenswert?

Das hab ich schon wieder mit drin...
Im Datenblatt auf Seite 8 steht wie genau die Kommunikation ablaufen 
soll, aber ich vermute das die Wire.h genau das anbietet? Muss ich ein 
Ack senden um eins zu empfangen? So ala Three-Way-Handshake im TCP/IP 
Bereich?

Grüße und danke

von Jobst M. (jobstens-de)


Lesenswert?

Maddin89 schrieb:
> Boa, ich dachte gerade schon... aber meiner  hat diese Pins leider
> nicht...

Da es offensichtlich unterschiede bei den Boards gibt, magst Du uns mal 
mitteilen, welcher Prozessor da drauf sitzt?

Auch die Stromversorgung vom TDA sieht irgendwie unvollständig aus ...


Gruß

Jobst

von robibauer (Gast)


Lesenswert?

Das "Schaltbild" (Bildschirmfoto_am_2011-12-24_17_06_42.png) kann man 
nicht feststellen, wo der Fehler liegt, da fast alle passiven Bauteile 
fehlen.

Im Datenblatt wird für den TDA eine Mindestspannung von 6V verlangt. In 
diesem Schaltbild wird der TDA nur 5V gespeist.

von Maddin89 (Gast)


Lesenswert?

Muss nachher mal schauen was dort drauf sitzt.
Stromversorgung: 9v an Vcc. Gnd. Cref übern C auf gnd. Sollte doch alles 
sein oder?

Vermutlich hab ich beim testen das Bauteil gehimmelt. Ich glaub ich 
hatte auf Cref mal +9v liegen.
Habe einen i2c scanner gefunden. Das IC wird nicht gefunden. Hatte noh 
was anderes mit i2c Bus hier, das findet er sofort.

Nachher mal gucken.

von Michael G. (let)


Lesenswert?

Hallo Maddin89,

gleich vorweg - ich habe noch kein I2C mit dem Arduino gemacht. Die 
Dokumentation der Wire-Lib verstehe ich aber so dass die TWI 
Schnittstelle mit Wire.begin(addr) als Slave Device eingerichtet wird. 
Benötigt wird hier aber ein Master. Dazu müßte nach meinem Verständnis 
begin() ohne Adresse aufgerufen werden.
Die Übertragung dürfte dann so aussehen:
1
Wire.begin();
2
Wire.beginTransmission(0b00001100);
3
Wire.write(...);
4
Wire.write(...);
5
...
6
result = Wire.endTransmission();

Erst beim Aufruf von endTransmission() werden tatsächlich Daten 
gesendet. Vorher wird nur gesammelt.

Die Adresse erscheint mir dabei suspekt. Der TDA hat soweit ich weiß 
0b10001000. Ich habe mal relativ viel damit (bzw. seinem Nachfolger 
TDA7348) gemacht.

Mit 9V am Cref könntest du den Chip in der Tat abgeschossen haben. Es 
könnte aber gut sein dass es dann nur den Analogteil erwischt hat. Die 
Kommunikation an sich geht vielleicht noch.

Es ist ein Jammer das ST die 7318 und 7348 nicht mehr herstellt. Die 
sind ziemlich genial.

von Jobst M. (jobstens-de)


Lesenswert?

Maddin89 schrieb:
> Sollte doch alles sein oder?

Mach doch mal einen vernünftigen Plan, der auch mit Deinem Aufbau 
übereinstimmt. Sonst kann man da gar nichts sagen.


Maddin89 schrieb:
> Vermutlich hab ich beim testen das Bauteil gehimmelt. Ich glaub ich
> hatte auf Cref mal +9v liegen.
> Habe einen i2c scanner gefunden. Das IC wird nicht gefunden. Hatte noh
> was anderes mit i2c Bus hier, das findet er sofort.

Entweder hast Du das Bauteil tatsächlich kaputt gemacht oder immer noch 
nicht korrekt angeschlossen.


Michael G. schrieb:
> Der TDA hat soweit ich weiß 0b10001000.

I²C-Adressen haben immer 7 Bit.


Gruß

Jobst

von Michael G. (let)


Lesenswert?

> I²C-Adressen haben immer 7 Bit.

Ja, stimmt. Auch wenn das R/W Bit oft und gerne als Teil der Adresse 
gesehen wird. In der Dokumentation des TDA7318 die ich gerade mal 
hervorgekramt habe, wird das Bit z. B. mit keiner Silbe erwähnt. Unter 
"Chip Address" steht dort tatsächlich 0b10001000.

Aber beginTransmission(addr) erwartet anscheinend 7Bit.
Ich würde es jetzt also mal so probieren:
1
Wire.begin(); // I2C Init als Master
2
Wire.beginTransmission(0b1000100); // 7Bit Chip Adresse
3
Wire.write(0b00000000); // Volume 0dB
4
Wire.write(0b10000000); // Spk. LF 0dB
5
Wire.write(0b10100000); // Spk. RF 0dB
6
Wire.write(0b01011000); // Input 1, PGA 0dB
7
result = Wire.endTransmission();

von holger (Gast)


Lesenswert?

>Ich würde es jetzt also mal so probieren:
>
>Wire.begin(); // I2C Init als Master
>Wire.beginTransmission(0b1000100); // 7Bit Chip Adresse

Das macht er schon die ganze Zeit:

>#define audioControl 0b1000100

von Matthias (Gast)


Lesenswert?

Die Adresse ist 8 bit lang und hat den Wert 0x88 oder 0b10001000.

von Jobst M. (jobstens-de)


Lesenswert?

Matthias schrieb:
> Die Adresse ist 8 bit lang und hat den Wert 0x88 oder 0b10001000.

Wie liest Du von der Adresse?


Gruß

Jobst

von Matthias (Gast)


Lesenswert?

Laut Datenblatt kann man nur Werte in den Chip reinschreiben, aber nicht 
auslesen.

von Maddin89 (Gast)


Lesenswert?

So hab einen neuen TDA, Die Ansteuerung scheint zu klappen, allerdings 
hab ich so gut wie keinen Bass im Ausgangssignal.
Aufbau ist jetzt wie im Datenblatt.

Danke schonmal für eure Hilfe

von Ludo (Gast)


Lesenswert?

Hi All, i try also to test my TDA, have you found a solution ?
someone have a pde arduino code ?

Thanks a lot

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.