ADVERTISEMENT

4x DS18b20, LCD 2x16 wyświetlanie naprzemian.txt

4x DS18b20 +LCD = Termometr

Witam, zrobiłem swoją wersję na LCD 2x16 z 4 czujnikami, wyświetlanie wyników na przemian. Mógłby ktoś sprawdzić kod?


Download file - link to post

'Termometr 4 punktowy DS18b20 by Duch na podstawie materia³ów znalezionych w sieci
'Kontakt duszkowski@o2.pl


$regfile = " m8def.DAT " 'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000 'deklaracja czeœtotlwioœci pracy (wew oscylator 1MHz w zupe³noœci wystarcza)
'Deklaracja portów od wyœwietlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5

Config Lcd = 16 * 2 'ustawiamy typ wyœwietlacza (soft jest dostosowany do pracy z wyœwietlaczem 2x20, przy pracy z innym wyœwietlaczem trzeba bêdzie skorygowaæ wyœwietlanie znaków)

'*************************************WA¯NE**********************************************
'Pamiêtaæ o pod³¹czeniu rezystora podci¹gaj¹cego o wartoœci 4.7kohm miêdzy lini¹ DQ a VCC
Config 1wire = Portd.5 'deklaracja portu na którym bêd¹ podpiête DS18b20

Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim I3 As Integer
Dim I4 As Integer

Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim B As Byte 'deklaracja zmiennej do odczytu kodów ID
Dim W As Byte 'deklaracja zmiennej do odczytu iloœc czujników

Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celsjusza

Cursor Off 'Wy³¹cza kursor
Cls 'Funkcja CLS czyœci ekran
Lcd " Term by Duch & " ; 'ekran startowy (pojawia siê tylko podczas w³¹czania urz¹dzenia)
Lowerline
Lcd " polprzewodnikowy "
Wait 5
Cls
W = 1wirecount()
Lcd " Ilosc czujnikow: " 'Informuje ile czujników jest podpiêtych do uk³adu (pojawia siê tylko podczas w³¹czania urz¹dzenia)
Waitms 500
Lcd W
Wait 3
Cls 'ZnajdŸ pierwszy czujnik podpiêty do portu
Dsid1(1) = 1wsearchfirst() 'ZnajdŸ kolejny czujnik podpiêty do portu
Dsid2(1) = 1wsearchnext() 'ZnajdŸ kolejny czujnik podpiêty do portu
Dsid3(1) = 1wsearchnext() 'ZnajdŸ kolejny czujnik podpiêty do portu
Dsid4(1) = 1wsearchnext()

'*******************Odczyt numerów ID czujników temperatury*********************

If Dsid1(8) = Crc8(dsid1(1) , 7) Then 'ta opcja pojawia siê tylko przy w³¹czaniu urz¹dzenia
Locate 1 , 1
Lcd " CRC OK Czujnik 1 ID "
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid1(b))
Next
End If
Wait 2

If Dsid2(8) = Crc8(dsid2(1) , 7) Then
Locate 2 , 1
Lcd " CRC OK Czujnik 2 ID "
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid2(b))
Next
End If
Wait 2

If Dsid3(8) = Crc8(dsid3(1) , 7) Then
Locate 1 , 1
Lcd " CRC OK Czujnik 3 ID "
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid3(b))
Next
End If
Wait 2

If Dsid4(8) = Crc8(dsid4(1) , 7) Then
Locate 2 , 1
Lcd " CRC OK Czujnik 4 ID "
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid4(b))
Next
End If
Wait 2
Cls

'*******************koniec odczytu ID czujników temperatury*********************

Do
1wreset
1wwrite & H55
1wverify Dsid1(1) 'wysy³amy adres pierwszego czujnika
1wwrite & HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite & H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite & HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite & H55
1wverify Dsid3(1) 'wysylam adres trzeciego czujnika
1wwrite & HBE
I3 = 1wread(2)
'---------------------------------
1wreset
1wwrite & H55
1wverify Dsid4(1) 'wysylam adres czwartego czujnika
1wwrite & HBE
I4 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite & HCC
1wwrite & H44
Wait 1

'****Jeœli pracujesz z wyœwietlaczem innym ni¿ 2x20 to tutaj trzeba wprowadziæ zmiany w LOCATE********

I1 = I1 * 10
I1 = I1 / 16
'If I1 & gt; 0 Then Cls 'korekta przesuniecia znaku st C przy przejœciu z temp ujemnej na dodatni¹
Ss = Str(i1)
Ss = Format(ss , " 0.0 " )
Locate 1 , 1 'Pozycja wyœwietlania nazwy i temperatury (1.1 - & gt; 1 linia 1 kolumna, 2.10 - & gt; 2 linia 10 kolumna itd)
Lcd " Zew " ; Ss ; Chr(0) ;

I2 = I2 * 10
I2 = I2 / 16
'If I2 & gt; 0 Then Cls
Ss = Str(i2)
Ss = Format(ss , " 0.0 " )
Locate 2 , 1
Lcd " Lod " ; Ss ; Chr(0) ;
Wait 20

Cls
I3 = I3 * 10
I3 = I3 / 16
'If I3 & gt; 0 Then Cls
Ss = Str(i3)
Ss = Format(ss , " 0.0 " )
Locate 1 , 1
Lcd " Wew " ; Ss ; Chr(0) ;

I4 = I4 * 10
I4 = I4 / 16
'If I4 & gt; 0 Then Cls
Ss = Str(i4)
Ss = Format(ss , " 0.0 " )
Locate 2 , 1
Lcd " Piec " ; Ss ; Chr(0) ;

Loop

'Koniec programu
'Pozdrawiam Duch