Wcześniej już wiele razy używałem DS1820, ale tym razem mam DS18B20 i wielki problem.
Czujnik się komunikuje z prockiem, ale na LCD pokazuje temperaturę, która ma się nijak do rzeczywistości. Np. W temperaturze pokojowej pokazuje -70 stopni. Sam czujnik reaguje poprawnie na zmianę temperatury, ale wyświetlana wartość jest z kosmosu.
Dodatkowo kiedy czujnik jest podpięty 3 przewodami (plus, minus i dane) ciągle wyświetla się 0 stopni niezależnie od temperatury. Dopiero jak dodatkowo dałem rezystor 2.2k między plusem a danymi to zaczął pokazywać temp, ale taką jak piszę wyżej.
Czujniki to DS18B20 z serii C3 zakupione na Allegro (mam ich kilka sztuk i każdy się tak zachowuje)
Program jest wzięty z książki. Wcześniej go używałem z powodzeniem. Nie rozumiem dlaczego mam takie problemy z tym czujnikiem.
$regfile = "m8def.dat"
Config Lcd = 16 * 2
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.0 , Db6 = Portc.2 , Db7 = Portb.2 , E = Portc.3 , Rs = Portc.4
Config 1wire = Portd.2
Declare Sub Odcz_temp
Dim Temperatura(2) As Byte
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Cursor Off
Cls
Do
Call Odcz_temp
Cls
If Temperatura(2) = 0 Then
Lcd "Temp: " ; Temperatura(1) ; Chr(0) ; "C"
Else
Lcd "Temp: -" ; Temperatura(1) ; Chr(0) ; "C"
End If
Loop
End
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sub Odcz_temp
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
Temperatura(1) = 1wread(2)
1wreset
If Err = 1 Then
Cls
Lcd "Brak czujnika"
Do
Loop
End If
If Temperatura(2) > 0 Then
Temperatura(1) = 256 - Temperatura(1)
End If
Temperatura(1) = Temperatura(1) / 2
End Sub
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++