Hallo zusammen,
ich habe heute versucht, in mein eigentlich gut funktionierendes Messprogramm mit 4 ds1820 Sesoren eine Auswertung der Checksumme zu integrieren, um die gelegentlichen Fehlmessungen zu eliminieren. Leider stehe ich ein wenig auf dem Schlauch. Die Sensoren sind an die Pins C1 bis C4 angeschlossen. Es wird eine dreipolige Versorgung (keine parasitäre Speisung) verwendet. Mein ursprüngliches Programm:
Für die Checksummenauswertung habe ich auf den RN Wissensbeitrag http://www.rn-wissen.de/index.php/Bascom_und_1-Wire zurückgegriffen.Code:Messen: For I = 1 To Sensoren 1wreset Pinc , I 'Reset DS1820 1wwrite &HCC , 1 , Pinc , I 'überspringe ROM 1wwrite &H44 , 1 , Pinc , I 'starte Temperaturkonvertierung Next I Return Auslesen: For I = 1 To Sensoren 1wreset Pinc , I 'Reset DS1820 1wwrite &HCC , 1 , Pinc , I 'Überspringe ROM 1wwrite &HBE , 1 , Pinc , I 'sende T-Register 60h und 61h an Atmel Ds1820 = 1wread(2 , Pinc , I) 'lese die empfangenen Daten 2 Byte 1wreset Pinc , I 'Reset DS1821 Halb = Ds1820 And 1 'prüfen auf letztes Bit (x.5 Grad) Shift Ds1820 , Right 'entferne letztes Bit (Rechtsschieben) Ds1820 = Ds1820 And 255 'Nur die unteren 8 Bit werden benötigt If I = 1 Then Tesp = Ds1820 'Ganzzahlige Temperatur der ESP (1 Byte) ' End If Vorzeichen = " " 'Vorzeichen zurücksetzen If Ds1820 > 127 Then 'wenn Temperatur negativ ist Vorzeichen = "-" Ds1820 = 256 - Ds1820 'und negative Temperatur berechnen If Halb = 1 Then Ds1820 = Ds1820 - 1 'wenn Wert x.5 dann um 1 korrigieren End If End If If Halb = 1 Then Nachkomma = "5" 'wenn x.5 Else 'wenn x.0 Nachkomma = "0" End If Temperatur = " " + Vorzeichen + Str(ds1820) '"-_-xxx" Temperatur = Right(temperatur , 4) '"-xxx" Temperatur = Temperatur + "." + Nachkomma + Chr(223) + "C" '"-xxx.y°C" 8 Zeichen Sensor(i) = Temperatur Next I Return
Mein Testcode sieht so aus:
Nach der Änderung werden die gelegentlichen Fehlmessungen erkannt, leider klappt die Temperaturmessung nicht mehr. Durch diverse Tests habe ich festgestellt, das das Array Ar(1) bis Ar(9) unabhängig von der Sensortemperatur konstante Werte aufweist. Soweit ich das Datenblatt verstanden habe, sollte doch die Temperatur in den ersten beiden Bytes enthalten sein?Code:Messen: For I = 1 To Sensoren 1wreset Pinc , I 'Reset DS1820 1wwrite &HCC , 1 , Pinc , I 'überspringe ROM 1wwrite &H44 , 1 , Pinc , I 'starte Temperaturkonvertierung Next I Return Auslesen: For I = 1 To Sensoren 1wreset Pinc , I 'Reset DS1820 1wwrite &H33 , 1 , Pinc , I Ar(1) = 1wread(9 , Pinc , I) Ds1820 = Makeint(ar(1) , 2) If Ar(8) = Crc8(ar(1) , 7) Then Sensor(i) = Str(ar(1)) + "," + Str(ar(2)) Goto Ende Else 'Fehler Gosub Beep Waitms 100 Sensor(i) = "Fehler" Goto Ende End If 1wreset Pinc , I 'Reset DS1821 Halb = Ds1820 And 1 'prüfen auf letztes Bit (x.5 Grad) Shift Ds1820 , Right 'entferne letztes Bit (Rechtsschieben) Ds1820 = Ds1820 And 255 'Nur die unteren 8 Bit werden benötigt If I = 1 Then Tesp = Ds1820 'Ganzzahlige Temperatur der ESP (1 Byte) ' End If Vorzeichen = " " 'Vorzeichen zurücksetzen If Ds1820 > 127 Then 'wenn Temperatur negativ ist Vorzeichen = "-" Ds1820 = 256 - Ds1820 'und negative Temperatur berechnen If Halb = 1 Then Ds1820 = Ds1820 - 1 'wenn Wert x.5 dann um 1 korrigieren end If End If If Halb = 1 Then Nachkomma = "5" 'wenn x.5 Else 'wenn x.0 Nachkomma = "0" End If Temperatur = " " + Vorzeichen + Str(ds1820) '"-_-xxx" Temperatur = Right(temperatur , 4) '"-xxx" Temperatur = Temperatur + "." + Nachkomma + Chr(223) + "C" '"-xxx.y°C" 8 Zeichen Sensor(i) = Temperatur Ende: Next I Return
Für den Test habe ich, weil ich nur einen verfügbaren ds1820 habe, die Variable "Sesoren" auf 1 gesetzt. Die anderen Sensoren sind wie die Schaltung normalerweise auch fest im Auto eingebaut. Die "Gotos" sind nur zum Testen im Code. Zur Aufbereitung des Messwertes wird die Variable ds1820 verwendet. Hat jemand eine Idee, wo genau ich da gerade auf dem Schlauch stehe?
Danke und Gruß
Horst







Zitieren

Lesezeichen