Forum: Mikrocontroller und Digitale Elektronik AVR Temperatursensor I2C Assembler


von pacer (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leute,

ich quäle mich jetzt schon ne ganze Weile mit den I2C Tempsensoren rum.
Im Moment hab ich den DS1631 dran.Soweit scheint alles zu funktionieren.

Ich sende das Startbit anschließend die SL_R-Adresse und bekomme ein 
Acknowledge zurück. Ich empfange das MSB-Tempbyte uns sende ein Ack. Ich 
bekomme das LSB und sende kein Ack anschließend ein Stop und das ganze 
fängt von vorn an.

Merkwürdigerweise ist das MSB immer 09 was zufällig oder auch nicht im 
Zusammenhang mit dem LSB die Slaveadresse (9F) ist. das LSB ist immer 
F0.
Die Null wäre ja schon richtig, da die ersten 4 Bits immer Null sind 
(12-Bit Auflösung) Für Raumtemperatur auf jeden Fall zu niedrig.
Zwischen 2 Zyklen vergehen mindestens 2 Sekunden.

Ich habe nun keine Ahnung wo ich noch suchen soll, vielleicht kann das 
Programm ja jemand mal für mich anschauen oder gar testen.

Gruß, Jürgen

von eProfi (Gast)


Lesenswert?

Hast Du ein Oszi / Logicanalyzer?

Der große Vorteil bei I2C ist, dass man ihn beliebig langsam machen 
kann.

Sogar so langsam, dass man an die beiden Leitungen LEDs anschließen kann 
zum "Mitlesen".
Das würde ich Dir empfehlen.
Den DS1631 anzusteuern haben schon tausende geschaft, und ich bin mir 
sicher, Du wirst der Nächste sein.
Beitrag "Re: Anfänge ins Programmieren!"
Er verhält sich exakt so wie im Datasheet beschrieben.

Außerdem gibt es genug Codebeispiele. Suche in
http://www.mikrocontroller.net/search
nach
+DS1631 +pic* (8 Treffer)
oder
+ds1631 +assembler
oder
+ds1631 +asm

Speziell der
Autor: Klaus Ra. (klara)
hat ja Erfahrung mit dem DS1631. Schick ihm doch mal ne PM.

von pacer (Gast)


Lesenswert?

Naja, leider gibt es in Assembler nicht soviele Codebeispiele, zumal 
einige davon auch das I2C in Software realisieren.
Zumindest hab ich es jetzt hinbekommen, nachdem ich das Datenblatt mir 
zum 20. mal angeschaut habe.

Nächste Frage wäre die Umwandlung in eine Temperatur.
Jetzt mal unabahängig davon ob es Sinn macht oder nicht, der Sensor hat 
eine Auflösung von 12 Bits. Ein Digit macht 0,0625°C.

wäre es jetzt sinnvoll den Temperaturwert mit 625 zu multiplizieren und 
anschließend durch 10.0000 zu dividieren?
Oder wie würdet ihr die Umrechnung machen?
Fließkomma-Arithmetik würde ich vermeiden wollen.

Gruß, pacer

von Route_66 (Gast)


Lesenswert?

Hallo!
Vielen Leuten hier im Forum ist die Mathematik so fremd, daß sie mit 
Gleipunktarithmetik um sich werfen, ohne zu wissen was sie tun.
Du bist glaub ich einer von denen, die spontan (aus einem Bauchgefühl?) 
den richtigen Ansatz finden. Das Normalisieren (Multiplikation mit einem 
Skalierungsfaktor - bei dir 625 ) und das anschließend korrekte Setzen 
des Dezimalpunkts (in Deutschland Komma) führt zum richtigen Ergebnis. 
Dies gilt für deine Temperatursensoren natürlich nur für die 
Nachkommastellen im LSB! Das MSB ist, abgesehen vom Zweierkomplement bei 
Minustemperaturen, bereits im richtigen Format.
Für ganz einfache Zwecke habe ich die 16 möglichen Nachkommawerte auch 
schon mal über eine einfache Tabelle zur Anzeige gebracht. Nicht 
elegant, geht aber schnell, braucht wenig Platz und von "Außen" sieht 
man es nicht.

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.