logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sterownik pieca CO. Gotowy program do sterowania. AT89C2051.

bigielsyn 28 Paź 2006 21:20 7015 16
  • #1 3163034
    bigielsyn
    Poziom 11  
    Posty: 14
    Ocena: 2
    Od niedawna zacząłem zajmować się uC,
    udało mi się stworzyć proste programy "zapal i zgaś diode"
    i jeszcze kilka bardzo łatwych programów.
    Wszystkie działają w praktyce.
    Postanowiłem zająć się moim piecem Co.
    Wiem jak ma działać nie wiem jak to przerobić na program w bascom.
    Może ktoś miał podobny problem,jeśli tak to proszę o poradę.jeśli znacie jakiś gotowy program do sterowanie piecem będę wdzięczny za wskazówki.Mam do dyspozycji AT89C2051 nie wiem czy da się go do tego zastosować?Pozdrawiam.
  • Pomocny post
    #2 3164028
    janek1815
    Poziom 38  
    Posty: 4513
    Pomógł: 372
    Ocena: 1055
    ten procesor jest wystarczajacy do tego zastosowania poszukaj w elportal.pl tam kiedys byl sterownik do co znajdziesz na pewno tez gotowy wsad do procka jak i zrodlo. napisz co chcesz sterowac bo jesli tylko temperature zalaczenia pompki i ewentualnie zalaczenie i wylaczenie dmuchawy (jesli taka istnieje) w zaleznosci od temperatury to nie ma raczej problemu

    Dodano po 3 [minuty]:

    napisz to jak ma ten program dzialac ?
  • #3 3164690
    jony15
    Poziom 25  
    Posty: 604
    Pomógł: 68
    Ocena: 74
    Jeśli będziesz w roli czujnika używał ds18X20 nie zapomnij o sprawdzaniu sumy kontrolnej ( bez tego będziesz miał atrakcje jak sie włączy pompka i jednocześnie będziesz odczytywał z ds-a ) , przekaźniki pompki i dmuchawy uruchamiaj stanem 0 na wyjściu up, dobrze odfiltruj zasilanie. Poszukaj na forum o uP+przekaźniki. I na sam koniec pomyśl coś o zasilaniu awaryjnym np: stary ups. pozdrawiam
  • #4 3165039
    bigielsyn
    Poziom 11  
    Posty: 14
    Ocena: 2
    Zapoznałem się z artykułem z grudnia 2002 Elektronika dla wszystkich nt "Sterownik pieca weglowego"Tam zastosowany był 89c4051 natomiast ja mam 89c2051.Nie wiem czy mój sie nadaje,jeśli nie to kupię wymagany w tym artykule.
    Jednak moje wymagania co do sterownika są troche inne niż tam.
    1.Pomiar temp.miałby kontrolować 2 miejsca tj.temp.wody w piecu i na bojlerze.
    2.Sterowanie pompką wodno-cyrkulacyjną,żeby nie pracowała niepotrzebnie.
    3.Sterowanie włączaniem i wyłączaniem dmuchawy wtłaczającej powietrze do pieca.
    4.Sygnalizacja alarmowa w momencie braku opału w piecu.
    5.Zamykanie zaworu na bojlerze w momencie ,gddy temp.wody w piecu będzie niższa niż temp.wody w bijlerze.
  • #5 3165862
    janek1815
    Poziom 38  
    Posty: 4513
    Pomógł: 372
    Ocena: 1055
    to jest ten sam procek tylko ze 4051 ma 4kb pamieci a twoj 2051 ma 2kb. musisz skompilowac program i zobaczyc czy sie zmiesci .

    1. zastosuj dwa ds18b20 podlaczone jesli nozek wystarczy to do oddzielnych pinow procka unikniesz rozpoznawania numerow seryjnych a wiec zaoszczedzisz pamieci (choc idea 1-wire jest inna chodzi o to aby bylo wiele czujnikow podlaczonych do jednego pinu)

    2. 3. to juz tylko program

    4. jak chcesz rozpoznac czy w piecu nie bedzie opału?

    5. to bedzie elektrozawor?

    wiec w ukladzie musisz miec 3 przekazniki choc ja proponuje triak +optotriak (niewiele drozsze)

    jakis brzeczyk do sygnalizacji braku opalu ew przegrzania pieca

    wyswietlacz + kilka przyciskow
  • #6 3166144
    j_saw
    Poziom 13  
    Posty: 67
    Pomógł: 2
    Ocena: 59
    Wykonałem kilka projektów dot. sterowania CO jak i CWU. Jeżeli to ma być algorytm "sterowanie dwustanowe" to możesz próbować - to wszystko zależy jakim "paliwem" jest zasilany piec. Inaczej steruje się gazem, węglem..... prądem i co za tym idzie inne algorytmy. Od prostego "dwustanowego" do PID.
    Jak będziesz miał pytania to służę pomocą. Na mojej stronie www.alres.pl jest kilka przykładów takich sterowników.

    pozdrawiam
    Jarosław Sawicki
  • #7 3166801
    szod
    Poziom 33  
    Posty: 1663
    Pomógł: 215
    Ocena: 120
    Właśnie robię sobie sterowanie tego rodzaju. Moje ma mieć funkcje:
    1. Sterowanie piecem CO. Bez dmuchawy - podnoszenie / opuszczanie
    klapki wpuszczającej powietrze. U mnie taki system się sprawdzał przez
    kilka lat tylko sterowanie jest inne. Dodatkowo sygnalizacja zbyt dużej
    temperatury (np. zablokowanie klapki podczas opuszczania) lub zbyt
    niskiej (kończący się węgiel w piecu).
    2. Sterowanie bojlerem także z sygnalizacjami alarmowymi.
    3. Sterowanie pompką.
    4. Mierzenie temperatur dodatkowo w dwóch punktach - w domu i
    na dworze.
    Wszystkim steruje ATMega8535 + LCD. 4 x DS18b20. Pisane w asm.
    Robię bez sprawdzania CRC. Może zakłócenia go nie wykończą.
    Zobaczymy jak się sprawdzi w boju :)
  • #8 3167426
    bigielsyn
    Poziom 11  
    Posty: 14
    Ocena: 2
    Zamieszczam caly program i prosiłbym oprzerobienie
    pod moje wytyczne.
    Przerasta mnie to .
    'sterownik do pieca at89c2051
    ' wyświetlacz 2*16, poprawione zachowanie po zaniku napięcia
    $large
    $crystal = 12000000

    Config Lcd = 16 * 2
    Cursor Off
    Cls

    Config Sda = P3.1
    Config Scl = P3.0
    Config Timer0 = Timer , Mode = 1 , Gate = Internal
    Config Timer1 = Timer , Mode = 1 , Gate = Internal

    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
    Cls

    Dim Gasnie As Byte
    Dim Pomiar As Word
    Dim R As Byte
    Dim Bojler As Byte
    Dim Kuchnia As Byte
    Dim Czjnik As Byte
    Dim T0 As Byte
    Dim P As Word
    Dim Licz As Byte
    Dim Todn As Byte
    Dim T1 As Byte
    Dim A As Byte
    Dim Dom As Byte
    Dim Channel(3) As Byte
    Dim Kanal As Byte
    Dim Wlacz As Bit
    Dim Kontrola As Bit
    Dim K As Byte
    Dim Offsil As Bit
    Dim Wylacz As Bit
    Dim Pierwszy As Bit

    Declare Sub Pompka
    Declare Sub Silnik
    Declare Sub Ustawiam
    Declare Sub Buz
    Declare Sub Buz1
    Declare Sub Odczyt
    Declare Sub Gasnie
    Declare Sub Przegrzanie
    Declare Sub Pokaz
    Declare Sub Przelicz

    Pomp Alias P1.0
    Sil Alias P1.1
    Buzer Alias P3.7
    Wybor Alias P3.5
    Ustaw Alias P3.4
    Onsil Alias P3.3
    Piwnica Alias P3.2

    Load Timer0 , 65500
    On Timer0 Przerwanie
    Enable Timer0
    Load Timer1 , 60000
    On Timer1 Przerwanie1
    Enable Timer1
    Enable Interrupts

    Todn = 56
    Wlacz = 0
    Kontrola = 0
    P = 0
    Licz = 0
    Offsil = 0
    Wylacz = 0
    Gasnie = 0
    K = 3
    Pierwszy = 0

    Channel(1) = &B01000000 'bojler
    Channel(2) = &B01000010 'kuchnia
    Channel(3) = &B01000001 'piec

    Set Pomp
    Set Sil
    Start Timer0
    Start Timer1

    Set Onsil
    Set Piwnica
    Cls
    Locate 1 , 1 : Lcd "******" 'wstęp
    For A = 1 To 20
    Waitms 255
    Shiftlcd Left
    Next A
    Cls
    Locate 1 , 3 : Lcd "WLACZ MNIE" 'oczekiwanie na przycisk ON/OFF
    Locate 2 , 1 : Lcd "Przycisk ON/OFF"

    Do
    Call Przelicz 'zmiana pompka-zawsze powinna być włączna
    Call Pompka 'np. po zaniku napiecia
    Debounce Piwnica , 0 , Tu
    Debounce Onsil , 0 , Tu
    Loop

    Tu:
    Pierwszy = 1 'inicjalizacja 1 wlączenia
    Call Buz

    Do
    Call Przelicz
    K = 3
    Call Pokaz
    Wait 4 'główna pętla programu
    Call Silnik
    Wait 4
    Call Pompka
    Wait 4
    Loop

    Sub Odczyt:
    Kanal = Channel(k)
    I2cstart
    I2cwbyte &B10010000
    I2cwbyte Kanal
    I2cwbyte Todn
    I2cstart 'odczyt temperatury bojlera i kuchni
    I2cwbyte &B10010001
    I2crbyte Dom , Ack
    I2crbyte Dom , Nack
    I2cstop
    Waitms 10

    End Sub

    Sub Przelicz:
    For K = 1 To 3
    Pomiar = 0
    For A = 1 To 10
    Call Odczyt
    Pomiar = Pomiar + Dom 'przepisanie temp. pieca
    Next A
    Pomiar = Pomiar / 21
    Select Case K:
    Case 1 : Bojler = Pomiar
    Case 2 : Kuchnia = Pomiar
    Case 3 : R = Pomiar
    End Select
    Next K
    End Sub

    Sub Pokaz:
    Cls
    Locate 1 , 3
    Select Case K:
    Case 1 : Lcd "BOJLER= " ; Bojler ; Chr(0) ; "C" 'obsluga wyświetlacza
    Case 2 : Lcd "KUCHNIA= " ; Kuchnia ; Chr(0) ; "C"
    Case 3 : Lcd "PIEC= " ; R ; Chr(0) ; "C"
    End Select
    End Sub

    Sub Silnik:
    Todn = Todn + 1
    If Sil = 0 Then
    If R > Todn Then
    Set Sil
    End If
    End If
    Todn = Todn - 2
    If R =< Todn Then
    If Offsil = 0 Then
    If Kontrola = 1 Then
    If Sil = 1 Then
    Reset Sil
    P = 0 'obsluga silnika
    T0 = R
    Wylacz = 0
    Gasnie = 0
    End If
    Else
    Set Sil
    End If
    Else
    Set Sil
    End If
    End If
    Todn = Todn + 1
    End Sub

    Sub Pompka:
    If R > 50 Then
    If Wlacz = 0 Then
    Reset Pomp
    End If
    End If
    If R < 49 Then
    If Pomp = 0 Then
    Set Pomp
    End If
    End If

    If R >= Todn Then
    If Wlacz = 0 Then 'obsluga pompki
    Wlacz = 1
    End If
    End If
    If R >= Todn Then
    Reset Pomp
    End If
    If Pomp = 0 Then
    If Wlacz = 1 Then
    Todn = Todn - 3
    If R =< Todn Then
    Set Pomp
    End If
    Todn = Todn + 3
    End If
    End If
    If R > 90 Then
    Call Przegrzanie
    End If
    End Sub

    Ustawiam:
    Call Buz
    Cls
    Locate 1 , 4 : Lcd "USTAWIONO"
    Locate 2 , 4 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
    Wait 1
    Do
    Set Ustaw
    If Ustaw = 0 Then
    Call Buz
    Todn = Todn + 2
    If Todn > 86 Then 'podgląd Todn
    Todn = 56 'ustawienie Todn
    End If
    Cls
    Locate 1 , 2 : Lcd "Zmiana Todn"
    Locate 2 , 3 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
    Waitms 200
    Waitms 200
    Else
    Exit Do
    End If
    Loop
    Return

    Sub Buz:
    Reset Buzer
    Waitms 50 'alarm
    Set Buzer
    End Sub

    Sub Buz1:
    Reset Buzer
    Wait 2 'alarm
    Set Buzer
    End Sub

    Czuj:
    Incr K
    If K = 4 Then
    K = 1 'wybór czujnika
    End If
    Call Buz
    Call Pokaz
    Return

    Control:
    Call Buz
    Todn = Todn - 1
    If R > Todn Then
    Cls
    Locate 1 , 1 : Lcd "!!!SILNIK OFF!!!"
    Locate 2 , 3 : Lcd "NIE WLACZE GO"
    Else
    Kontrola = Not Kontrola
    Offsil = 0
    Call Silnik 'czy można wlączyc silnik??
    End If
    Todn = Todn + 1
    Return

    Sub Przegrzanie:
    Call Buz1
    For A = 1 To 3
    Cls 'reakcja na przegrzanie
    Waitms 255
    Locate 1 , 4 : Lcd "UWAGA"
    Locate 2 , 2 : Lcd "!!!PRZEGRZANIE!!!"
    Wait 1
    Next A
    End Sub

    Sub Gasnie:
    Call Buz1
    For A = 1 To 5
    Cls
    Waitms 255
    Locate 1 , 4 : Lcd "!!!GASNIE!!!"
    Locate 2 , 2 : Lcd "BRAK OPALU"
    Wait 1
    Next A
    End Sub

    Przerwanie:
    Incr P
    If P >= 4000 Then '900 min.
    T0 = T0 - 1
    T1 = T0 + 2
    If R >= T0 And R <= T1 Then
    If Wylacz = 1 Then
    Kontrola = 0
    Call Buz
    End If
    Wylacz = 1
    Else
    Kontrola = 1 'śledzenie poprawnosci wlaczenia
    Wylacz = 0 'silnika
    End If
    If R < T0 Then
    Incr Gasnie
    Else
    Gasnie = 0
    End If
    If Gasnie >= 3 Then
    If Offsil = 0 Then
    Call Gasnie
    Offsil = 1
    End If
    End If
    P = 0
    T0 = R
    End If
    Return

    Przerwanie1:
    If Pierwszy = 1 Then
    Set Ustaw
    Debounce Ustaw , 0 , Ustawiam , Sub
    Set Wybor
    Debounce Wybor , 0 , Czuj , Sub
    Set Onsil 'obsluga przycisków
    Debounce Onsil , 0 , Control , Sub
    Set Piwnica
    Debounce Piwnica , 0 , Control , Sub
    End If

    Todn = Todn - 1
    If R <= Todn Then
    Enable Timer0
    Else
    Disable Timer0
    End If
    Todn = Todn + 1
    Return

    Dodano po 10 [minuty]:

    Pomóżcie:D
  • #9 3267001
    Krzysieksiek
    Poziom 21  
    Posty: 362
    Pomógł: 26
    Ocena: 24
    cześć
    jakiś czas temu zajmowałem sie budową takiego sterownika (w oparciu o mateiały EDW i program autora projektu). Przeanalizowałem calutki program i nie znalazłem błędu. Złożyłem układ ale problem pojawił sie w momencie programowania prcesora (już w momencie kompilacji występował błąd) nie wiem co było przyczynom błedu, być może ograniczenia wersji demo co do wielkości kodu wynikowego. Procesorek był sprawny bo inne programy na nim działały. Prponuje zajżeć do EDW 11.2006 - strona 48 -projekt tego samego autora.
    Pozdrawiam i owocnego programowania.
  • #10 3267112
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    Krzysieksiek napisał:
    ...Złożyłem układ ale problem pojawił sie w momencie programowania prcesora (już w momencie kompilacji występował błąd) nie wiem co było przyczynom błedu, być może ograniczenia wersji demo co do wielkości kodu wynikowego...

    Ten program kompiluje się bezbłędnie , tyle że kod wynikowy to 3190 bajtów , więc wersja demo go nie skompiluje i upchać tego w 89c2051 się nie da.
    Pozostaje tylko 89c4051.

    Piotrek
  • #11 3267284
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Cytat:
    Pozostaje tylko 89c4051.


    i pomoc kolegów posiadających pełną wersję Bascoma, ewentulanie przerobienie programu na uC AVR i użycie wersji demo Bascoma AVR do 4kB.
  • #12 3269295
    monsinior
    Poziom 17  
    Posty: 162
    Pomógł: 18
    Ocena: 7
    M. S. napisał:
    Cytat:
    Pozostaje tylko 89c4051.


    i pomoc kolegów posiadających pełną wersję Bascoma, ewentulanie przerobienie programu na uC AVR i użycie wersji demo Bascoma AVR do 4kB.


    Nie koniecznie mamy jeszcze coś takiego jak asembler różnica w kodzie wynikowym jest bardzo często znaczna i podejrzewam, że zmieści sie w 2051
    Nie korzystałem z Bascoma i nawet nie mam zamiaru, po pierwsze duży rozmiar po kompilacji, ograniczone panowanie nad µC. Przy odrobinie wprawy można dużo funkcji upchać do 2kB ale trzeba pisać w asm
  • #13 3269416
    Bęben
    Poziom 16  
    Posty: 180
    Pomógł: 12
    Ocena: 13
    Assembler to dobre rozwiązanie, ale czy Bascom w obecnej chwili nie ma ograniczenia do 4 kB??
    Mam demo wersje i program skompilował sie bez błędów.
  • #14 3269603
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    Bęben napisał:
    Assembler to dobre rozwiązanie, ale czy Bascom w obecnej chwili nie ma ograniczenia do 4 kB??
    Mam demo wersje i program skompilował sie bez błędów.

    No jasne :idea: Demo Bascoma v2.0.12.0 , kompiluje do 4kB :D

    Piotrek
  • #15 3270112
    yokoon
    Poziom 29  
    Posty: 1349
    Pomógł: 119
    Ocena: 144
    A skad masz wrsję 2.0.. ??, bo na stronie MCS nie ma.
  • #16 3270320
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    yokoon napisał:
    A skad masz wrsję 2.0.. ??, bo na stronie MCS nie ma.

    Nie wiem czy zauważyłeś , ale mówimy TU o programie dla proca rodziny MCS-51 , więc w domyśle o Bascom-8051 ;)

    Piotrek
  • #17 3280641
    Krzysieksiek
    Poziom 21  
    Posty: 362
    Pomógł: 26
    Ocena: 24
    Wszyscy mają racje. pragne jedynie zauwazyć że zajmowałem sie tym sterownikiem jakis czas temu tj w momencie ukazania sie artykułu (potem nie próbowałem ) ale pewne jest że program jest napisany prawidłowo.
    Pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy stworzenia programu do sterowania piecem CO z wykorzystaniem mikrokontrolera AT89C2051. Procesor ten jest wystarczający do prostych zastosowań, jednak ma ograniczoną pamięć (2 kB), co może utrudnić implementację bardziej rozbudowanego oprogramowania, zwłaszcza w Bascomie, gdzie wersja demo ma limit 4 kB. Alternatywnie sugerowano użycie AT89C4051 z większą pamięcią (4 kB) lub pisanie w asemblerze dla optymalizacji rozmiaru kodu. Proponowane funkcje sterownika obejmują pomiar temperatury w dwóch punktach (w piecu i bojlerze) za pomocą czujników DS18B20, sterowanie pompką cyrkulacyjną, dmuchawą lub klapką powietrzną, sygnalizację alarmową (np. brak opału, przegrzanie), oraz zamykanie zaworu na bojlerze w zależności od temperatur. Wskazano na konieczność uwzględnienia kontroli sumy kontrolnej odczytów z DS18B20, odpowiednie filtrowanie zasilania oraz zabezpieczenia zasilania awaryjnego. Dyskutowano także o wykorzystaniu przekaźników lub triaków z optotriakami do sterowania elementami wykonawczymi. Wskazano na dostępność gotowych projektów i przykładów na stronach internetowych oraz w archiwalnych artykułach „Elektronika dla Wszystkich”. Problemy z kompilacją i ograniczeniami Bascoma były omawiane, a także możliwość przeniesienia projektu na mikrokontrolery AVR z wykorzystaniem Bascom-AVR.
Wygenerowane przez model językowy.
REKLAMA