$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 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.2 , Rs = Portb.0
Config Lcd = 20 * 4 '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 = Portb.4 '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 I11 As Integer ' przechowuje poprzednią wartoś temp
Dim I22 As Integer ' przechowuje poprzednią wartoś temp
Dim I33 As Integer ' przechowuje poprzednią wartoś temp
'Dim I44 As Integer ' przechowuje poprzednią wartoś temp
Dim Tx1 As Byte 'przechowuje wynik odejmowania temperatury zadanej od zmierzonej dla 1 czujnika
Dim Tx2 As Byte 'dla drugiego
Dim Tx3 As Byte 'dla trzeciego
'Dim Tx4 As Byte ' i czwartego
Dim Tx11 As Byte 'przechowuje temperature zadana na pierwszym kanale
Dim Tx22 As Byte 'na drugim czujniku
Dim Tx33 As Byte 'na trzecim
'Dim Tx44 As Byte ' i na czwartym
Dim Dsib1(8) As Byte
Dim Dsib2(8) As Byte
Dim Dsib3(8) As Byte
'Dim Dsib4(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
Dim H1 As Byte 'pierwsza histereza
Dim H2 As Byte
Dim H3 As Byte
'Dim H4 As Byte ' i ostatnia histereza
Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32 'znak stopnia Celsjusza
Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32 ' strzałka góra
Deflcdchar 2 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32 ' strzałka dół
Cursor Off 'Wyłącza kursor
Cls
Locate 1 , 6 'Funkcja CLS czyści ekran
Lcd "Termometr" ; 'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Locate 2 , 7
Lcd "ver 1.03"
Locate 4 , 2
Lcd "Upgrade 31.08.08"
Waitms 200
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
Dsib1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
Dsib2(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsib3(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
'Dsib4(1) = 1wsearchnext()
'*******************Odczyt numerów ID czujników temperatury*********************
If Dsib1(8) = Crc8(dsib1(1) , 7) Then 'ta opcja pojawia się tylko przy włączaniu urządzenia
Locate 1 , 1
Lcd "CRC OK Czujnik 1 ID"
'Waitms 750
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsib1(b))
Next
End If
'Wait 2
If Dsib2(8) = Crc8(dsib2(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Czujnik 2 ID"
'Waitms 750
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsib2(b))
Next
End If
'Wait 2
If Dsib3(8) = Crc8(dsib3(1) , 7) Then
Locate 3 , 1
Lcd "CRC OK Czujnik 3 ID"
'Waitms 750
Locate 3 , 1
For B = 1 To 8
Lcd Hex(dsib3(b))
Next
End If
'Wait 2
'If Dsib4(8) = Crc8(dsib4(1) , 7) Then
' Locate 4 , 1
' Lcd "CRC OK Czujnik 4 ID"
' 'Waitms 750
' Locate 4 , 1
' For B = 1 To 8
' Lcd Hex(dsib4(b))
' Next
'End If
'Wait 2
Cls
'****ustawienie temeratur potrzebnych do dzialania termostatu tx11,tx22,tx33,tx44
Config Portc.0 = Input
S1 Alias Pinc.0
Set Portd.0
Config Pinc.1 = Input
S2 Alias Pinc.1
Set Portc.1
Config Portc.2 = Input
S3 Alias Pinc.2
Set Portc.2
Goto 1strefa
'******pierwsza strefa****************
1strefa:
Locate 1 , 2
Lcd "pierwa strefa"
Locate 2 , 18
Lcd " + "
Locate 3 , 18
Lcd " - "
Locate 4 , 17
Lcd "ok"
'****** wstepne dane histerezy i temperat w strefach********
H1 = 2
H2 = 2
H3 = 5
' H4 = 5
Tx11 = 50
Tx22 = 50
Tx33 = 30
' Tx44 = 100
Do
Ss = Str(tx11)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Zadana:" ; Ss ; Chr(0)
If S1 = 0 Then
Waitms 25
If S1 = 0 Then
Do
Incr Tx11
Waitms 200
Loop Until S1 = 1
End If
End If
If S2 = 0 Then
Waitms 25
If S2 = 0 Then
Do
Decr Tx11
Waitms 200
Loop Until S2 = 1
End If
End If
If S3 = 0 Then
Waitms 25
If S3 = 0 Then
Cls
Locate 2 , 9
Lcd "OK"
Waitms 800
Cls
'****ustawienia histerezy*******
Locate 1 , 5
Lcd "histereza"
Locate 2 , 3
Lcd " dla strefy 1 "
Locate 2 , 18
Lcd " + "
Locate 3 , 18
Lcd " - "
Locate 4 , 17
Lcd "ok"
Waitms 800
Do
Ss = Str(h1)
Ss = Format(ss , " 0.0")
Locate 3 , 1
Lcd "Zadana:" ; Ss ; Chr(0)
If S1 = 0 Then
Waitms 25
If S1 = 0 Then
Do
Incr H1
Waitms 200
Loop Until S1 = 1
End If
End If
If S2 = 0 Then
Waitms 25
If S2 = 0 Then
Do
Decr H1
Waitms 200
Loop Until S2 = 1
End If
End If
If S3 = 0 Then
Waitms 25
If S3 = 0 Then
Cls
Locate 2 , 9
Lcd "OK"
Waitms 800
Cls
Goto 2strefa
End If
End If
Loop
'****ustawienia histerezy*******
Goto 2strefa
End If
End If
Loop
'*****************koniec *************
'*****************poczatek 2 strefy***********************
2strefa:
Locate 1 , 2
Lcd "druga strefa"
Locate 2 , 18
Lcd " + "
Locate 3 , 18
Lcd " - "
Locate 4 , 17
Lcd "OK"
Do
Ss = Str(tx22)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Zadana:" ; Ss ; Chr(0)
If S1 = 0 Then
Waitms 25
If S1 = 0 Then
Do
Incr Tx22
Waitms 200
Loop Until S1 = 1
End If
End If
If S2 = 0 Then
Waitms 25
If S2 = 0 Then
Do
Decr Tx22
Waitms 200
Loop Until S2 = 1
End If
End If
If S3 = 0 Then
Waitms 25
If S3 = 0 Then
Cls
Locate 2 , 9
Lcd "OK"
Waitms 800
Cls
'****ustawienia histerezy*******
Locate 1 , 5
Lcd "histereza"
Locate 2 , 3
Lcd " dla strefy 2 "
Locate 2 , 18
Lcd " + "
Locate 3 , 18
Lcd " - "
Locate 4 , 17
Lcd "ok"
Waitms 800
Do
Ss = Str(h2)
Ss = Format(ss , " 0.0")
Locate 3 , 1
Lcd "Zadana:" ; Ss ; Chr(0)
If S1 = 0 Then
Waitms 25
If S1 = 0 Then
Do
Incr H1
Waitms 200
Loop Until S1 = 1
End If
End If
If S2 = 0 Then
Waitms 25
If S2 = 0 Then
Do
Decr H1
Waitms 200
Loop Until S2 = 1
End If
End If
If S3 = 0 Then
Waitms 25
If S3 = 0 Then
Cls
Locate 2 , 9
Lcd "OK"
Waitms 800
Cls
Goto 3strefa
End If
End If
Loop
'****ustawienia histerezy*******
Goto 3strefa
End If
End If
Loop
'***********************koniec ************
'*****************poczatek 3 strefy***********************
3strefa:
Locate 1 , 2
Lcd "trzecia strefa"
Locate 2 , 18
Lcd " + "
Locate 3 , 18
Lcd " - "
Locate 4 , 17
Lcd "OK"
Do
Ss = Str(tx33)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Zadana:" ; Ss ; Chr(0)
If S1 = 0 Then
Waitms 25
If S1 = 0 Then
Do
Incr Tx33
Waitms 200
Loop Until S1 = 1
End If
End If
If S2 = 0 Then
Waitms 25
If S2 = 0 Then
Do
Decr Tx33
Waitms 200
Loop Until S2 = 1
End If
End If
If S3 = 0 Then
Waitms 25
If S3 = 0 Then
Cls
Locate 2 , 9
Lcd "OK"
Waitms 800
Cls
'****ustawienia histerezy*******
Locate 1 , 5
Lcd "histereza"
Locate 2 , 3
Lcd " dla strefy 2 "
Locate 2 , 18
Lcd " + "
Locate 3 , 18
Lcd " - "
Locate 4 , 17
Lcd "ok"
Waitms 800
Do
Ss = Str(h3)
Ss = Format(ss , " 0.0")
Locate 3 , 1
Lcd "Zadana:" ; Ss ; Chr(0)
If S1 = 0 Then
Waitms 25
If S1 = 0 Then
Do
Incr H3
Waitms 200
Loop Until S1 = 1
End If
End If
If S2 = 0 Then
Waitms 25
If S2 = 0 Then
Do
Decr H3
Waitms 200
Loop Until S2 = 1
End If
End If
If S3 = 0 Then
Waitms 25
If S3 = 0 Then
Cls
Locate 2 , 9
Lcd "OK"
Waitms 800
Cls
Goto Potwierdz
End If
End If
Loop
'****ustawienia histerezy*******
Goto Potwierdz
End If
End If
Loop
'***********************koniec 3 strefy************
'*****************poczatek 4 strefy***********************
'4strefa:
'Locate 1 , 2
'Lcd "czwarta strefa"
'Locate 2 , 15
'Lcd "gora"
'Locate 3 , 16
'Lcd "dol"
'Locate 4 , 10
'Lcd "zatwierdz"
' Do
' Ss = Str(tx44)
' Ss = Format(ss , " 0.0")
' Locate 2 , 1
' Lcd "Zadana:" ; Ss ; Chr(0)
' If S1 = 0 Then
' Waitms 25
' If S1 = 0 Then
' Do
' Incr Tx44
' Waitms 200
' Loop Until S1 = 1
' End If
' End If
' If S2 = 0 Then
' Waitms 25
' If S2 = 0 Then
' Do
' Decr Tx44
' Waitms 200
' Loop Until S2 = 1
' End If
' End If
' If S3 = 0 Then
' Waitms 25
' If S3 = 0 Then
' Cls
' Locate 2 , 9
' Lcd "OK"
' Waitms 800
' Cls
' Goto Potwierdz
' End If
' End If
' Loop
'***********************koniec 4 strefy************
Potwierdz:
Locate 2 , 1
Lcd "temperatury zadane"
'Waitms 800
Cls
Ss = Str(tx11)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "strefa 1:" ; Ss ; Chr(0)
Ss = Str(h1)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "his strefa 1:" ; Ss ; Chr(0)
Waitms 800
Cls
Ss = Str(tx22)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "strefa 2:" ; Ss ; Chr(0)
Ss = Str(h2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "his strefa 1:" ; Ss ; Chr(0)
Waitms 800
Cls
Ss = Str(tx33)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "strefa 3:" ; Ss ; Chr(0)
Ss = Str(h3)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "his strefa 3:" ; Ss ; Chr(0)
Waitms 800
' Cls
' Ss = Str(tx44)
' Ss = Format(ss , " 0.0")
' Locate 1 , 1
' Lcd "strefa-4:" ; Ss ; Chr(0)
'
' Ss = Str(h4)
' Ss = Format(ss , " 0.0")
' Locate 2 , 1
' Lcd "his strefa-1:" ; Ss ; Chr(0)
'
' Waitms 800
' Cls
Wait 2
Cls
Locate 1 , 2
Lcd "temp. poprawne ?"
Locate 2 , 16
Lcd "tak"
Locate 4 , 16
Lcd "nie"
Do
If S2 = 0 Then
Waitms 25
If S2 = 0 Then
Goto 1strefa
End If
End If
If S3 = 0 Then
Waitms 25
If S3 = 0 Then
Cls
Locate 2 , 9
Lcd "OK"
Waitms 800
Cls
Goto Glowny
End If
End If
Loop
'*******************koniec odczytu ID czujników temperatury*********************
Glowny:
Do
1wreset
1wwrite &H55
1wverify Dsib1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsib2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsib3(1) 'wysylam adres trzeciego czujnika
1wwrite &HBE
I3 = 1wread(2)
'---------------------------------
' 1wreset
' 1wwrite &H55
' 1wverify Dsib4(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 >= I11 Then
I11 = I1
If I1 > 0 Then
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(1) ;
Else
Ss = Str(i1)
Ss = Format(ss , "0.0")
Locate 1 , 1
Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(1) ;
End If
Else
I11 = I1
If I1 > 0 Then
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(2) ;
Else
Ss = Str(i1)
Ss = Format(ss , "0.0")
Locate 1 , 1
Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(2) ;
End If
End If
'****procedura termostatu i histerezy dla pierwszego czujnika****'
If I1 > Tx11 Then
Tx1 = I1 - Tx11
If Tx1 >= H1 Then
Set Portc.3 'Jezeli Tx1 Bedzie Wieksza od zadanej histerezy to wlaczy sie jeden
' moc na pierwszym kanale
' znaczy sie wlaczy sie agregat i bedzie chlodniej
End If
End If
'*****************dalej normalnie*************
I2 = I2 * 10
I2 = I2 / 16
If I2 >= I22 Then
I22 = I2
If I2 > 0 Then
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Parownik : " ; Ss ; Chr(0) ; Chr(1) ;
Else
Ss = Str(i2)
Ss = Format(ss , "0.0")
Locate 2 , 1
Lcd "Parownik : " ; Ss ; Chr(0) ; Chr(1) ;
End If
Else
I22 = I2
If I1 > 0 Then
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Parownik : " ; Ss ; Chr(0) ; Chr(2) ;
Else
Ss = Str(i2)
Ss = Format(ss , "0.0")
Locate 2 , 1
Lcd "Parownik : " ; Ss ; Chr(0) ; Chr(2) ;
End If
End If
I3 = I3 * 10
I3 = I3 / 16
If I3 >= I33 Then
I33 = I3
If I3 > 0 Then
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 3 , 1
Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(1) ;
Else
Ss = Str(i3)
Ss = Format(ss , "0.0")
Locate 3 , 1
Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(1) ;
End If
Else
I33 = I3
If I1 > 0 Then
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 3 , 1
Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(2) ;
Else
Ss = Str(i3)
Ss = Format(ss , "0.0")
Locate 3 , 1
Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(2) ;
End If
End If
'
' I4 = I4 * 10
' I4 = I4 / 16
' If I4 >= I44 Then
' I44 = I4
' If I1 > 0 Then
' Ss = Str(i4)
' Ss = Format(ss , " 0.0")
' Locate 4 , 1
' Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(1) ;
' Else
' Ss = Str(i4)
' Ss = Format(ss , "0.0")
' Locate 4 , 1
' Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(1) ;
' End If
' Else
' I44 = I4
' If I4 > 0 Then
' Ss = Str(i4)
' Ss = Format(ss , " 0.0")
' Locate 4 , 1
' Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(2) ;
' Else
' Ss = Str(i4)
' Ss = Format(ss , "0.0")
' Locate 4 , 1
' Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(2) ;
' End If
' End If
Loop