Poniżej kod sterownika:
$regfile = "m8535.DAT"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 , E = Portc.5 , Rs = Portc.6
Config Lcd = 20 * 2
'Sterownik pieca C.O.
'zależności:
'Tp < Tn & Tp > 20st.C to zal. PK1
'Tp > 20st.C to zał. PK2
'Tb < Tp to zał. PK3
'Tk > Tb o dT1 pompa kręci się z prędkością P1 (20%)
'Tk > Tb o dT2 pompa kręci się z prędkością P2 (40%)
'Tk > Tb o dT3 pompa kręci się z prędkością P3 (60%)
'Tk > Tb o dT4 pompa kręci się z prędkością P4 (80%)
'Tk > Tb o dT5 pompa kręci się z prędkością P5 (20%)
Dim Motoron As Byte
Dim Regimpuls As Byte
Dim Impuls As Byte
Dim Licz As Byte
Dim Keyup As Bit
Dim Keydown As Bit
Dim Keybcks As Bit
Dim Keyenter As Bit
Dim Menu As Byte
Dim Keys As Byte
Dim X As Byte
Dim D_t1 As Byte 'parametr dT1
Dim D_t2 As Byte 'parametr dT2
Dim D_t3 As Byte 'parametr dT3
Dim D_t4 As Byte 'parametr dT4
Dim D_t5 As Byte 'parametr dT5
Dim E_d_t1 As Eram Byte
Dim E_d_t2 As Eram Byte
Dim E_d_t3 As Eram Byte
Dim E_d_t4 As Eram Byte
Dim E_d_t5 As Eram Byte
Dim E_tn As Eram Integer
Dim Temp As Byte
Dim Tp As Integer , Ss As String * 6 'temp. pieca
Dim Tk As Integer 'temp. kolektora
Dim Tb As Integer 'temp. bojlera
Dim Tn As Integer 'nastawa Tn
Dim Dsic1(8) As Byte
Dim Dsic2(8) As Byte
Dim Dsic3(8) As Byte
Dim Dsic4(8) As Byte
Dim B As Byte
Dim W As Byte
Dim Tb_p_dt1 As Byte
Dim Tk_m_dt1 As Byte
Dim Tk_m_dt2 As Byte
Dim Tk_m_dt3 As Byte
Dim Tk_m_dt4 As Byte
Dim Tk_m_dt5 As Byte
Tb_p_dt1 = Tb + D_t1
Tk_m_dt1 = Tk - D_t1
Tk_m_dt2 = Tk - D_t2
Tk_m_dt3 = Tk - D_t3
Tk_m_dt4 = Tk - D_t4
Tk_m_dt5 = Tk - D_t5
Key_bcks Alias Pinb.0
Key_up Alias Pinb.1
Key_down Alias Pinb.2
Key_enter Alias Pinb.3
Pk1 Alias Porta.0 'klapka (PK1)
Pk2 Alias Porta.1 'pompa - piec (PK2)
Pk3 Alias Porta.2 'zawór (PK3)
Tri1 Alias Porta.3 'pompa kolektorów (TRI1)
Tri2 Alias Porta.4 'wolny triak TRI2
Tri3 Alias Porta.5 'wolny triak TRI3
Led_t1 Alias Portd.1
Led_t2 Alias Portd.3
Led_t3 Alias Portd.4
Led_t4 Alias Portd.5
Led_t5 Alias Portd.6
Led_t6 Alias Portd.7
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celsjusza
Config 1wire = Portc.0 'czujniki temp. DS18B20
Config Porta = Output 'PortA jako wyjścia
Porta = 0 'stany początkowe - 0
Config Portb = Input 'PortB jako wejścia
Portb = 255 'stany początkowe - 1
Config Portd = Output 'PortD jako wyjścia
Portd = 0 'stany początkowe - 0
'STEROWANIE TRIAKIEM
Config Int0 = Rising
On Int0 _sync50hz
Licz = 49
Impuls = 0
Regimpuls = 0
' licznik timer0 - generator pily
Ocr0 = 100
Config Timer0 = Timer , Prescale = 8 , Clear Timer = 1
On Oc0 _silnik_pila
Enable Oc0
Enable Interrupts
Cursor Off
Cls
Lcd " STEROWNIK " ;
Locate 2 , 6
Lcd "USM - 100"
Wait 1
Cls
Locate 1 , 3
Lcd "Wersja programu:"
Locate 2 , 8
Lcd "1.001A"
Wait 1
Cls
Locate 1 , 4
Lcd "USM - 100 by"
Lowerline
Lcd "zbynio-87"
Wait 1
Cls
'iloćć podpiętych czujnikow temperatury
W = 1wirecount()
Lcd "Ilosc czujnikow temp"
Locate 2 , 9
Lcd "-" ; W ; "-"
Wait 1
Cls
Dsic1(1) = 1wsearchfirst()
Dsic2(1) = 1wsearchnext()
Dsic3(1) = 1wsearchnext()
Dsic4(1) = 1wsearchnext()
'odczyt ID czujników temperatury
If Dsic1(8) = Crc8(dsic1(1) , 7) Then
Locate 1 , 1
Lcd "CRC OK Czujnik 1 ID"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsic1(b))
Next
End If
Wait 1
If Dsic2(8) = Crc8(dsic2(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Czujnik 2 ID"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsic2(b))
Next
End If
Wait 1
If Dsic3(8) = Crc8(dsic3(1) , 7) Then
Locate 1 , 1
Lcd "CRC OK Czujnik 3 ID"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsic3(b))
Next
End If
Wait 1
If Dsic4(8) = Crc8(dsic4(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Czujnik 4 ID"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsic4(b))
Next
End If
Wait 1
'koniec odczytu ID czujników temperatury
D_t1 = E_d_t1 'Odczyt z pamięci Eeprom parametrów
D_t2 = E_d_t2
D_t3 = E_d_t3
D_t4 = E_d_t4
D_t5 = E_d_t5
Tn = E_tn
Cls
'program główny
Do
If Key_enter = 0 Then
Gosub Menuu
End If
Wait 1
1wreset
1wwrite &H55
1wverify Dsic1(1)
1wwrite &HBE
Tp = 1wread(2)
1wreset
1wwrite &H55
1wverify Dsic2(1)
1wwrite &HBE
Tb = 1wread(2)
1wreset
1wwrite &H55
1wverify Dsic3(1)
1wwrite &HBE
Tk = 1wread(2)
'konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Tp = Tp * 10
Tp = Tp / 16 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss = Str(tp)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "Piec " ; Ss ; Chr(0) ;
Tb = Tb * 10
Tb = Tb / 16
Ss = Str(tb)
Ss = Format(ss , " 0.0")
Locate 2 , 9
Lcd "Boj " ; Ss ; Chr(0) ;
Tk = Tk * 10
Tk = Tk / 16
Ss = Str(tk)
Ss = Format(ss , " 0.0")
Locate 1 , 11
Lcd " Kol " ; Ss ; Chr(0) ;
Locate 2 , 1
Lcd "Nas " ; Tn ; Chr(0) ;
If Tp < Tn And Tp > 200 Then
Set Pk1
Else
Reset Pk1
End If
If Tp > 200 Then 'liczba 200 -> 20 st.C (st.C * 10 = liczba z DS18B20 lub DS1822 )
Set Pk2
Else
Reset Pk2
End If
If Tb < Tp Then
Set Pk3
Else
Reset Pk3
End If
'plus zależności pracy pompy kolektorów:
'Tk > Tb o dT1 pompa kręci się z prędkością P1 (20%)
'Tk > Tb o dT2 pompa kręci się z prędkością P2 (40%)
'Tk > Tb o dT3 pompa kręci się z prędkością P3 (60%)
'Tk > Tb o dT4 pompa kręci się z prędkością P4 (80%)
'Tk > Tb o dT5 pompa kręci się z prędkością P5 (20%)
Loop
End
Menuu:
Do
If Key_up = 0 Then 'wybranie nr menu 1-7 przyciskiem Up lub Down
Incr Menu
End If
Waitms 100
If Menu = 8 Then
Menu = 1
End If
Cls
Waitms 100
If Key_down = 0 Then
Decr Menu
End If
Waitms 100
If Menu = 0 Then
Menu = 7
End If
Cls
Waitms 100
Select Case Menu
Case 1 : Lcd "Nastawa temp. T1: " ; D_t1 'Po wybraniu parametru do zmiany wciskamy Enter, również następuje zapis do pamięci EEprom
If Key_enter = 0 Then
Temp = D_t1
Gosub Nastawa
D_t1 = Temp
E_d_t1 = D_t1
End If
Case 2 : Lcd "Nastawa temp. T2: " ; D_t2
If Key_enter = 0 Then
Temp = D_t2
Gosub Nastawa
D_t2 = Temp
E_d_t2 = D_t2
End If
Case 3 : Lcd "Nastawa temp. T3: " ; D_t3
If Key_enter = 0 Then
Temp = D_t3
Gosub Nastawa
D_t3 = Temp
E_d_t3 = D_t3
End If
Case 4 : Lcd "Nastawa temp. T4: " ; D_t4
If Key_enter = 0 Then
Temp = D_t4
Gosub Nastawa
D_t4 = Temp
E_d_t4 = D_t4
End If
Case 5 : Lcd "Nastawa temp.T5: " ; D_t5
If Key_enter = 0 Then
Temp = D_t5
Gosub Nastawa
D_t5 = Temp
E_d_t5 = D_t5
End If
Case 6 : Lcd "Nastawa Tn:" ; Tn
If Key_enter = 0 Then
Temp = Tn
Gosub Nastawa
Tn = Temp
E_tn = Tn
End If
Case 7 : Lcd "Test wyjsc"
Lowerline
Lcd "sterownika"
If Key_enter = 0 Then
Gosub Test_wyj_ster
End If
End Select
If Key_bcks = 0 Then 'jeżeli przycisk BCKS wciśnięty dłużej niż 400ms powrót do programu głównego
Waitms 400
If Key_bcks = 0 Then
Return
End If
End If
Wait 1
Loop
Nastawa:
Do
If Key_up = 0 Then
Incr Temp
Waitms 100
End If
If Key_down = 0 Then
Decr Temp
Waitms 100
End If
Cls
Lcd Temp
If Key_bcks = 0 Then 'jeżeli przycisk BCKS wciśnięty przez czas od 100ms - 399ms to powrót do Menu
Return
End If
Waitms 100
Loop
Test_wyj_ster:
'test wyjść sterownika
Cls
Lcd "Test wyjsc mocy"
Wait 1
Cls
Lcd "Test PK1"
Set Pk1
Wait 1
Reset Pk1
Wait 1
Cls
Lcd "Test PK2"
Set Pk2
Wait 1
Reset Pk2
Wait 1
Cls
Lcd "Test PK3"
Set Pk3
Wait 1
Reset Pk3
Wait 1
Cls
Lcd "Test Triakow"
Set Tri1
Set Tri2
Set Tri3
Wait 1
Reset Tri1
Reset Tri2
Reset Tri3
Cls
Lcd "Test diod"
Portd = 255
Wait 1
Portd = 0
Wait 2
Cls
Lcd "Koniec testu"
Wait 1
Return
' GENERATOR PIŁY DLA TRIAKA
_silnik_pila:
Enable Interrupts
' sterowanie triaka co 200us = 50 stopni
If Motoron = 1 Then
If Licz > 0 Then Decr Licz
If Licz = Regimpuls Then Tri1 = 0 ' włącz triaka
If Licz = 0 Then Tri1 = 1 ' wyłącz triaka
Else
Tri1 = 1
End If
Return
' ===========================================================
' SYNCHRO Z SIECIĄ
_sync50hz:
' sterowanie silnikiem, odwrotna piła
If Motoron = 1 Then
Licz = 49
Regimpuls = Impuls
End If
Return
Detektor przejścia przez zero:
Wyjście mocy - Triak:
Pozdrawiam