Obwohl beide Sensoren eine 12bit-Auflösung haben, führt der DS1820 nur 9 Bit in seinen internen Temperatur-Registern, der DS18B20 alle 12 Bit.Zitat von Pöler
Diese Temperatur-Register liest Du in der Zeile
Ds1820 = 1wread(2 , Pinc , I)
ein, wobei die Variable DS1820 vermutlich als Integer oder Word dimensioniert ist. Bei einem angeschlossenen DS18B20 erhälst du nun wegen der 12bit einen 8-fach höheren Wert, was durch die Zeile
If Ds1820 > 127 Then
Vorzeichen = "-"
...
zu einer negativen Anzeige führt. Der absolute Temperaturwert ist natürlich auch völlig falsch.
Als Abhilfe ändere die Zeile
Ds1820 = 1wread(2 , Pinc , I)
in
Ds1820 = 1wread(2 , Pinc , I) / 8
was einem arithmetischem Schieben um 3 Bit nach rechs entspricht, oder kaufe dir beim nächsten Mal DS18S20 Sensoren, welche die gemessene Temperatur wie die DS1820 auch im 9bit-Format in ihren Registern ablegen.
Offtopic:
Diese Codevariante mit der Variablen "Halb" und dem Auswerten des Vorzeichens, etc., sieht man häufig in diversen Foren. Vermutlich ist der vor langer Zeit mal in Assembler erstellt und dann immer wieder übernommen worden. Man sollte sich da was zeitgemäßeres gönnen oder selbst programmieren.
MFG
screwdriver
Lesezeichen