Hallo,
ich versuche derzeit mit dem openPicus Flyport Wifi B [1] den
I2C-Temperatur Sensor DS1631 [2] (Nachfolger des DS1621) auszulesen. Das
klappt aber leider nicht so wie gewünscht.
Das ganze sieht folgendermaßen aus:
SCL des Sensors an p1(SCL) des FlyPort Moduls.
SDA des Sensors an p3(SDA) des Flyport Moduls.
Läuft mit 5V und je einem 4K7 Ohm Pullup an den Leitungen.
Da ich bei jedem Command immer ein NACK als Antwort bekomme und msb,
sowie lsb des Temperaturregisters immer FFh sind, denke ich an meinem
Code stimmt was nicht.
Die einzelnen Funktionen sind auf der Seite von [3] genauer erläutert.
Pop...
Der sichtbare Code sieht unauffällig aus. Ergo liegt das Problem
woanders. Wenn schon auf die Adresse ein Nack kommt, stimmt entweder die
Adresse nicht, oder es ist was grundsätzlich verkehrt.
Oliver
Alles klar, dann werd ichs mal mit einem Atmega32 versuchen und schauen
was dabei rauskommt.
Dann kann ich den Fehler zumindest auch bei der Verkabelung oder dem
Temperatursensor ausschließen.
Nils Friess schrieb:> I2CStart();> if(!I2CWrite(0x90)) //device adress> UARTWrite(1, "NACK 0x90\n");
setze mal in write
!I2CWrite(0x90>>1)
ein.
Versuch macht kluch
Die Doku-Seite vom Flyport zeigt I2CxxxxReg/Multi Funktionen die direkt
auf den DS1631 passen sollten. Desssen Command Byte entspricht dann der
Registeradresse der Flyport-Funktionen. Dort dürfte das mit der 7-Bit
Adresse dann auch zutreffen, also 0x48 statt 0x90.
Schande über mein Haupt und Schande über meinen IT-Lehrer, der sich ja
100% sicher war, dass A0, A1, A2 auf der Platine auf GND liegen (was
sich nach Abfahren der Leitungen als falsch herausstellte...)
Adresse ist daher nicht 0x90 sondern 0x9E (ohne shift @jar).
Danke dennoch für die Hilfe.
Hier der Code der funktioniert: