Mam znów mały problem:cry: Wykonałem termometr na jednym ds18b20 (kod do niego wziąłem gdzieś z forum) i problem jest z tym, ze wydaje mi się , ze zawyża on temp. o okolo 2-3 stopnie. Czy mógłby ktoś poprawić ten kod tak, żeby wyświietlana temp była mniejsza o 3 stopnie. Próbowałem wykonać to zmniejszając zmienną T (czyli np. TR = T - 3 i na wyświetlaczu zamiast T wyświetlałem TR) ale wychodzą z tego jakieś głupoty. Termometr wskazuje wtedy jak dobrze pamiętam +256 (lub coś koło tego) i nie reaguje na żadne zmiany temperatury. Za porządnie udzieloną pomoc daje 20 pkt. , gdyż ten termometr jest mi niezbedny w najlizszym terminie.
Oto kod:
Oto kod:
$regfile = "m8def.dat"
$crystal = 1000000
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
Config 1wire = Portd.0
Dim Temp1 As Byte
Dim Temp2 As Byte
Dim Setne As Byte
Dim T As Byte
Dim Znak As String * 1
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Cursor Off
Cls
do
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 800
1wreset
1wwrite &HCC
1wwrite &HBE
Temp1 = 1wread()
Temp2 = 1wread()
If Temp2 >= 248 Then
Temp1 = 255 - Temp1
Temp2 = 255 - Temp2
Znak = "-"
Else
Znak = "+"
End If
Setne = 0
Temp1.0 = 0
Temp1.1 = 0
Temp1.2 = 0
Setne.3 = Temp1.3
Temp1.3 = 0
Temp1 = Temp1 / 16
Temp2 = Temp2 * 16
If Setne = 8 Then
Setne = 5
Else
Setne = 0
End If
T = Temp1 + Temp2
If T < 10 Then
Locate 1 , 10
Lcd "" ; Znak ; T ; "." ; Setne ; Chr(0) ; "C"
Else
Locate 1 , 10
Lcd "" ; Znak ; T ; "." ; Setne ; Chr(0) ; "C"
End If
loop
end