Witam serdecznie.
Mam taki problem, otóż:
Zaprojektowałem sterownik do pieca c.o. i kolektorów. Do pomiaru temperatury zastosowałem 3 x DS18B20 na magistrali 1Wire. Program napisany w języku BASCOM. Jeżeli jest taki przypadek, że nastąpi przerwa w torze transmisji jednego z czujników np.DS1 (nóżka Data) to mikroprocesor nadpisuje wartość temperatury z innego czujnika, np.DS2. Szukałem już wszędzie, lecz nigdzie nie znalazłem odpowiedzi jak rozwiązać ten problem. Proszę o jakieś wskazówki, najlepiej praktyczne rozwiązania.
Mam taki problem, otóż:
Zaprojektowałem sterownik do pieca c.o. i kolektorów. Do pomiaru temperatury zastosowałem 3 x DS18B20 na magistrali 1Wire. Program napisany w języku BASCOM. Jeżeli jest taki przypadek, że nastąpi przerwa w torze transmisji jednego z czujników np.DS1 (nóżka Data) to mikroprocesor nadpisuje wartość temperatury z innego czujnika, np.DS2. Szukałem już wszędzie, lecz nigdzie nie znalazłem odpowiedzi jak rozwiązać ten problem. Proszę o jakieś wskazówki, najlepiej praktyczne rozwiązania.
...
Cls
'ilość podpiętych czujnikow temperatury
W = 1wirecount()
Lcd "Ilosc czujnikow temp"
Locate 2 , 9
Lcd "-" ; W ; "-"
Wait 2
Cls
'odczyt ID czujników temperatury
Dsic1(1) = 1wsearchfirst()
If Dsic1(8) = Crc8(dsic1(1) , 7) Then
Locate 1 , 1
Lcd "CRC OK Czujnik 1 ID"
Id_ds1 = Dsic1(8)
E_id_ds1 = Id_ds1
Wait 1
Locate 1 , 1
For A = 1 To 8
Lcd Hex(dsic1(a))
Next
End If
Wait 1
Dsic2(1) = 1wsearchnext()
If Dsic2(8) = Crc8(dsic2(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Czujnik 2 ID"
Id_ds2 = Dsic2(8)
E_id_ds2 = Id_ds2
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsic2(b))
Next
End If
Wait 1
Dsic3(1) = 1wsearchnext()
If Dsic3(8) = Crc8(dsic3(1) , 7) Then
Locate 1 , 1
Lcd "CRC OK Czujnik 3 ID"
Id_ds3 = Dsic3(8)
e_id_ds3 = Id_ds3
Wait 1
Locate 1 , 1
For C = 1 To 8
Lcd Hex(dsic3(c))
Next
End If
Wait 1
1wreset
1wwrite &HCC
1wwrite &H44
...
1wreset
1wwrite &H55
1wverify Dsic1(1)
1wwrite &HBE
Tp = 1wread(2)
Tp = Tp * 10
Tp = Tp / 16
S1 = Str(tp)
S1 = Format(s1 , " 0.0")
Locate 1 , 1
Lcd "Piec " ; S1 ; Chr(0) ;
1wreset
1wwrite &H55
1wverify Dsic2(1)
1wwrite &HBE
Tb = 1wread(2)
Tb = Tb * 10
Tb = Tb / 16
S2 = Str(tb)
S2 = Format(s2 , " 0.0")
Locate 1 , 11
Lcd Chr(1) ; "Boj " ; S2 ; Chr(0) ;
1wreset
1wwrite &H55
1wverify Dsic3(1)
1wwrite &HBE
Tk = 1wread(2)
Tk = Tk * 10
Tk = Tk / 16
S3 = Str(tk)
S3 = Format(s3 , " 0.0")
Locate 2 , 11
Lcd Chr(1) ; "Kol " ; S3 ; Chr(0) ;
'konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44