Całego kodu nie mogę podrzucić, bo:
- nie mam odczytu z eepromu,
- nie wiem, czy zapis do eeprom ma być jednorazowy w momencie programowania procesora, czy ma być jednorazowy po pierwszym uruchomieniu programu, czy ma być wielokrotny w dowolnym momencie np. po zmianie termometru i wciśnięciu - dajmy na to - dowolnego guzika,
- nie mam zrealizowanego szukania termometrów a tylko dane ich mam wpisane na sztywno w pamięci programu.
- nie specjalnie wiem jak używać 1wsearchfirst, ale daję Ci pkt zaczepienia. Na podstawie Helpu i forum łatwo dojść o co w tym biega.
Całe moje procedury odczytu masz niżej. Zmienne już podałem. Problem jest tylko taki, że przed napisaniem programu musisz znać ID termometrów.
Config 1wire = Portb.3 'linia dwóch termometrów
Gosub Inicjalizacja_ds
Do
'tu jakis warunek w którym następuje odczyt temperatur
'plus obsługa wyświetlania stringów na LCD
Loop
End
Inicjalizacja_ds:
Restore Termometr1 'wczytuje ID rermometru 1 do zmiennej DSID1
For I = 1 To 8
Read Odczyt(2)
Dsid1(i) = Odczyt(2)
Next I
Restore Termometr2 'wczytuje ID rermometru 2 do zmiennej DSID2
For I = 1 To 8
Read Odczyt(2)
Dsid2(i) = Odczyt(2)
Next I
Return
Pomiar_temperatury:
'pobranie temperatur z termometrow
'i przypisanie wyników stringom S1..S3
1wreset
1wwrite &HCC
1wwrite &H44
'Waitms 750
Toggle Termometr 'odczyt naprzemienny obu termometrów
If Termometr = 1 Then 'termometr wewnętrzny
1wreset
1wwrite &H55
1wwrite Dsid1(1) , 8
1wwrite &HBE 'SKIP ROM + dokonaj konwersji
Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty
Minus = 0
If Odczyt(2) >= 248 Then 'wartość ujemna
Odczyt(1) = 255 - Odczyt(1)
Odczyt(2) = 255 - Odczyt(2)
Minus = 1
End If
T1_j = Makeint(odczyt(1) , Odczyt(2))
T1 = T1_j * 10
T1 = T1 / 16
T1_j = T1
T1_d = T1_j Mod 10
T1_j = T1_j / 10
If Minus = 1 Then T1_j = -t1_j
S1 = Str(t1_j)
S2 = Str(t1_d)
S1 = S1 + "," + S2
X = Len(s1)
Select Case X
Case 3 : S2 = "T) " + S1
Case 4 : S2 = "T) " + S1
Case 5 : S2 = "T) " + S1
Case 6 : S2 = "T)" + S1
End Select
Else 'termometr zewnętrzny
1wreset
1wwrite &H55
1wwrite Dsid2(1) , 8
1wwrite &HBE 'SKIP ROM + dokonaj konwersji
Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty
Minus = 0
If Odczyt(2) >= 248 Then 'wartość ujemna
Odczyt(1) = 255 - Odczyt(1)
Odczyt(2) = 255 - Odczyt(2)
Minus = 1
End If
T1_j = Makeint(odczyt(1) , Odczyt(2))
T1 = T1_j * 10
T1 = T1 / 16
T1_j = T1
T1_d = T1_j Mod 10
T1_j = T1_j / 10
If Minus = 1 Then T1_j = -t1_j
S1 = Str(t1_j)
S3 = Str(t1_d)
S1 = S1 + "," + S3
X = Len(s1)
Select Case X
Case 3 : S3 = "T( " + S1
Case 4 : S3 = "T( " + S1
Case 5 : S3 = "T( " + S1
Case 6 : S3 = "T(" + S1
End Select
End If
'linia 1
S1 = " "
Return
$eeprom
Termometr2: 'nr seryjny termometru 1
Data 40 , 25 , 0 , 133 , 2 , 0 , 0 , 196
Termometr1: 'nr seryjny termometru 2
Data 40 , 93 , 233 , 132 , 2 , 0 , 0 , 203