Witam.
Dostałem 4 sztuki ds18b20 w samplach i konstruuję termometr do szkoły. Napisałem program,udało mi się połączyć z czunikami i wyświetlić temperaturę na LCD,wszystko było ok. Oba czujniki miałem zamontowane na płytce prototypowej(mam na niej zmontowany cały układ). Po pierwszych testach przylutowałem do jednego czujnika skrętkę o długości ok 30 cm żeby móc sprawdzić go w ujemnej temperaturze. Działał dobrze,a ponieważ był na długim przewodzie zamocowałem go przy transformatorze żeby mierzył temperaturę rdzenia. No i nadal wszystko było ok,ale do czasu...czujnik dostał szajby,nic nie zmieniałem w programie,co prawda ds18b20 nadal pokazuje temperaturę poprawnie ale czasem wyświetla wartość z kosmosu,na przykład 153,3°C albo ponad 1000°C. Wie ktoś może czego to może być wina? Czy może to być wina przerwania w programie,które ma służyć do multipleksowego wyświetlania temperatury na modułach LED(często przerywa program,ale wcześniej nie przeszkadzało to w odczycie temperatury)? Dodam jeszcze że gdy zamieniłem czujniki miejscami to błędne wyniki dochodziły do atmegi8 nadal z tego samego czujnika. Co prawda mam jeszcze 3 sztuki tych termometrów,ale ta czwarta też by mi się przydała,jeżeli wie ktoś co mogło się z nim stać to proszę o odpowiedź
Załączam kod źródłowy programu,napisany jest w bascomie,czujniki są podłączone na osobnych magistralach
Dostałem 4 sztuki ds18b20 w samplach i konstruuję termometr do szkoły. Napisałem program,udało mi się połączyć z czunikami i wyświetlić temperaturę na LCD,wszystko było ok. Oba czujniki miałem zamontowane na płytce prototypowej(mam na niej zmontowany cały układ). Po pierwszych testach przylutowałem do jednego czujnika skrętkę o długości ok 30 cm żeby móc sprawdzić go w ujemnej temperaturze. Działał dobrze,a ponieważ był na długim przewodzie zamocowałem go przy transformatorze żeby mierzył temperaturę rdzenia. No i nadal wszystko było ok,ale do czasu...czujnik dostał szajby,nic nie zmieniałem w programie,co prawda ds18b20 nadal pokazuje temperaturę poprawnie ale czasem wyświetla wartość z kosmosu,na przykład 153,3°C albo ponad 1000°C. Wie ktoś może czego to może być wina? Czy może to być wina przerwania w programie,które ma służyć do multipleksowego wyświetlania temperatury na modułach LED(często przerywa program,ale wcześniej nie przeszkadzało to w odczycie temperatury)? Dodam jeszcze że gdy zamieniłem czujniki miejscami to błędne wyniki dochodziły do atmegi8 nadal z tego samego czujnika. Co prawda mam jeszcze 3 sztuki tych termometrów,ale ta czwarta też by mi się przydała,jeżeli wie ktoś co mogło się z nim stać to proszę o odpowiedź
Załączam kod źródłowy programu,napisany jest w bascomie,czujniki są podłączone na osobnych magistralach
$crystal = 8000000
Config Portc = Output
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 2
Cursor Off Noblink
Config Pind.2 = Output
Config Pind.3 = Output
Portd.2 = 1
Portd.3 = 0
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Dim Tds1 As Integer , Tds2 As Integer
Dim Temp1 As Single , Temp2 As Single
Dim Temp As Integer
Dim Sds As String * 6
Dim A As Integer , B As Integer , C As Integer
Config Timer1 = Timer , Prescale = 256
On Timer1 Led
Enable Interrupts
Counter1 = 65500
Enable Timer1
Start Timer1
Cls
Do
Config 1wire = Portb.0
1wreset
1wwrite &HCC
1wwrite &H44
Config 1wire = Portd.7 'ustawienie 1wire na pierwszy czujnik
1wreset 'reset magistrali
1wwrite &HCC 'skip rom
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
Tds1 = 1wread(2)
1wreset
Config 1wire = Portb.0
1wreset
1wwrite &HCC
1wwrite &HBE
Tds2 = 1wread(2)
1wreset
'przeliczanie i wyświetlanie temperatury 1
Temp1 = Tds1 / 16
Sds = Fusing(temp1 , "#.#")
Locate 1 , 1
Lcd "Temp1:" ; Sds ; Chr(0) ; "C"
'przeliczanie i wyświetlanie temperatury 2
Temp2 = Tds2 / 16
Sds = Fusing(temp2 , "#.#")
Locate 2 , 1
Lcd "Temp2:" ; Sds ; Chr(0) ; "C"
Loop
End
Led:
Portd.2 = Not Portd.2
Portd.3 = Not Portd.3
Counter1 = 65500
Return