DA-Wandler TDA8444 über I2C ansteuern

Hallo,

mit folgendem Code versuche ich dem DA-Wandler eine Spannung zu entlocken:

#include <Wire.h>
void setup() {
pinMode(13, OUTPUT);
Wire.begin(); // Init als I2C-Master
delay(100); // man kann nie wissen
}
void loop() {
Wire.beginTransmission(64); // Adresse des TDA8444
Wire.send(0); // DA-Wandler 0
Wire.send(50); // Ein Spannungswert
Wire.endTransmission();
ledblink();
}

Man kann mit dem Oszilloskop Impulse auf SDA und SDL erkennen.
Die beiden Pullup-Widerstände sind drin. SDA und SDL sind verbunden.
Leider tut sich am DA-Wandler nichts.

Hat jemand eine Idee wie ich da weiterkomme?

Gruß Stefan

Schick uns mal das Schaltbild; A0 bis A2 hast Du auf Masse gelegt? Welche Spannung hast Du an Vmax angelegt? Mit welcher spannung versorgst Du den TDA8444? Grüße Uwe

Wenn ich wüsste wie man hier Bilder einfügt :(

Hier ein Plan: http://stegem.de/Elektronik/tda8444-m8.jpg

Ich hab die 3 Adressleitungen auf GND gelegt. VCC ist 5V Vmax ist 2,7V (irgendwo steht im Datenblatt maximal VCC-2V)

Hallo steg13 "irgendwo steht im Datenblatt maximal VCC-2V " ja, steht im Datenblatt. Es steht auch oft Umax=Ucc; darum kann ich Dir nicht sagen was richtig ist. Versuch mal mit Umax auf 5V zu legen. Sonst hab ich keine Fehler gefunden, hab aber aus Ermangelung des DACs die Schaltung nicht kontrollieren können Grüße Uwe

5V geht leider auch nicht.

Ich habe inzwischen mal den I2C Treiber von Peter Fleury ausprobiert. Geht leider auch nicht.

Ich denke es liegt am Chip. Ich werde mal ein Arduino Board als I2C-Slave programmieren um Fehler in meinem Programm auszuschliessen. Ich vermute aber irgendwas habe ich beim TDA844 falsch verstanden.

Jetzt habe ich ein Arduino Board als I2C Slave programmiert. (Slave-Receiver aus den Examples etwas abgewandet). -> Funktioniert einwandfrei.

Also liegt es am DA-Wandler. Kann es sein dass die Taktfrequenz SCL zu hoch ist? Oder bin ich mal wieder zu blöd das Datenblatt zu lesen

Ich bezweifle daß die Taktfrequenz zu hoch ist; das Datenblatt schweigt sich dazu aus. Ich weiß jezt auch nicht was Dir weiter zu raten. Kontrolliere nochmal die Leitungen A0 bis A2 ob da nicht ein Wackelkontakt ist.

Vesuchs mal damit: http://todbot.com/blog/2009/11/29/i2cscanner-pde-arduino-as-i2c-bus-scanner/ um zu kontrollieren ob Du die richige Adresse nimmst.

Grüße Uwe

Nun sende ich mit diesem Programm:


#include <Wire.h>

void setup()
{
pinMode(13, OUTPUT);
Wire.begin(); // join i2c bus (address optional for master)
}

void loop()
{
Wire.beginTransmission(4); // transmit to device #4
Wire.send(1); // send 1
Wire.send(2);
Wire.endTransmission(); // stop transmitting
delay(1000);
}


und empfange damit


#include <Wire.h>

void setup()
{
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}

void loop()
{
delay(100);
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
while(1 < Wire.available()) // loop through all but the last
{
char c = Wire.receive(); // receive byte as a character
Serial.print(c); // print the character
}
int x = Wire.receive(); // receive byte as an integer
Serial.println(x); // print the integer
}


Leider kommt nur die 2 an.
Wie kann man 2 Byte hintereinander senden?
Wann sendet der Arduino ein Acknowledge?

Zwei Char hintereinander Wire.send(“Hi”) geht!