www.mikrocontroller.net

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


Autor: stowoda (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

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

Autor: stowoda (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht im Datenblatt, man muss ihn starten.

MfG

Autor: stowoda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.