Hallo, habe schon im Forum gesucht, aber nix passendes gefunden :/ Ich möchte meinen DS1621 (Temperatursensor) auslesen. Ich möchte dazu den Hardware I2C verwenden. Das senden der Steuerbefehle klappt und keine Fehler entstehen. Nachdem ich nun die Steuersignale gesendet habe, soll der Sensor nach Spezifikation die Daten senden (tut er auch in einer anderen Schaltung ohne ATmega). Nur wie wird das mit dem ATmega realisiert? Code (eigene Funktionen, avr-gcc): i2c_start(); // start i2c_sendaddress(144); // adresse chip i2c_sendbyte(0xAA); // Befehl: sende Temperatur i2c_repeatedstart(); i2c_sendaddress(144 | 1);// nochmal adresse + READ ->nächstes Byte lesen // ab hier wahrscheinlich fehlerhaft TWCR = 1<<2 || 1<<6; // sende ACK nach empfang von Daten while(!(TWCR & 128)) // warten auf empfang von Daten ; i = TWDR; // i ist hier leider 145 (Adresse + READ) :( i2c_stop(); // stop Habe das Datenblatt gewälzt, aber bestimmt was übersehen :( Jemand nen Tip? Vielen Dank!
An die erforderlichen Pullups am I²C-Bus gedacht? Mal ein Oszilloskop drangehängt?
In der Zeile TWCR = 1<<2 | 1<<6 fehlt noch (1<<7), das TWINT-Flag muß nach jedem Befehl durch schreiben von "1" gelöscht werden, Datenblatt Seite 160: Beschreibung des TWCR. In Deinem Fall wird der Lesebefehl garnicht erst ausgeführt, deshalb befindet sich auch die 145 noch im TWDR. Außerdem ist der Code besser lesbar, wenn man z.B. TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA); schreibt, wenn ich mich richtig erinnere, werden durch die i2c-Lib des GCC diese Namen definiert.
ohh gott.. war echt spät, als ich das gepostet habe.. kein Wunder.. TWCR = 1<<2 || 1<<6; <---- das ist ein logisches ODER .. Asche über mein Haupt.. mit TWCR = 1<<2 | 1 <<6 | 1 <<7; geht es und ich bekomme meine 19Grad Zimmertemperatur raus.. ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.