może program nie jest bardzo dopieszczony ale działa . więc po kolei
nie używam przerwań choć powinienem należy poprawić jeszcze pomiar temperatury ponieważ przy mniej niż 5 stopni czujnik nieco zawyża do jednej linijki należy dodać komende aby wynik z zmiennej był jeszcze odejmowany o 2 i sprawa załatwiona roździelczość to 1 stopień kalibracja polega na ustawieniu R17 tak aby wskazania temperatury były poprawne z jakimś wzorcowym termometrem
algorytm programu jest taki że po włączeniu zasilania wentylator jest włączany z poślizgiem ok 10 sek i prubóje rozdmuchać żar musi to zrobić w około 55 minut jest to czas po którym sterownik wyłączy wszystko i wyświetli komunikat brak opału czas był dobrany z zapasem do mojego pieca jeśli przed czasem a powinien to bez problemów osiągnąć osiągnie temperaturę zadaną to wyłącza wentylator i czeka aż temperatura spadnie o 1 stopień od zadanej i załącza wentylator znowu jest to taka chistereza programowa to samo tyczy się pompki tyle że pompkę ustawiamy sobie indywidualnie przy jakiej temperaturze ma się wyłączyć powyżej tej temperatury pompka cały czas chodzi opis menu zmianę temperatury pieca od 30 do 90 ustawiamy S3 i S1 bespośrednio ustawienie pompki wciskamy menu i ustawiamy góra S1 dół S3 następnie wciskamy enter jeśli nie wciśniemy entera tylko drugi raz menu to wchodzimy do trybu ręcznego wyjście z tego to enter w trybie ręcznym mamy pęłną kontrole nad pompką i wentylatorem czyli załączenie wentylatora to S3 drugie wciśnięcie S3 wyłącza go pompka obsługiwana jest S1 ale tryb ręczny jest aktywny tylko do temperatury jaką ustawiliśmy wcześniej na piecu po przekroczeniu jej sterownik automatycznie z niej wychodzi w tryb automatyczny jest to taki rodzaj zabezpieczenia jeśli ktoś np. zapomni że wszedł w ten tryb a w piecu się pali i napewno istniało by duże prawdopodobieństwo jakiegoś nieszczęścia jak zagotowania wody powyżej 95 st celcjusza sterownik załącza buzer wyłącza obowiązkowo wentylator a załącza pompkę i wyświetla stosowny komunikat o niebezpieczeństwie sterownik testuje nie długo ale spisuje się znakomicie jestem na etapie pisania dodatkowych funkcji i usprawnień jeśli ktoś jest zainteresowany to przesyłam schemat finalny + program zaznaczam że jest to narazie tylko prototyp ale pracuję nadtym
'STEROWNIK PIECA C.O WERSJA 4 WIELKOSC KODU TO 2364 BAJTOW
'W STOSUNKU DO WERSJI 3 DODANO LICZNIK OPALU , KTORY JEST USTAWIONY NA
'OKOLO 50 MINUT POTYM CZASIE STEROWNIK PRZECHODZI W USPIENIE, CZAS ZALACZENIA I WYLACZENIA
'POMPKI ORAZ WENTYLATORA ODBYWA SIE Z POSLIZGIEM OKOLO 10 SEKUND
'DOMYSLNE WARTOSCI POMPKI USTAWIONE NA 35 STOPNI A PIECA NA 50 STOPNI
'DODANO STEROWANIE RECZNE WENTYLATORA ORAZ POMPKI JEDNAK JESLI TEMPERATURA
'NA PIECU PRZEKROCZY 50 STOPNI PROGRAM PRZECHODZI W CYKL AUTOMATYCZNY ,
'CZYLI PRZEJMUJE KONTROLE NAD STEROWANIEM POMPKI I WENTYLATORA
'$sim
$regfile = "89C4051.DAT"
$large
Config Lcd = 16 * 2
Cursor Off
Config Lcdpin = Pin , Db4 = P3.3 , Db5 = P3.2 , Db6 = P3.1 , Db7 = P3.0 , E = P3.4 , Rs = P3.5
Dim P As Bit 'ZMIENNA POROWNAWCZA POMPKI
Dim W As Bit 'ZMIENNA POROWNAWCZA WENTYLATORA
Dim I As Bit 'ZMIENNA POROWNAWCZA
Dim A As Word 'LICZNIK TEMPERATURY
Dim Aa As Word 'WYNIK TEMPERATURY
Dim Licznik_opalu As Word 'ZMIENNA NA KTOREJ JEST LICZONY OPAL
Dim Aaaa As Word 'ZMIENNA NA KTOREJ JEST WARTOSC USTAWIONA
Dim Went As Byte 'ZMIENNA POROWNUJACA ZAKRES WENTYLATORA
Dim Pompka As Byte
Dim Czas_pompki As Byte 'DODANO
Dim Czas_wentylatora As Byte 'DODANO
Dim Temp_przekroczona As Byte
Declare Sub Czekaj_200_ms 'ETYKIETA CZEKAJ 200ms
Declare Sub Pomiar_temperatury 'ETYKIETA POMIAR TEMPERATURY
Declare Sub Menu_lcd
Declare Sub Oblicz_wyswietl
Declare Sub Opal
I = 0 'LICZNIK OPALU
A = 0
Aa = 0
Licznik_opalu = 0
Aaaa = 50 'TEMPERATURA KOTLA ZADANA DOMYSLNIE NA 50 STOPNI
Pompka = 35 'TEMPERATURA POMPKI ZADANA DOMYSLNIE NA 35 STOPNI
Czas_pompki = 0
Czas_wentylatora = 0
Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' SYMBOL STOPNI CELCJUSZA
Reset P1.6 'WYLACZ POMPE
Set P1.7 'WLACZ WENTYLATOR
Reset P3.7 'WYLACZ TRANZYSTOR ROZLADOWUJACY
Cls
Lcd "MARCIN KOLODZIEJ"
Lowerline
Lcd "PALACZ C.O wer.1"
Wait 2 'CZEKAJ 1 SEKUNDE
Cls
Do
If P1.4 = 0 Then 'JESLI WCISNIETO MENU S2 MENU
Call Menu_lcd 'SKOCZ DO ETYKIETY MENU LCD
End If
If P1.3 = 0 Then 'JESLI WCISNIETO GORA S1
Incr Aaaa 'ZWIEKSZ ZMIENNA AAAA O 1
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
End If
If Aaaa => 90 Then 'JESLI PRZEKROCZY 90 STOPNI
Aaaa = 90 'ZAPISZ DO AAAA 90
End If
If P1.5 = 0 Then 'JESLI WCISNIETO DO DOLU S3
Decr Aaaa 'ZMNIEJSZ ZMIENNA AAAA O 1
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
End If
If Aaaa =< 30 Then 'JESLI AAAA JEST 30 LUB MNIEJ
Aaaa = 30 'ZAPISZ DO AAAA 30
End If
If Aa > Aaaa Then 'JESLI TEMPERATURA JEST WIEKSZA ZADANEJ
If Czas_wentylatora => 60 Then 'JESLI CZAS WYLACZENIA OSIAGNA (OKOLO) 10 SEKUND
Czas_wentylatora = 0 'WYZERUJ WARTOSC
Reset P1.7 'WYLACZ WENTYLATOR
I = 0 'ZMIENNA LICZNIK OPALU = 0
End If
End If
If Aa < Aaaa Then 'JESLI TEMPERATURA JEST MNIEJSZA ZADANEJ
If Czas_wentylatora => 60 Then 'JESLI CZAS WLACZENIA OSIAGNA (OKOLO) 10 SEKUND
Czas_wentylatora = 0 'WYZERUJ WARTOSC
Set P1.7 'ZALACZ WENTYLATOR
I = 1 'ZMIENNA LICZNIK OPALU = 1
End If
End If
If Pompka < Aa Then 'SPRAWDZ CZY NASTAWA POMPKI < NASTAWIE TEMPERATURY
If Czas_pompki => 60 Then 'JESLI CZAS WYLACZENIA OSIAGNA (OKOLO) 10 SEKUND
Czas_pompki = 0 'WYZERUJ WARTOSC
Set P1.6 'ZALACZ POMPKE
End If
End If
If Pompka > Aa Then 'SPRAWDZ CZY NASTAWA POMPKI JEST MNIEJSZA OD TEMPERATURY
If Czas_pompki => 60 Then 'JESLI CZAS WYLACZENIA OSIAGNA (OKOLO) 10 SEKUND
Czas_pompki = 0 'WYZERUJ WARTOSC '
Reset P1.6 'WYLACZ POMPKE
End If
End If
'..................................................
If Aa < Aaaa Then 'JESLI TEMPERATURA PIECA JEST MNIEJSZA OD ZADANEJ
Incr Czas_wentylatora 'ZWIEKSZ LICZNIK CZAS WENTYLATORA
End If
If Aa > Aaaa Then 'JESLI TEMPERATURA PIECA JEST WIEKSZA OD ZADANEJ
Incr Czas_wentylatora 'ZWIEKSZ LICZNIK CZAS WENTYLATORA
End If
'..................................................
If Pompka < Aa Then 'SPRAWDZ CZY NASTAWA POMPKI < NASTAWIE TEMPERATURY
Incr Czas_pompki 'ZWIEKSZ LICZNIK CZASU POMPKI
End If
If Pompka > Aa Then 'SPRAWDZ CZY NASTAWA POMPKI > NASTAWIE TEMPERATURY
Incr Czas_pompki 'ZWIEKSZ LICZNIK CZASU POMPKI
End If
'..................................................
If Aa => 95 Then 'JESLITEMPERATURA PIECA JEST =LUB > OD 90 STOPNI
Reset P1.2 'ZALACZ BUZER
Reset P1.7 'WYLACZ WENTYLATOR
Set P1.6 'ZALACZ POMPKE
Cls
Lcd " TEMP- PIECA"
Lowerline
Lcd "!!PRZEKROCZONA!!"
Wait 1 'CZEKAJ 1 SEKUNDE
Set P1.2 'WYLACZ BUZER
Wait 1 'CZEKAJ 1 SEKUNDE
End If
Call Opal 'SKOCZ DO ETYKIETY OPAL
Call Pomiar_temperatury 'SKOCZ DO ETYKIETY POMIAR TEMPERATURY
Loop
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sub Menu_lcd:
Waitms 200 'CZEKAJ 200ms
Do
Waitms 40 'CZEKAJ 40 ms
Cls
Lcd " WYLACZENIE "
Lowerline
Lcd "POMPKI NA " ; Pompka ; Chr(1) ; "C"
If P1.3 = 0 Then 'JESLI NACISNIETO GORA S1 TO
Incr Pompka 'ZWIEKSZ ZMIENNA POMPKA
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
End If
If Pompka => 60 Then 'JESLI ZMIENNA POMPKA = 60 STOPNI TO
Pompka = 60 'ZAPISZ DO ZMIENNEJ POMPKA 60 STOPNI
End If
If P1.5 = 0 Then 'JESLI NACISNIETO DOL S3 TO
Decr Pompka 'ZMNIEJSZ ZMIENNA POMPKA
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
End If
If Pompka =< 30 Then 'JESLI ZMIENNA POMPKA JEST = LUB < 30 STOPNI
Pompka = 30 'ZAPISZ DO ZMIENNEJ POMPKA 30 STOPNI
End If
If P1.4 = 0 Then 'JESLI WCISNIETO MENU S2 MENU
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
Reset P1.6 'WYLACZ POMPE
Reset P1.7 'WYLACZ WENTYLATOR
P = 0
W = 0
Do
Cls
Lcd "STEROWANIE RECZNE"
Lowerline
Lcd "POM.-" ; P ; " WENT.-" ; W
'////////////////////////////////////////////////////////////////////
If P1.3 = 0 Then 'JESLI WCISNIETO GORA S1
P = 1
Set P1.6 'WLACZ POMPE
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
End If
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
If P1.3 = 0 Then 'JESLI WCISNIETO GORA S1
P = 0
Reset P1.6 'WYLACZ POMPE
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
End If
If P1.2 = 0 Then 'JESLI WCISNIETO ENTER S4
Waitms 100 'CZEKAJ 10 ms
Exit Sub
End If
If P1.5 = 0 Then 'JESLI WCISNIETO DOL S3
W = 1
Set P1.7 'WLACZ WENTYLATOR
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
End If
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
If P1.5 = 0 Then 'JESLI WCISNIETO DUL S3
W = 0
Reset P1.7 'WYLACZ WENTYLATOR
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
End If
'////////////////////////////////////////////////////////////////////
If P1.2 = 0 Then 'JESLI WCISNIETO ENTER S4
Waitms 100 'CZEKAJ 10 ms
Exit Sub
End If
Set P3.7 'ROZLADUJ KONDENSATOR POMIAROWY
Waitms 100 'CZEKAJ 100 ms
Reset P3.7 'WYLACZ TRANZYSTOR ROZLADOWUJACY
Do
If P3.6 = 1 Then 'SPRAWDZ KOMPARATOR
Exit Do 'JESLI = 1 TO WYJDZ Z PETLI
End If
Incr A 'ZWIEKSZ ZMIENNA A O 1
Delay 'CZEKAJ OKOLO 100 uS
If A => 3000 Then 'JESLI A JEST = LUB WIEKSZE OD 3000
Set P1.6 'WLACZ POMPE
Reset P1.7 'WYLACZ WENTYLATOR
A = 0 'SKASUJ A
Cls
Lcd "TEMPERATURA POZA"
Lowerline
Lcd " ZAKRESEM"
Wait 1 'CZEKAJ 1 SEKUNDE
End If
Loop
Aa = A 'PRZEPISZ LICZNIK TEMPERATURY DO WYNIKU
Aa = Aa / 30 'ZMIENNA AA DZIEL PRZEZ 30
A = 0 'WYZERUJ TEMPERATURE KOTLA
If Aa > Aaaa Then 'JESLI TEMPERATURA JEST WIEKSZA ZADANEJ
Exit Sub
End If
Loop
End If
If P1.2 = 0 Then 'JESLI WCISNIETO ENTER S4
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
Exit Do 'WYJDZ Z PETLI
End If
Loop
Return
End Sub
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sub Pomiar_temperatury:
Set P3.7 'ROZLADUJ KONDENSATOR POMIAROWY
Waitms 100 'CZEKAJ 100 ms
Reset P3.7 'WYLACZ TRANZYSTOR ROZLADOWUJACY
Do
If P3.6 = 1 Then 'SPRAWDZ KOMPARATOR
Exit Do 'JESLI = 1 TO WYJDZ Z PETLI
End If
Incr A 'ZWIEKSZ ZMIENNA A O 1
Delay 'CZEKAJ OKOLO 100 uS
If A => 3000 Then 'JESLI A JEST = LUB WIEKSZE OD 3000
Set P1.6 'WLACZ POMPE
Reset P1.7 'WYLACZ WENTYLATOR
A = 0 'SKASUJ A
Cls
Lcd "TEMPERATURA POZA"
Lowerline
Lcd " ZAKRESEM"
Wait 1 'CZEKAJ 1 SEKUNDE
End If
Loop
Call Oblicz_wyswietl 'SKOCZ DO ETYKIETY OBLICZ I WYSWIETL
End Sub
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sub Oblicz_wyswietl:
Aa = A 'PRZEPISZ LICZNIK TEMPERATURY DO WYNIKU
Aa = Aa / 30 'ZMIENNA AA DZIEL PRZEZ 30
A = 0 'WYZERUJ TEMPERATURE KOTLA
Cls
Lcd "TEMP KOTLA =" ; Aa ; Chr(1) ; "C"
Lowerline
Lcd "NASTAWIONA =" ; Aaaa ; Chr(1) ; "C"
Return
End Sub
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sub Czekaj_200_ms:
Waitms 200 'CZEKAJ 200 ms
Return
End Sub
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Sub Opal:
If I = 0 Then 'JESLI I = 0 TO
Licznik_opalu = 0 'WYZERUJ LICZNIK OPALU
Return
End If
Incr Licznik_opalu 'ZWIEKSZ LICZNIK OPALU
If Licznik_opalu = 9900 Then 'JESLI LICZNIK OPALU DOLICZYL DO 50 MINUT(198 NA MINUTE)
Licznik_opalu = 0 'WYZERUJ LICZNIK OPALU
Reset P1.7 'WYLACZ WENTYLATOR
Reset P1.6 'WYLACZ POMPKE
Cls
Do
Lcd " UWAGA !!!"
Lowerline
Lcd " BRAK OPALU"
If P1.4 = 0 Then 'JESLI WCISNIETO MENU S2 TO
Call Czekaj_200_ms 'SKOCZ DO ETYKIETY 200ms
Exit Do 'WYJDZ Z PETLI
End If
Loop
End If
Return
End Sub
'///////////////////////////////////////////////////////////////////////////////
Załączniki:
-
schemat.GIF
(39.55 KB)
Musisz być zalogowany, aby pobrać ten załącznik.