Piszę program do prostego sterownika pieca, w książce "Programowanie mikrokontrolerów avr w j. Bascom" mam opisana obsługę czujnika DS1820, w sklepie elektronicznym w moim mieście mieli tylko DS18B20, myślałem że nie będą się może różnić za wiele, mogłem zajrzeć do noty katalogowej ale już za późno. Przeglądałem noty katalogowe tych dwóch układów, z tego co się na razie dowiedziałem to różnią się sposobem przetwarzania temperatury na sygnał cyfrowy. Próbowałem przerobić jakoś ten program ale nie bardzo mi to wychodziło, może ktoś kto się bardziej na tym zna poradzi sobie bez problemu ze zmianą kodu, bo mi sie to na razie nie udaje.
Poniżej zamieszczam ten kod który mam z książki:
Czujnik DS18B20 z tym programem działa niepoprawnie tzn:
- pokazuje temperaturę ujemną,
- temperatura jest za "duża" (-60 stopni C w tem. domowej),
- podczas nagrzewania tem. rośnie tzn minus jest coraz mniejszy
- podczas przekraczania 0 stopni zamiast wskoczyć plus pojawia się -127
Będę wdzięczny za pomoc bo jak na razie nie udało mi sie tak zmodyfikować programu aby działał poprawnie.
Poniżej zamieszczam ten kod który mam z książki:
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 24 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config 1wire = Portb.0
Declare Sub Odczyt_temp
Dim Temperatura(2) As Byte
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Do
Call Odczyt_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 Odczyt_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 ukladu"
Do
Loop
End If
If Temperatura(2) > 0 Then
Temperatura(1) = 256 - Temperatura(1)
End If
Temperatura(1) = Temperatura(1) / 2
End Sub
Czujnik DS18B20 z tym programem działa niepoprawnie tzn:
- pokazuje temperaturę ujemną,
- temperatura jest za "duża" (-60 stopni C w tem. domowej),
- podczas nagrzewania tem. rośnie tzn minus jest coraz mniejszy
- podczas przekraczania 0 stopni zamiast wskoczyć plus pojawia się -127
Będę wdzięczny za pomoc bo jak na razie nie udało mi sie tak zmodyfikować programu aby działał poprawnie.