Pöler
07.12.2009, 20:36
Guten Abend zusammen,
gibt es programmtechnisch Unterschiede zwischen dem Dalls DS1820 und dem DS18B20? Hintergrund meiner Frage:
Seit Jahren habe ich einen Mega8 mit 4 DS1820 im Auto im Einsatz. Da ich jetzt mal das Progamm ein wenig ändern wollte, habe ich den Rechner ausgebaut und zum Testen einen DS18B20 angeschlossen. Der und ein zweiter, den ich zur Sicherheit mal angeschlossen habe, zeigen nur Müll an, meist negative Werte, die sich auch bei jeder Messung ändern.
Die 4 funktionierenden Sensoren sind leider mehr oder weniger fest im Auto eingebaut. Weitere DS1820 habe ich leider nicht zur Verfügung. Sowohl die originalen Sensoren als auch die zum Testen angeschlossenen laufen nicht im parasitäten Modus und haben je einem 4,7K Widerstand von DQ nach +. Verringerung des Widerstands (Parallelschaltung) hat auch keine Verbesserung gebracht. Die benutzten Pins sind Pinc.1 bis Pinc.4.
Temperaturmessung:
If Tempmess >= 96 And Verriegelung = 0 Then '1920 ms (96*20) seit dem Reset vergangen
Gosub Messen 'Also Temperaturmessung
Tempmess = 0
Verriegelung = 1 'Und Zähler zurücksetzen
End If
If Tempmess >= 4 And Verriegelung = 1 Then '80ms (4*20) nach Reset auslesen der Temp. Sensoren
Gosub Auslesen
Tempmess = 0
Verriegelung = 0
End If
Return
Messen:
For I = 1 To 4
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 4
1wreset Pinc , I 'Reset DS1821
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
Ds1820a(i) = Ds1820 'Zum Anzeigen des ausgelesenen Wertes (Sensortest)
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
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
Else 'wenn Temperatur Positiv
Vorzeichen = " "
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"
Sensor(i) = Temperatur
Next I
Return
Ausschließen kann ich das die DS18B20 mal verkehrt angeschlossen wurden. Die Schaltung wurde bereits mehrfach überprüft / nachgemessen.
Hat jemand eine Idee, wie die beiden Sensoren unter einen Hut zu bekommen sind?
Danke und Gruß
Horst
gibt es programmtechnisch Unterschiede zwischen dem Dalls DS1820 und dem DS18B20? Hintergrund meiner Frage:
Seit Jahren habe ich einen Mega8 mit 4 DS1820 im Auto im Einsatz. Da ich jetzt mal das Progamm ein wenig ändern wollte, habe ich den Rechner ausgebaut und zum Testen einen DS18B20 angeschlossen. Der und ein zweiter, den ich zur Sicherheit mal angeschlossen habe, zeigen nur Müll an, meist negative Werte, die sich auch bei jeder Messung ändern.
Die 4 funktionierenden Sensoren sind leider mehr oder weniger fest im Auto eingebaut. Weitere DS1820 habe ich leider nicht zur Verfügung. Sowohl die originalen Sensoren als auch die zum Testen angeschlossenen laufen nicht im parasitäten Modus und haben je einem 4,7K Widerstand von DQ nach +. Verringerung des Widerstands (Parallelschaltung) hat auch keine Verbesserung gebracht. Die benutzten Pins sind Pinc.1 bis Pinc.4.
Temperaturmessung:
If Tempmess >= 96 And Verriegelung = 0 Then '1920 ms (96*20) seit dem Reset vergangen
Gosub Messen 'Also Temperaturmessung
Tempmess = 0
Verriegelung = 1 'Und Zähler zurücksetzen
End If
If Tempmess >= 4 And Verriegelung = 1 Then '80ms (4*20) nach Reset auslesen der Temp. Sensoren
Gosub Auslesen
Tempmess = 0
Verriegelung = 0
End If
Return
Messen:
For I = 1 To 4
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 4
1wreset Pinc , I 'Reset DS1821
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
Ds1820a(i) = Ds1820 'Zum Anzeigen des ausgelesenen Wertes (Sensortest)
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
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
Else 'wenn Temperatur Positiv
Vorzeichen = " "
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"
Sensor(i) = Temperatur
Next I
Return
Ausschließen kann ich das die DS18B20 mal verkehrt angeschlossen wurden. Die Schaltung wurde bereits mehrfach überprüft / nachgemessen.
Hat jemand eine Idee, wie die beiden Sensoren unter einen Hut zu bekommen sind?
Danke und Gruß
Horst