PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Messung mit DS1820 (Problem negative Werte)



Duesentrieb
20.10.2010, 22:53
Hallo,

ich messe Temperaturen mit dem DS1820 und habe "das Gefühl" dass die Ergebnisse realistisch sind.
D.h. ich bin mir da nicht ganz sicher! Die Auflösung sollte mit meinem Programm bei 0,25°C liegen.
Die Messwerte werden über einen CAN Bus übertragen womit sie in Bytes umgerechnet werden müssen.
Das mache ich zum Schluss.

Nun gehen wir in die kalte Jahreszeit und die Temperaturen gehen unter die 0°C.
Bei mir wird dann aber ein Wert >120°C angezeigt.
Weis jemand wieso?


1wreset ' reset the bus
1wwrite &HCC ' skip rom
1wwrite &H44 ' Convert T


Portc.3 = 1
Waitms 800
Portc.3 = 0


1wreset
1wwrite &H55

For B = 1 To 8
1wwrite Dsid1(b)
Next I

' Temperaturbytes auswerten

1wwrite &HBE


Rom(1) = 1wread(1)

If Rom(1) < 0 Then 'Negative Werte feststellen und Vorzeichenbit setzen
Rom(1) = Rom(1) * -1
Vorzeichen = 0
Else
Vorzeichen = 1
End If


Nachkommav = Rom(1) / 2
Tempv = Rom(1) / 2

Tempdifv = 16 - Rom(7)
Tempdifv = Tempdifv / 16
Tempdifv = 0.25 * Tempdifv
Nachkomma = Nachkommav + Tempdifv


Nachkomma = Nachkomma - Tempv
Nachkomma = Nachkomma * 100
Nachkomma = Nachkomma + 100 'Hundert hinzurechnen um alle Stellen zu übertragen (03 wird nur als 3 übertragen)

Nachkommax = Nachkomma


'Ausgabe der Temperatur in 3 Bytes
'Beispiel:

' 12,03°C

' Byte 1 - Vorzeichen - 0 - 000
' Byte 2 - Tempv - 12 - 012
' Byte 3 - Nachkomma - 103 - 103

for_ro
21.10.2010, 00:16
Hallo Düsentrieb,
hiermit
Rom(1) = 1wread(1)
liest du genau 1 Byte ein. Das Vorzeichen steht aber im zweiten Byte.
Außerdem läuft das hier
Tempdifv = 16 - Rom(7)
ins Leere, weil rom(7) nicht eingelesen wird und daher immer 0 ist.
Ändere das mal so ab:
Rom(1) = 1wread(9)
Damit liest du alle Bytes ein, die der Sensor zur Verfügung stellt.
Deine Umrechnung scheint mir etwas "seltsam" zu sein. Schau doch noch einmal in das Datenblatt.