Komunikacja z ds18b20 jest , odczyt temperatury dodatniej też, natomiast problem pojawia się wraz z odczytem temperatury ujemnej. Zgodnie z dokumentacją przy temperaturach ujemnych bity 11 do 15 powinny przyjąć „1”. Po odczycie danych z ds. bity 11 do 15 zawierają „0” jak dla temperatury dodatniej.
Krótki kod
Kod: Zaznacz cały
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portb.6 , Rs = Portb.7
Cursor Off
Config 1wire = Portb.1
Dim Temp As Word
Dim Temp1 As Integer
Do
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
1wreset
1wwrite &HCC
1wwrite &HBE
Temp = 1wread(2)
Temp1 = Temp * 10
Temp1 = Temp1 / 16
Cls
'Lcd Odczyt(1) ; Odczyt(2) ; Odczyt(3) ; Odczyt(4) ; Odczyt(5) ; Odczyt(6)
Lcd Temp1
Lowerline
Lcd Temp.15 ; Temp.14 ; Temp.13 ; Temp.12 ; Temp.11 ; Temp.10 ; Temp.9 ; Temp.8 ; Temp.7 ; Temp.6 ; Temp.5 ; Temp.4 ; Temp.3 ; Temp.2 ; Temp.1 ; Temp.0
Loop
End
Czy ja nie zrozumiałem datasheet, czy błędnie jest napisany przykładowy kod.