Witam
Próbuje przerobić kod obsługujący kilka DS18B20 na jednej linii i drugi obsługujący kilka DS18B20 na kilku liniach. Niestety jak na razie efekt jest taki, że działa tylko pierwsza linia, czyli dwa DS18B20. Jeśli chodzi o konfiguracje, to celowo nie ma Config 1wire = Porta.1 gdyż wpisanie tego portu, jako 1WIRE powoduje wyświetlanie 0.0 dla pierwszego portu ( czyli dwóch DS18B20 ) i wyświetlanie wskazań tylko jednego czujnika DS18B20 z drugiego portu. Przy wersji, jeden DS18B na jednej linii korzystałem z &HCC, przy wersji z kilkoma DS18B20 na jednej linii korzystałem z &H55, a teraz nie za bardzo wiem jak to połączyć.
Próbuje przerobić kod obsługujący kilka DS18B20 na jednej linii i drugi obsługujący kilka DS18B20 na kilku liniach. Niestety jak na razie efekt jest taki, że działa tylko pierwsza linia, czyli dwa DS18B20. Jeśli chodzi o konfiguracje, to celowo nie ma Config 1wire = Porta.1 gdyż wpisanie tego portu, jako 1WIRE powoduje wyświetlanie 0.0 dla pierwszego portu ( czyli dwóch DS18B20 ) i wyświetlanie wskazań tylko jednego czujnika DS18B20 z drugiego portu. Przy wersji, jeden DS18B na jednej linii korzystałem z &HCC, przy wersji z kilkoma DS18B20 na jednej linii korzystałem z &H55, a teraz nie za bardzo wiem jak to połączyć.
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcdbus = 4
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5 , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2
Config 1wire = Porta.0
Dim Ds1(8) As Byte 'zmienna określająca numer układu
Dim Ds2(8) As Byte 'zmienna określająca numer układu
Dim Ds3(8) As Byte
Dim Ds4(8) As Byte
Dim Ss1 As String * 6
Dim Ss2 As String * 6
Dim T1 As Integer
Dim T2 As Integer
Dim T3 As Integer
Dim T4 As Integer
'zmienna odczytu dwóch bajtów z DS18B20
'zmienna odczytu dwóch bajtów z DS18B20
Dim W As Byte
Dim B As Byte
Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32 ' znak stopnia celcjusza
Cursor Off
Cls
Ds1(1) = 1wsearchfirst()
Ds2(1) = 1wsearchnext()
Ds3(1) = 1wsearchnext()
Ds4(1) = 1wsearchnext()
'*************************** pomiar temp. na termometrze ds18b20
Do
'********** magistrala 1-wire 1 czujnik 1
1wreset Pina , 0 'reset magistrali 1-wire
1wwrite &H55 , 1 , Pina , 0 'rozkaz adresowy MATCH ROM
1wverify Ds1(1) 'sprawdź adres
1wwrite &HBE , 1 , Pina , 0 'rozkaz funkcyjny polecenie odczytu DS18B20
T1 = 1wread(2) 'odczytaj dwa pierwsze bajty
'czekaj 750 ms
'********** magistrala 1-wire 1 czujnik 2
1wreset Pina , 0 'reset magistrali 1-wire
1wwrite &H55 , 1 , Pina , 0 'rozkaz adresowy MATCH ROM
1wverify Ds2(1) 'sprawdź adres
1wwrite &HBE , 1 , Pina , 0 'rozkaz funkcyjny polecenie odczytu DS18B20
T2 = 1wread(2) 'odczytaj dwa pierwsze bajty
'czekaj 750 ms
'********** magistrala 1-wire 2 czujnik 1
1wreset Pina , 1 'reset magistrali 1-wire
1wwrite &H55 , 1 , Pina , 1 'rozkaz adresowy MATCH ROM
1wverify Ds3(1) 'sprawdź adres
1wwrite &HBE , 1 , Pina , 1 'rozkaz funkcyjny polecenie odczytu DS18B20
T3 = 1wread(2) 'odczytaj dwa pierwsze bajty
'czekaj 750 ms
'********** magistrala 1-wire 2 czujnik 2
1wreset Pina , 1 'reset magistrali 1-wire
1wwrite &H55 , 1 , Pina , 1 'rozkaz adresowy SKIP ROM
1wverify Ds4(1) 'sprawdź adres
1wwrite &HBE , 1 , Pina , 1 'rozkaz funkcyjny polecenie odczytu DS18B20
T4 = 1wread(2) 'odczytaj dwa pierwsze bajty
'czekaj 750 ms
'********** konwersja temperatury dla wszystkich DS18B20
1wreset Pina , 0
1wwrite &HCC , 1 , Pina , 0
1wwrite &H44 , 1 , Pina , 0
1wreset Pina , 1
1wwrite &HCC , 1 , Pina , 1
1wwrite &H44 , 1 , Pina , 1
Wait 1
'**************** pierwsze wejście - pierwszy DS18B20 obliczenia + wyświetlanie **********
T1 = T1 * 10
T1 = T1 / 16
'If Tc1 > 0 Then Cls 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss1 = Str(t1)
Ss1 = Format(ss1 , " 0.0") 'formatuj według wzorca - jedno miejsce po przecinku
Locate 1 , 1 'wyświetl w pozycji
Lcd Ss1 ; Chr(0) ; "C " 'wyświetl wynik formatowania + znak specjalny + C
'**************** pierwsze wejście - drugi DS18B20 obliczenia + wyświetlanie **********
T2 = T2 * 10
T2 = T2 / 16
'If Tc2 > 0 Then Cls 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss1 = Str(t2)
Ss1 = Format(ss1 , " 0.0") 'formatuj według wzorca - jedno miejsce po przecinku
Locate 1 , 10 'wyświetl w pozycji
Lcd Ss1 ; Chr(0) ; "C " 'wyświetl wynik formatowania + znak specjalny + C
'**************** pierwsze wejście - drugi DS18B20 obliczenia + wyświetlanie **********
T3 = T3 * 10
T3 = T3 / 16
'If Tc2 > 0 Then Cls 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss2 = Str(t3)
Ss2 = Format(ss2 , " 0.0") 'formatuj według wzorca - jedno miejsce po przecinku
Locate 2 , 1 'wyświetl w pozycji
Lcd Ss2 ; Chr(0) ; "C "
'**************** pierwsze wejście - drugi DS18B20 obliczenia + wyświetlanie **********
T4 = T4 * 10
T4 = T4 / 16
'If Tc2 > 0 Then Cls 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss2 = Str(t4)
Ss2 = Format(ss2 , " 0.0") 'formatuj według wzorca - jedno miejsce po przecinku
Locate 2 , 10 'wyświetl w pozycji
Lcd Ss2 ; Chr(0) ; "C " 'wyświetl wynik formatowania + znak specjalny + C
Loop
End
Pozdrawiam
Piotr