Forum: Mikrocontroller und Digitale Elektronik DS1621 gibt 0xff Grad aus


von stowoda (Gast)


Lesenswert?

Hallo,

wollte einen DS1621 über I2C ansteuern. Da ich nicht zurecht kam mit dem 
I2C in Hardware (M30245FCGP), habe ich mir die nötigen Softwareroutinen 
geschreiben.

Nun zeigt mein Temperatursensor merkwürdiges Verhalten:

Wenn ich versuche ihm die Temperatur zu entlocken, lese ich nur Einsen.
Das T_h Register = 0xff und das T_l = 0x80

Bin zu 99% überzeugt, dass meine I2C Routinen funktionieren, denn:

-Bekomme ein ACK, immer dann wenn ich es auch erwarte.
-Ändere ich die Adresse des Slave, so gibt es kein ACK
-Schreibe ich Werte in die Thermostatregister, so kann ich die selben 
auch wieder auslesen.
-Ich bin auch in der Lage das Konfigurationsregister auszulesen

Die einzige Sache die nicht klappt, ist das Auslesen der korrekten 
Temperatur. Ich vermute allerdings, dass der Lesevorgang in Ordnung ist, 
da sich alle anderen Register wunderbar auslesen lassen.

Habe sogar zwei verschiedene DS1621 ausprobiert, die jedoch gleiches 
Verhalten zeigen.

Ist jemandem schonmal soetwas passiert? Kann es sein, dass beide IC´s 
kaputt sind?

Falls Ihr wollt, kann ich meine Routinen posten, doch bin ich "fast" 
überzeugt, dass sie einwandfrei sind.



Naja, vielleicht findet sich jemand mit ähnlichen Erfahrungen.
Bis dahin, guten Abend.

stowoda

von Sauger (Gast)


Lesenswert?

Moin,

Messung durch "Start Convert T [EEh]" Kommando angestoßen ?

von stowoda (Gast)


Lesenswert?

Moin auch...

So siehts aus:

-start
-sende 0x90 (Adresse des IC: 000, Schreiben)
-ACK vom IC
-sende 0xEE
-ACK vom IC
-stop

-start
-sende 0x91 (Lesen)
-ACK vom IC
-sende 0xEE
-ACK vom IC
-lese T_high
-lese T_low
-stop

Nun habe ich herausgefunden, dass zwischen den beiden Blöcken (oben) ein 
restart muss anstelle von stop und start.
Siehe da, es funktioniert..

Also danke, dass Du mich auf die richtige Spur gebracht hast. :)

So führt es nun zum gewünschten Ergebnis:

-start
-sende 0x90 (Adresse des IC: 000, Schreiben)
-ACK vom IC
-sende 0xEE
-ACK vom IC

-restart

-sende 0x90 (Schreiben)
-ACK vom IC
-sende 0xAA
-ACK vom IC
-restart
-sende 0x91 (Lesen)
-ACK vom IC
-lese T_high
-lese T_low
-stop

Wahrscheinlich ist das noch nicht optimal ^^ werde mal schauen worauf es 
wirklich ankommt.


Eine Frage hätte ich noch: wenn der DS1621 eingeschaltet wird, also 
siene Betriebsspannung bekommt; fängt er automatisch an zu messen oder 
muss ich ihn mit 0xEE erst starten ?


Grüße
stowoda

von Sauger (Gast)


Lesenswert?

Steht im Datenblatt, man muss ihn starten.

MfG

von stowoda (Gast)


Lesenswert?

Vielen Dank.

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.