Prosty Sterownik C.O.


9
Ocena: None Średnia: 9 (13 głosujących)

Urządzenie to jak sama nazwa wskazuje jest sterownikiem do instalacji centralnego ogrzewania. Układ sprawdza się w bardzo prostych instalacjach posiadających jedną wspólną pompkę do grzejników i do wymiennika C.W.U. W wersji podstawowej nie jest oprogramowany wentylator nadmuchowy, gdyż nie było go w instalacji w której opisywany sterownik miał działać. Dodatkowe wyjście z triakiem pozwoli łatwo zmodyfikować program i dodać obsługę wentylatora. Sterownik posiada dwa tryby pracy, letni w którym głównie nastawia się na grzanie wody i pompa pracuje gdy temperatura na piecu jest większa niż w wymienniku, oraz tryb zimowy gdzie pompa pracuje zawsze gdy temperatura na piecu jest większa od minimalnej. Dodatkową funkcją sterownika jest pomiar temperatury na piecu, w bojlerze, w domu i na zbiorniku wyrównawczym. Konfiguracja w menu pozwala ustawić temperaturę minimalną i alarmową oraz zmieniać tryb pracy.

Działanie:

Schemat ideowy układu znajduje się na rysunku poniżej:

Sercem układu jest mikrokontroler U1 (ATMega8) wraz z rezonatorem kwarcowym X1(16MHz) i kondensatorami C1 (22pF) i C2 (22pF). Kondensatory C3 (220uF) i C4 (100nF) filtrują napięcie zasilania, które powinno zostać podane na złącze Zas (ARK2) z drugiej płytki sterownika. Potencjometr P1 (10k) umożliwia regulację kontrastu wyświetlacza W1 (LCD 2x16). Za pomocą tranzystora T1 (BC556) i rezystora R2 (3,3k) możliwe jest włączenie podświetlania wyświetlacza w sposób programowy. Rezystor R1 (47R) ogranicza prąd struktur LED podświetlających wyświetlacz. Buzzer z generatorem BUZ1 (5V) pełni funkcję sygnalizatora alarmu. Alarm uruchamiany jest za pośrednictwem tranzystora T2 (BC556) oraz rezystorów R3 (3,3k) i R4 (3,3k) gdy temperatura przekroczy ustawiony próg. Złącze 1W_TR (ARK3) służy do podłączenia magistrali 1-Wire z czujnikami DS18B20 (4 sztuki) oraz zapewnia połączenie sterownika z płytka wykonawczą. Układ U2 jest w praktyce podstawką pod czujnik DS18B20, która przydaje się w momencie rejestracji czujników. Zworka 1W_ENA (goldpin) umożliwia odłączenie całej magistrali od płytki na czas rejestracji czujników. Rezystor R8 (4,7k) jest konieczny do poprawnej pracy układów DS18B20. Zworki DSR1...DSR3 (goldpin) poprzez różne kombinacje pozwalają na wybranie który czujnik ma być w danej chwili zarejestrowany. Przyciski S1..S3 (uSwitch) stanowią klawiaturę urządzenia, natomiast diody D1..D3 (LED) wraz z rezystorami ograniczającymi prąd R5...R7 (470R) stanowią kontrolki pracy pompy, wentylatora oraz alarmu. Złącze Prog (goldpin) służy do zaprogramowania procesora, podobnie jak pin Res, który dodatkowo umożliwia reset procesora podczas rejestracji czujników.

Schemat ideowy układu wykonawczego znajduje się na rysunku poniżej:

W skład modułu wykonawczego wchodzi stabilizator napięcia U1 (7805) wraz z kondensatorami C1 (220uF) i C2 (47uF). Do złącza Zas (ARK) należy podłączyc napięcie o wartości w granicach 7-15V, w pierwowzorze miała to być ładowarka od telefonu. Złącze VCC (ARK) umożliwia zasilanie sterownika. W roli elementów wykonawczych pracują triaki TR1 (BT138-600E) oraz TR2 (BT138-600E), rezystory R2 (180R), R3 (180R), R5 (180R) i R6 (180R) ograniczają prąd bramek triaków. W rolli zabezpieczenia przeciwprzepięciowego zastosowano warystory WR1 (JVR-7N431) i WR2 (JVR-7N431), chociaż nie są one wymagane. Przed zwarciem zabezpiecza bezpiecznik F1 (2A). Złącze 230V umożliwia podłączenie zasilania sieciowego do płytki. Wyjściami napięciowymi dla pompy i wentylatora są złącza TRO1 (ARK) i TRO2 (ARK). Oddzielenie wysokonapięciowych obwodów sieciowych od niskonapięciowego sterownika zapewniają optotriaki OPT1 (MOC3041) i OPT2 (MOC3041). Prąd ich struktur LED ograniczają rezystory R1 (330R) i R2 (330R), a szeregowo włączone diody LED sygnalizują stan triaków. Do złącza TRI (ARK) podłączamy wyjścia sterownika.

Budowa:

Układ z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.

Układ wykonawczy można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj
Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.

Wykaz Elementów:

Sterownik:

1x Złącze śrubowe ARK2(podwójne)
1x Złącze śrubowe ARK3(potrójne)
4x Listwa Goldpin 1x2 (1W_ENA)
1x Listwa Goldpin 1x3 (DS18B20)
1x Listwa Goldpin 1x4 (Prog)
3x uSwitch

3x 3,3k
1x 47R
3x 470R
1x 4,7k
1x Potencjometr Montażowy 10k

2x 22pF
1x 100nF
1x 220uF Elektrolit

1x Rezonator Kwarcowy 16MHz
3x Dioda LED
2x BC556
1x Mikrokontroler ATMEGA8 + Podstawka
1x Buzzer z Generatorem 5V
1x 16x2

Układ Wykonawczy:

1x Bezpiecznik 2A
6x Złącze śrubowe ARK2(podwójne)

4x 180R
2x 330R
2x Warystor JVR-7N431

1x 47uF Elektrolit
1x 220uF Elektrolit

2x Dioda LED
1x Stabilizator 7805
2x BT138-600E
2x MOC3041

Programowanie:

Kod Źródłowy do sterownika został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 16000000
 
'Config Porta = &B00111111 : Porta = &B11111111
Config Portb = &B11111000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00011111 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'mirley UPT M16
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
Config 1wire = Pind.2
 
 
Sw_port Alias Pinb                                          'nazwa portu
Pompa Alias Portd.3
Went Alias Portd.4
Buzz Alias Portd.1
Light Alias Portd.0
 
Ds1r Alias Pind.7
Ds2r Alias Pind.6
Ds3r Alias Pind.5
 
Led_a Alias Portb.5
Led_p Alias Portb.3
Led_w Alias Portb.4
 
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Stan_sw As Byte , Sw As Byte , Licznik_sw As Byte       'sw
Dim Wyswietlanie As Byte , Poz_wysw As Byte , Wyswietlono As Bit       'Lcd
Dim Mig As Bit , Poz_ust As Byte
Dim Autosave As Byte , Autopowrot As Byte , Autolight As Byte
 
 
Dim Ds1(8) As Byte , Ds2(8) As Byte , Ds3(8) As Byte , Ds4(8) As Byte , Ds(8) As Byte , Ds_adr As Byte , Ds_ok As Bit       'DS18B20
Dim Ktory_ds As Byte , Lsb As Byte , Msb As Byte , Minusy As Byte
Dim T(4) As Word
 
Dim T_min As Word , T_alarm As Word
 
Dim Dzielnik(2) As Byte                                     'dzielniki timera
Dim Flaga_4ms As Bit , Flaga_500ms As Bit , Flaga_1s As Bit 'flagi przerwa?
Dim Hbyte(2) As Byte , Hword(3) As Word , N As Byte , Hbit As Bit , M As Byte
 
Dim Buzz_en As Bit
Dim Tryb_letni As Bit                                       '0- tryb zimowy, 1- tryb letni
 
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Light = 0
 
Lcd " Sterownik  C.O."
Lowerline
Lcd "  Wersja 0.96"
 
Wait 1
 
If Ds1r = 1 And Ds2r = 0 And Ds3r = 0 Then
  Ds_adr = 30
  Gosub Ds_reg
  Cls
  Lcd "Ds Piec"
End If
If Ds1r = 0 And Ds2r = 1 And Ds3r = 0 Then
  Ds_adr = 40
  Gosub Ds_reg
  Cls
  Lcd "Ds Bojler"
End If
If Ds1r = 1 And Ds2r = 1 And Ds3r = 0 Then
  Ds_adr = 50
  Gosub Ds_reg
  Cls
  Lcd "Ds Zbiornik"
End If
If Ds1r = 0 And Ds2r = 0 And Ds3r = 1 Then
  Ds_adr = 60
  Gosub Ds_reg
  Cls
  Lcd "Ds Kuchnia"
End If
 
 
For N = 1 To 8
  Hbyte(1) = 30 + N
  Readeeprom Ds1(n) , Hbyte(1)
  Hbyte(1) = 40 + N
  Readeeprom Ds2(n) , Hbyte(1)
  Hbyte(1) = 50 + N
  Readeeprom Ds3(n) , Hbyte(1)
  Hbyte(1) = 60 + N
  Readeeprom Ds4(n) , Hbyte(1)
Next N
 
Readeeprom T_min , 2
Readeeprom T_alarm , 4
Readeeprom Hbyte(1) , 6
 
Tryb_letni = Hbyte(1).0
If T_min < 100 Or T_min > 950 Then T_min = 400
If T_alarm < 100 Or T_alarm > 950 Then T_alarm = 850
 
 
Wait 1
Wyswietlono = 1
Wyswietlanie = 1
Autosave = 5
Autolight = 0
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
  '***********************************************   co 4ms
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
 
    Gosub Przyciski
    If Wyswietlono = 1 Then Gosub Wysw_lcd
 
  End If
  '***********************************************
 
  '***********************************************   co 500ms
  If Flaga_500ms = 1 Then
    Flaga_500ms = 0
 
    Mig = Not Mig
 
    'Portd.6 = Buzz_en
 
    If Pompa = 0 Then Led_p = Mig Else Led_p = 1
    If Went = 0 Then Led_w = Mig Else Led_w = 1
    Led_a = Buzz
 
    Wyswietlanie = Poz_wysw
 
  End If
  '***********************************************
 
  '***********************************************   co 1s
  If Flaga_1s = 1 Then
    Flaga_1s = 0
 
    If Light = 0 Then
      Incr Autolight
      If Autolight >= 20 Then Light = 1
    Else
      Autolight = 0
    End If
 
    If Poz_wysw <> 1 Then
      Incr Autopowrot
      If Autopowrot = 6 Then
        'Poz_wysw = 1
        Wyswietlanie = 1
        Poz_ust = 0
      End If
    Else
      Autopowrot = 0
    End If
 
 
    If Autosave < 5 Then
      Incr Autosave
      If Autosave = 5 Then
        'tu zapis do eeprom
        Writeeeprom T_min , 2
        Writeeeprom T_alarm , 4
        Hbyte(1) = 0
        Hbyte(1).0 = Tryb_letni
        Writeeeprom Hbyte(1) , 6
        Poz_ust = 0
      End If
    End If
 
    Gosub Temperatura
    Gosub Sterowanie
 
  End If
  '***********************************************
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
  Timer0 = 5
  Set Flaga_4ms
  Incr Dzielnik(1)
  If Dzielnik(1) = 125 Then
    Dzielnik(1) = 0
    Set Flaga_500ms
    Incr Dzielnik(2)
    If Dzielnik(2) = 2 Then
      Dzielnik(2) = 0
      Set Flaga_1s
    End If
  End If
Return
'******** Przerwanie timer 0 Koniec ************
 
'***********************************************
'*****************  Przyciski     **************
Przyciski:
Sw = Sw_port And &B00000111                                 'maska na piny nieu?ywane jako sw
If Sw <> &B00000111 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 68 Then
      Licznik_sw = 0
      Select Case Stan_sw
        Case &B00000011:                                    'incr
        '***********************************************************
          Select Case Poz_wysw
            Case 3:
              Select Case Poz_ust
                Case 0:
                   Poz_ust = 1
                Case 1:
                   If T_min < 950 Then T_min = T_min + 10
                Case 2:
                   If T_alarm < 950 Then T_alarm = T_alarm + 10
              End Select
              Autosave = 0
            Case 4:
              If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
              Autosave = 0
            'Case 5:
 
          End Select
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
        Case &B00000101:                                    'ustaw next
        '***********************************************************
          If Poz_ust = 0 Then
            Wyswietlanie = Poz_wysw + 1
            If Wyswietlanie = 5 Then Wyswietlanie = 1
          Else
            Select Case Poz_wysw
              Case 3:
                Incr Poz_ust
                If Poz_ust = 3 Then Poz_ust = 0
              Case 4:
                Incr Poz_ust
                If Poz_ust = 2 Then Poz_ust = 0
 
            End Select
          End If
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
        Case &B00000110:                                    'decr
        '***********************************************************
          Select Case Poz_wysw
            Case 3:
              Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                  If T_min > 100 Then T_min = T_min - 10
                Case 2:
                  If T_alarm > 100 Then T_alarm = T_alarm - 10
              End Select
              Autosave = 0
            Case 4:
              If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
               Autosave = 0
 
            'Case 5:
 
          End Select
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 60
  End If
 
Return
'***********************************************
 
'***********************************************
'**************    LCD     ***********
Wysw_lcd:
 If Wyswietlanie <> 0 Then
   Wyswietlono = 0
   Select Case Wyswietlanie
     Case 1:                                                'temp piec bojler
     '**************************************************************
       If Poz_wysw <> 1 Then
         Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32  'stopien
         'Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32       ' o kreskowane
 
         Cls
         Lcd "Piec:"
         Lowerline
         Lcd "Bojler:"
       End If
 
       For N = 1 To 2
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         Locate N , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
     Case 2:                                                'temb banka,dom
     '**************************************************************
        If Poz_wysw <> 2 Then
         Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32  'stopien
 
         Cls
         Lcd "Zbiornik:"
         Lowerline
         Lcd "Kuchnia:"
       End If
 
       For N = 3 To 4
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         M = N - 2
         Locate M , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
     Case 3:
     '**************************************************************
       If Poz_wysw <> 3 Then
         Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32  'stopien
         'Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32       ' o kreskowane
 
         Cls
         Lcd "T.Min:"
         Lowerline
         Lcd "T.Alarm"
       End If
 
       If Poz_ust = 1 And Mig = 1 Then
          Locate 1 , 10
          Lcd "       "
       Else
       't minimalna
         Hword(1) = T_min / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 1 , Hword(2)
         Hword(2) = T_min Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C "
       End If
 
       If Poz_ust = 2 And Mig = 1 Then
          Locate 2 , 10
          Lcd "       "
       Else
       't alarmowa
         Hword(1) = T_alarm / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 2 , Hword(2)
         Hword(2) = T_alarm Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       End If
 
 
      Case 4:
     '**************************************************************
        If Poz_wysw <> 4 Then
         Cls
         Lcd "Tryb: "
       End If
 
       Locate 1 , 7
       If Poz_ust = 1 And Mig = 1 Then
          Lcd "       "
       Else
         If Tryb_letni = 1 Then Lcd "Letni" Else Lcd "Zimowy"
       End If
 
 
     Case 5:
     '**************************************************************
        If Poz_wysw <> 5 Then
         Cls
         Lcd "Przedmuch:"
         Lowerline
         Lcd "Przerwa:"
       End If
 
 
   End Select
   Poz_wysw = Wyswietlanie
   Wyswietlanie = 0
   Wyswietlono = 1
 End If
Return
'************** LCD Koniec ***********
 
'**********  rejestracja DS *********
Ds_reg:
  Disable Interrupts
  1wreset
  1wwrite &H33
  Ds(1) = 1wread(8):
  Enable Interrupts
  If Ds(1) <> 255 Or Ds(2) <> 255 Or Ds(3) <> 255 Or Ds(4) <> 255 Or Ds(5) <> 255 Or Ds(6) <> 255 Or Ds(7) <> 255 Or Ds(8) <> 255 Then
    Ds_ok = 1
    For N = 1 To 8
      Hbyte(1) = Ds_adr + N
      Writeeeprom Ds(n) , Hbyte(1)
    Next N
  Else
    Ds_ok = 0
  End If
Return
'******  rejestracja DS Koniec ******
 
'*************  Temperatura   ***********
Temperatura:
  Disable Interrupts
  1wreset
  Select Case Ktory_ds
    Case 0:
      1wwrite &HCC
      1wwrite &H44
    Case 1:
      1wwrite &H55
      1wwrite Ds1(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 2:
      1wwrite &H55
      1wwrite Ds2(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 3:
      1wwrite &H55
      1wwrite Ds3(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 4:
      1wwrite &H55
      1wwrite Ds4(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
  End Select
 
  Enable Interrupts
 
  If Ktory_ds > 0 Then
    T(ktory_ds) = Msb * 256
    T(ktory_ds) = T(ktory_ds) + Lsb
    Minusy.ktory_ds = Msb.7
 
    If Minusy.ktory_ds = 1 Then
      T(ktory_ds) = Not T(ktory_ds)
      T(ktory_ds) = T(ktory_ds) + 1
    End If
 
    T(ktory_ds) = T(ktory_ds) * 10
    T(ktory_ds) = T(ktory_ds) / 16
   Else
    If Poz_wysw = 1 And Wyswietlono = 1 Then Wyswietlanie = 1
  End If
 
  Incr Ktory_ds
  If Ktory_ds = 5 Then Ktory_ds = 0
 
Return
'**********  Temperatura  Koniec *********
 
 
'************   Sterowanie       ***************
'***********************************************
Sterowanie:
 
 
  If Tryb_letni = 1 Then
    If T(1) >= T_min Then
      Hword(1) = T(2) + 70
      Hword(2) = T(2) + 30
      If T(1) >= Hword(1) Then Pompa = 0
      If T(1) <= Hword(2) Then Pompa = 1
    Else
      Pompa = 1
    End If
  Else
    If T(1) >= T_min Then
     Pompa = 0
    Else
      Pompa = 1
    End If
  End If
 
 
  If T(1) >= T_alarm Or T(2) >= T_alarm Then
    If Buzz_en = 1 Then Buzz = Not Buzz Else Buzz = 1
  Else
    Buzz = 1
    Hword(1) = T_alarm - 50
    If T(1) <= Hword(1) And T(2) <= Hword(1) Then Buzz_en = 1
  End If
  'tutaj sterowanie wentylatorem
 
Return
'********    Sterowanie      Koniec ************

Ustawienia fusebitów dla mikrokontrolera ATMEGA8 przedstawione są poniżej:

Obsługa:

Wstępne uruchomienie sterownika sprowadza się do zaprogramowania czujników z którymi będzie współpracował. Przy wyłączonym zasilaniu rozwieramy zworkę 1W_ENA wkładamy pierwszy czujnik (od pieca) do złącza na płytce (układ U2), rozwieramy zworkę DSR1 i zwieramy DSR2 i DSR3. Włączamy zasilanie a na wyświetlaczu pojawia się napis "Ds Piec" co świadczy o poprawnym odczycie czujnika. W tej chwili temperatura powinna być już odczytywana. Wyłączamy ponownie zasilanie i kontynuujemy rejestrację pozostałych czujników w taki sam sposób, z tym że ustawienia zworek DSR1...DSR3 są inne. Podczas rejestracji do układu może być jednorazowo podłączony tylko jeden czujnik.

Ustawienia zworek:
Piec: DSR1 = 1, DSR2 = 0, DSR3 = 0
Bojler: DSR1 = 0, DSR2 = 1, DSR3 = 0
Zbiornik wyrównawczy: DSR1 = 1, DSR2 = 1, DSR3 = 0
Dom: DSR1 = 0, DSR2 = 0, DSR3 = 1
*"0" oznacza zworkę zwartą, a "1" rozwartą

Po zakończeniu procedury rejestracyjnej czujników podłączamy je wszystkie naraz do układu i umieszczamy w przeznaczonych miejscach. W przypadku zmiany jednego z czujników trzeba go zarejestrować w taki sam sposób pamiętając że wszystkie pozostałe muszą być odłączone (Zworka 1W_ENA).

Zdjęcia Projektu:

ZałącznikWielkość
Sterownik Schemat58.95 KB
Sterownik Płytka16.38 KB
Sterownik Płytka (odbicie lustrzane)16.51 KB
Sterownik Płytka (4 na stronie)57.41 KB
Sterownik Montowanie22.69 KB
Układ wykonawczy Schemat8.64 KB
Układ wykonawczy Płytka8.14 KB
Układ wykonawczy Płytka (odbicie lustrzane)8.2 KB
Układ wykonawczy Płytka (6 na stronie)36.54 KB
Układ wykonawczy Montowanie12.05 KB
Sterownik + Układ Wykonawczy Płytka47.56 KB
Kod Źródłowy13.82 KB
Panel przedni (SVG)9.6 KB
Panel przedni (SVG) (4 na stronie)30.71 KB
Panel przedni (PDF) (4 na stronie)158.99 KB
Kod Źródłowy (wersja z wentylatorem 2009.11.20) (nie testowana w praktyce)17.49 KB
Program po kompilacji (BIN)7.52 KB
Program po kompilacji (HEX)21.15 KB
Kod Źródłowy (wersja z wentylatorem 2016.01.30) (poprawione temperatury <10)17.57 KB
Program po kompilacji (BIN)7.55 KB
Program po kompilacji (HEX)21.25 KB



Portret użytkownika grek1209

Sterowanie wentylatorem

W moim starym sterowaniu wentylatorem po wyłączeniu temperatura nadskakiwała około 5 stopni.

Portret użytkownika grek1209

Regulacja wentylatora

Szymon znalazłem w necie taki fragment może to coś pomoże Temp_hist = Temperatura_dmuchawy - Histereza

If T >= Temperatura_dmuchawy Then
Dmuchawa=1 'wyłączona
Elseif T <= Temp_hist Then
Dmuchawa=0 'załączona
End If

Portret użytkownika Szymon SQ3OPC

regulacja wentylatora

to nareszcie kod działa kolego grek przetestuj proszę hex wysłałem na pocztę w moim sterowniku działa jednak nie wiem jak to będzie w praktyce jeżeli ok to umieszczę kod na stronie.co do 3ch biegów wentylatora to pomysł dobry jednak musimy posiadać taki wentylator z trzema uzwojeniami. w handlu większość to wentylatory z jednym uzwojeniem wydaje mi się że najlepszym rozwiązaniem był by pwm.myślę że założeniem autora tego projektu było sterowanie pompą co więc przydał by się kolejny projekt który już widziałem zdobył paru chętnych czyli profesjonalny sterownik pieca co. Raczej atmega8 nie podoła wymaganiom powód- za mało miejsca.

Portret użytkownika grek1209

Regulacja wentylatora

Szymon sterownik w pierwszych testach działa super właśnie oto chodziło.Jedynie jak by szło dodać start wentylatora z przycisku byłoby jeszcze lepiej.

Portret użytkownika Szymon SQ3OPC

Regulacja wentylatora

Grek wolał bym się teraz skupić żeby dorobić przedmuchy nie muszą nawet być programowane z menu tylko jakieś stałe ustawienia po prostu w atmedze zrobiło się ciasno. Zbierające się gazy podczas spalania mogą narobić dużych problemów. Może ktoś podpowie jakie to czasy chodzi mi o podanie co ile i na ile ma się włączać wentylator jeżeli piec osiągnie zadaną temperaturę. Osobiście nie posiadam takiego pieca więc moja wiedza na ten temat jest mała.

Portret użytkownika grek1209

Regulacja wentylatora

W starym sterowniku który miałem producent zalecał stosowanie przedmuchu w przypadku palenia miałem węglowym .Ja palę węglem lub groszek i nigdy nie miałem problemów z powodu braku przedmuchu.Odnośnie sterownika przydało by się dołożyć proste wyłączanie wentylatora po spadku temperatury poniżej 30stopni chyba że jest a mi jeszcze nie zadziałało .

Portret użytkownika mirley

Re: Sterownik C.O

Wszystko to o czym piszecie to temat dla zaawansowanego sterownika C.O.. to urządzenie nie było planowane do takich funkcji

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Haruyasu

Pytanko?

Jestem początkującym więc mam pytanie czy dało by się przerobić ten sterownik na trochę prostrzy? Chodzi mi o to ,że potrzebuje coś ala termostat czujnik byłby przyłożony przy "piecu" odczytując temperature kiedy temperatura osiągnie 70 stopni "C" wtedy włączała by się dmuchawa mająca za zadanie podwyższyć temperature do 80 stopni "C" przy osiągnięciu tej temperatury dmuchawa by się wyłączała.

Portret użytkownika grek1209

Prosty Sterownik C.O.

Sterownik jest prosty i można go tak ustawić.

Portret użytkownika Haruyasu

Prosty Sterownik C.O.

W sumie tak jak to jest by mi się przydało więc prosił bym tylko o gotowy już program z obsługą tej "dmuchawy" jeśli można oczywiście. Acha i mam jeszcze jedno pytanie a wiecie może jak cenowo to wychodzi w częściach?

Portret użytkownika Łukasz

CO Dmuchawa

Ja zmieniłem procek na ATMEGA32.
Wsad jeszcze nie skończony. Puki co dmuchawa działa:)
LCD 4x20. Tylko coś z trybami i przedmuchem pomieszałem. Poprawki mile widziane:)
Może jakiś mały falowniczek zmontuje:D Narazie brak czasu

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m16def.dat"
$crystal = 16000000
 
Config Porta = &B11110011 : Porta = &B11111111
Config Portb = &B11111000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00011111 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.1 , Rs = Porta.0       'UPT M16
Config Lcd = 20 * 4
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'stopien
Deflcdchar 1 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 3                'nawias[
Deflcdchar 2 , 24 , 8 , 8 , 8 , 8 , 8 , 8 , 24              'nawias]
Cls
Cursor Off Noblink
 
Config 1wire = Pind.2
 
 
Sw_port Alias Pinb                                          'nazwa portu
Pompa Alias Portd.3
Went Alias Portd.4
Buzz Alias Portd.1
Light Alias Portd.0
 
Ds1r Alias Pind.7
Ds2r Alias Pind.6
Ds3r Alias Pind.5
 
Led_a Alias Portb.5
Led_p Alias Portb.3
Led_w Alias Portb.4
 
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Stan_sw As Byte , Sw As Byte , Licznik_sw As Byte       'sw
Dim Wyswietlanie As Byte , Poz_wysw As Byte , Wyswietlono As Bit       'Lcd
Dim Mig As Bit , Poz_ust As Byte
Dim Autosave As Byte , Autopowrot As Byte , Autolight As Byte
 
 
Dim Ds1(8) As Byte , Ds2(8) As Byte , Ds3(8) As Byte , Ds4(8) As Byte , Ds(8) As Byte , Ds_adr As Byte , Ds_ok As Bit       'DS18B20
Dim Ktory_ds As Byte , Lsb As Byte , Msb As Byte , Minusy As Byte
Dim T(4) As Word
 
Dim T_min As Word , T_alarm As Word
Dim T_max As Word
Dim Dmuch As Byte , Przerwa As Word
 
Dim Dzielnik(2) As Byte                                     'dzielniki timera
Dim Flaga_4ms As Bit , Flaga_500ms As Bit , Flaga_1s As Bit 'flagi przerwań
Dim Hbyte(2) As Byte , Hword(3) As Word , N As Byte , Hbit As Bit , M As Byte
 
Dim Buzz_en As Bit
Dim Tryb_letni As Bit                                       '0- tryb zimowy, 1- tryb letni
Dim Wygaszenie As Bit , Praca_przerwa As Bit
Dim Licznik_went As Word , Tryb_pracy As Bit                'przerywany czy ciagly
Dim Wygasz_licz As Byte , Off_licz As Byte , Oldt1 As Word
 
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Lcd "   Sterownik  C.O."
Lowerline
Lcd "********************"
Thirdline
Lcd " Sterowanie - CO,CW"
Fourthline
Lcd "   Wersja - TEST  "
Wait 3
 
If Ds1r = 1 And Ds2r = 0 And Ds3r = 0 Then
  Ds_adr = 30
  Gosub Ds_reg
  Cls
  Lcd "Ds Piec"
End If
If Ds1r = 0 And Ds2r = 1 And Ds3r = 0 Then
  Ds_adr = 40
  Gosub Ds_reg
  Cls
  Lcd "Ds Bojler"
End If
If Ds1r = 1 And Ds2r = 1 And Ds3r = 0 Then
  Ds_adr = 50
  Gosub Ds_reg
  Cls
  Lcd "Ds Dwor"
End If
If Ds1r = 0 And Ds2r = 0 And Ds3r = 1 Then
  Ds_adr = 60
  Gosub Ds_reg
  Cls
  Lcd "Ds Dom"
End If
 
 
For N = 1 To 8
  Hbyte(1) = 30 + N
  Readeeprom Ds1(n) , Hbyte(1)
  Hbyte(1) = 40 + N
  Readeeprom Ds2(n) , Hbyte(1)
  Hbyte(1) = 50 + N
  Readeeprom Ds3(n) , Hbyte(1)
  Hbyte(1) = 60 + N
  Readeeprom Ds4(n) , Hbyte(1)
Next N
 
Readeeprom T_min , 2
Readeeprom T_alarm , 4
Readeeprom T_max , 10
Readeeprom Hbyte(1) , 6
Readeeprom Dmuch , 7
Readeeprom Przerwa , 8
 
Tryb_letni = Hbyte(1).0
If T_min < 100 Or T_min > 950 Then T_min = 300
If T_alarm < 100 Or T_alarm > 950 Then T_alarm = 800
If T_max < 100 Or T_max > 950 Then T_max = 600
If Dmuch < 2 Or Dmuch > 99 Then Dmuch = 10
If Przerwa < 60 Or Przerwa > 5940 Then Przerwa = 600
 
Hword(1) = Przerwa / 60
Hword(1) = Hword(1) * 60
If Przerwa <> Hword(1) Then Przerwa = 600
 
Wait 1
 
'start watch dog
 
Wygaszenie = 1                                              'standardowo wentylator nie pracuje
Wyswietlono = 1
Wyswietlanie = 1
Autosave = 5
Autolight = 0
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
  '***********************************************   co 4ms
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
 
    Gosub Przyciski
    If Wyswietlono = 1 Then Gosub Wysw_lcd
 
  End If
  '***********************************************
 
  '***********************************************   co 500ms
  If Flaga_500ms = 1 Then
    Flaga_500ms = 0
 
    Mig = Not Mig
 
    If Pompa = 0 Then Led_p = Mig Else Led_p = 1
    If Went = 0 Then Led_w = Mig Else Led_w = 1
    Led_a = Buzz
 
    Wyswietlanie = Poz_wysw
 
  End If
  '***********************************************
 
  '***********************************************   co 1s
  If Flaga_1s = 1 Then
    Flaga_1s = 0
 
    If Light = 0 Then
      Incr Autolight
      If Autolight >= 20 Then Light = 1
    Else
      Autolight = 0
    End If
 
    If Poz_wysw <> 1 Then
      Incr Autopowrot
      If Autopowrot = 6 Then
        'Poz_wysw = 1
        Wyswietlanie = 1
        Poz_ust = 0
      End If
    Else
      Autopowrot = 0
    End If
 
 
    If Autosave < 5 Then
      Incr Autosave
      If Autosave = 5 Then
        'tu zapis do eeprom
        Writeeeprom T_min , 2                               '2 bajty
        Writeeeprom T_alarm , 4
        Writeeeprom T_max , 10                              '2 bajty
        Hbyte(1) = 0
        Hbyte(1).0 = Tryb_letni
        Writeeeprom Hbyte(1) , 6                            'bajt
        Writeeeprom Dmuch , 7                               'bajt
        Writeeeprom Przerwa , 8                             '2 bajty
        Poz_ust = 0
      End If
    End If
 
    Gosub Temperatura
    Gosub Sterowanie
 
  End If
  '***********************************************
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
  Timer0 = 5
  Set Flaga_4ms
  Incr Dzielnik(1)
  If Dzielnik(1) = 125 Then
    Dzielnik(1) = 0
    Set Flaga_500ms
    Incr Dzielnik(2)
    If Dzielnik(2) = 2 Then
      Dzielnik(2) = 0
      Set Flaga_1s
    End If
  End If
Return
'******** Przerwanie timer 0 Koniec ************
 
'***********************************************
'*****************  Przyciski     **************
Przyciski:
Sw = Sw_port And &B00000111                                 'maska na piny nieużywane jako sw
If Sw <> &B00000111 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 68 Then
      Licznik_sw = 0
      Select Case Stan_sw
        Case &B00000011:                                    'incr
        '***********************************************************
          Select Case Poz_wysw
            Case 2:
              Select Case Poz_ust
                Case 0:
                   Poz_ust = 1
                Case 1:
                   If T_max < 950 Then T_max = T_max + 10
                Case 2:
                   If T_min < 950 Then T_min = T_min + 10
                Case 3:
                   If T_alarm < 950 Then T_alarm = T_alarm + 10
              End Select
              Autosave = 0
 
            Case 3:
              Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                  If Dmuch < 99 Then Dmuch = Dmuch + 1
                Case 2:
                  If Przerwa < 5940 Then Przerwa = Przerwa + 60
              End Select
              Autosave = 0
 
 
            Case 4:
              If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
              Autosave = 0
 
 
          End Select
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
        Case &B00000101:                                    'ustaw next
        '***********************************************************
          If Poz_ust = 0 Then
            Wyswietlanie = Poz_wysw + 1
            If Wyswietlanie = 5 Then Wyswietlanie = 1
          Else
            Select Case Poz_wysw
              Case 2:
                Incr Poz_ust
                If Poz_ust = 4 Then Poz_ust = 0
 
              Case 3:
                Incr Poz_ust
                If Poz_ust = 3 Then Poz_ust = 0
 
              Case 4:
                Incr Poz_ust
                If Poz_ust = 2 Then Poz_ust = 0
 
            End Select
          End If
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
        Case &B00000110:                                    'decr
        '***********************************************************
          Select Case Poz_wysw
            Case 1:
              Off_licz = 0
              Tryb_pracy = 0
              Wygaszenie = Not Wygaszenie
            Case 2:
              Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                  If T_max > 100 Then T_max = T_max - 10
                Case 2:
                  If T_min > 100 Then T_min = T_min - 10
                Case 3:
                  If T_alarm > 100 Then T_alarm = T_alarm - 10
                Case 4:
                  If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
                  Autosave = 0
 
              End Select
              Autosave = 0
 
            Case 3:
              Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                  If Dmuch > 2 Then Dmuch = Dmuch - 1
                Case 2:
                  If Przerwa > 60 Then Przerwa = Przerwa - 60
              End Select
              Autosave = 0
 
            Case 4:
              If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
              Autosave = 0  
 
          End Select
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 60
  End If
 
Return
'***********************************************
 
'***********************************************
'**************    LCD     ***********
Wysw_lcd:
 If Wyswietlanie <> 0 Then
   Wyswietlono = 0
   Select Case Wyswietlanie
     Case 1:                                                'temp piec bojler
     '**************************************************************
       If Poz_wysw <> 1 Then
         Cls
         Lcd "Temp. Piec:"
         Lowerline
         Lcd "Temp. Bojler:"
         Thirdline
         Lcd "Temp. Dwor:"
         Fourthline
         Lcd "Temp. Dom:"
       End If
 
       For N = 1 To 2
         Hword(1) = T(n) / 10
         Hword(2) = 16
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         Locate N , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
 
       Next N
 
 
 
       For N = 3 To 4
 
         Hword(1) = T(n) / 10
         Hword(2) = 16
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         M = N - 3
         Locate N , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
 
 
       Next N
 
 
 
     Case 2:
     '**************************************************************
       If Poz_wysw <> 2 Then
         Cls
         Lcd "Temp. Zadana:"
         Lowerline
         Lcd "Temp. Min:"
         Thirdline
         Lcd "Temp. Alarm:"
         Fourthline
         Lcd "*****USTAWIENIA*****"
 
 
       End If
 
 
        If Poz_ust = 1 And Mig = 1 Then
          Locate 1 , 14
          Lcd "       "
       Else
 
 
       't max
         Hword(1) = T_max / 10
         Hword(2) = 16
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 1 , Hword(2)
         Hword(2) = T_max Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       End If
 
 
       If Poz_ust = 2 And Mig = 1 Then
          Locate 2 , 14
          Lcd "       "
       Else
 
 
       't minimalna
         Hword(1) = T_min / 10
         Hword(2) = 16
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 2 , Hword(2)
         Hword(2) = T_min Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C "
       End If
 
       If Poz_ust = 3 And Mig = 1 Then
          Locate 3 , 14
          Lcd "       "
       Else
 
 
       't alarm
         Hword(1) = T_alarm / 10
         Hword(2) = 16
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 3 , Hword(2)
         Hword(2) = T_alarm Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       End If
 
 
 
 
 
 
     Case 3:
     '**************************************************************
        If Poz_wysw <> 3 Then
         Cls
         Lcd "Nadmuch:"
         Lowerline
         Lcd "Przerwa:"
         Thirdline
         Lcd "*****USTAWIENIA*****"
         Fourthline
         Lcd "******DMUCHAWY******"
 
       End If
 
       'dmuch
       If Poz_ust = 1 And Mig = 1 Then
          Locate 1 , 14
          Lcd "       "
       Else
        Hword(2) = 15
        If Dmuch >= 10 Then Decr Hword(2)
        Locate 1 , Hword(2)
        Lcd Dmuch ; Chr(1) ; "s" ; Chr(2)
       End If
 
       'Przerwa
       If Poz_ust = 2 And Mig = 1 Then
          Locate 2 , 14
          Lcd "       "
       Else
        Hword(2) = 15
        Hword(1) = Przerwa / 60
        If Hword(1) >= 10 Then Decr Hword(2)
        Locate 2 , Hword(2)
        Lcd Hword(1) ; Chr(1) ; "min" ; Chr(2)
       End If
 
      Case 4:
     '**************************************************************
        If Poz_wysw <> 4 Then
         Cls
         Lcd "Wybierz tryb pracy: "
 
         Thirdline
         Lcd "*******WYBOR********"
         Fourthline
         Lcd "*******TRYBU********"
       End If
 
       Locate 2 , 6
       If Poz_ust = 1 And Mig = 1 Then
          Lcd "            "
       Else
         If Tryb_letni = 1 Then Lcd "Tryb Letni" Else Lcd "Tryb Zimowy"
       End If
 
 
 
 
   End Select
   Poz_wysw = Wyswietlanie
   Wyswietlanie = 0
   Wyswietlono = 1
 End If
Return
'************** LCD Koniec ***********
 
'**********  rejestracja DS *********
Ds_reg:
  Disable Interrupts
  1wreset
  1wwrite &H33
  Ds(1) = 1wread(8):
  Enable Interrupts
  If Ds(1) <> 255 Or Ds(2) <> 255 Or Ds(3) <> 255 Or Ds(4) <> 255 Or Ds(5) <> 255 Or Ds(6) <> 255 Or Ds(7) <> 255 Or Ds(8) <> 255 Then
    Ds_ok = 1
    For N = 1 To 8
      Hbyte(1) = Ds_adr + N
      Writeeeprom Ds(n) , Hbyte(1)
    Next N
  Else
    Ds_ok = 0
  End If
Return
'******  rejestracja DS Koniec ******
 
'*************  Temperatura   ***********
Temperatura:
  Disable Interrupts
  1wreset
  Select Case Ktory_ds
    Case 0:
      1wwrite &HCC
      1wwrite &H44
    Case 1:
      1wwrite &H55
      1wwrite Ds1(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 2:
      1wwrite &H55
      1wwrite Ds2(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 3:
      1wwrite &H55
      1wwrite Ds3(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 4:
      1wwrite &H55
      1wwrite Ds4(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
  End Select
 
  Enable Interrupts
 
  If Ktory_ds > 0 Then
    T(ktory_ds) = Msb * 256
    T(ktory_ds) = T(ktory_ds) + Lsb
    Minusy.ktory_ds = Msb.7
 
    If Minusy.ktory_ds = 1 Then
      T(ktory_ds) = Not T(ktory_ds)
      T(ktory_ds) = T(ktory_ds) + 1
    End If
 
    T(ktory_ds) = T(ktory_ds) * 10
    T(ktory_ds) = T(ktory_ds) / 16
   Else
    If Poz_wysw = 1 And Wyswietlono = 1 Then Wyswietlanie = 1
  End If
 
  Incr Ktory_ds
  If Ktory_ds = 5 Then Ktory_ds = 0
 
Return
'**********  Temperatura  Koniec *********
 
 
'************   Sterowanie       ***************
'***********************************************
Sterowanie:
 
 
     If Tryb_letni = 1 Then
    'letni
    If T(1) >= T_min Then                                   'wlacza sie przy t_min
      Hword(1) = T(2) + 20
      Hword(2) = T(2) + 20
      If T(1) >= Hword(1) Then Pompa = 0                    'wlacza sie pompa jesli na piecu t większe o 7 stopni niz bojler
      If T(1) <= Hword(2) Then Pompa = 1                    'wylacza kiedy gdy na piecu t większe o mniej niż 3 stopnie
    Else
      Hword(1) = T_min - 20
      If T(1) < Hword(1) Then Pompa = 1
    End If
  Else
 
 
    'zimowy
    If T(1) >= T_min Then
     Pompa = 0
    Else
      Hword(1) = T_min - 10
      If T(1) < Hword(1) Then Pompa = 1
    End If
   End If
 
  'alarm
  If T(1) >= T_alarm Or T(2) >= T_alarm Then
    If Buzz_en = 1 Then Buzz = Not Buzz Else Buzz = 1
  Else
    Buzz = 1
    Hword(1) = T_alarm - 50
    If T(1) <= Hword(1) And T(2) <= Hword(1) Then Buzz_en = 1
  End If
 
  'wentylator  max
   If T(1) <= T_max Or T(1) >= T_min Then
     Tryb_pracy = 1
     Hword(1) = T_min - 10
      If T(1) > Hword(1) Then Tryb_pracy = 0
    End If
 
   'wentylator
  If T(1) >= T_max Then
    If Tryb_pracy = 0 Then                                  'je?li był ciagly to zmien tryb na przerywany i resetuj zmienne
      Tryb_pracy = 1
      Licznik_went = 0
      Praca_przerwa = 0
    End If
  Else
    Hword(1) = T_max - 20
    If T(1) < Hword(1) Then
      If Tryb_pracy = 1 Then
        Tryb_pracy = 0
        Off_licz = 0
      End If
    End If
  End If
 
 
  If Wygaszenie = 0 Then
 
    If Tryb_pracy = 0 Then
      Went = 0
 
      Incr Wygasz_licz
      If Wygasz_licz = 250 Then                             '250
        Wygasz_licz = 0                                     'co okolo 4min
        If Oldt1 >= T(1) Then
          Incr Off_licz
          If Off_licz = 8 Then Wygaszenie = 1
        Else
          If Off_licz > 0 Then Decr Off_licz
        End If
        Oldt1 = T(1)
      End If
 
    Else
      If Praca_przerwa = 0 Then                             'przerwa
        Went = 1
        Incr Licznik_went
        If Licznik_went >= Przerwa Then
          Licznik_went = 0
          Praca_przerwa = 1
        End If
      Else
        Went = 0
        Incr Licznik_went
        If Licznik_went >= Dmuch Then
          Licznik_went = 0
          Praca_przerwa = 0
        End If
      End If
    End If
 
  Else
    Went = 1
  End If
 
Return
 
'********    Sterowanie      Koniec ************

Portret użytkownika Szymon SQ3OPC

sterownik co

Słuchajcie chłopaki Mirley ma całkowitą racje ja już też to pisałem ten sterownik to jak w tytule prosty sterownik co więc nie wymagajmy zbyt wiele. Przeszukując stronę Mirleya widziałem że istnieje możliwość wymyślenia i opublikowania profesjonalnego sterownika.Mój przerobiony kod jutro postaram się umieścić na stronie. Myślę grek że sterownik działa tak jak miał. co do startu dmuchawy to proponuje zrobić wyłącznik już po stronie 230v dla dołożenie przycisku start jak i wygaszania pieca trzeba by zmodyfikować cały kod.

Portret użytkownika robert48

Nowy procek

Witam
Szanowni koledzy taka mała podpowiedz W atmedze 8 zrobiło się ciasno , a myślę że rozwiązaniem tego problemu jest zastąpienie jej atmegą 168 .
Ma ona identyczne wyprowadzenia i dwa razy większą pojemność .Z moich informacji wynika iż struktura jest prawie identyczna .

-

Pozdrawiam
Robert48

Portret użytkownika grek1209

sterownik co

Szymon i Mirley macie całkowitą racje co do dalszych modyfikacji.Szymon sterownik działa dokładnie tak jak chciałem dziękuje.

Portret użytkownika Łukasz

CO

No tak ale po co mam kupować 168 jak mam i 16 i 32 :) Tu tez mam sporo miejsca

Portret użytkownika Szymon SQ3OPC

Sterownik co

Moje dwa zmienione kody Mirleya są tu: http://mirley.firlej.org/node/335 może komuś się przydają
w razie potrzeby pliku hex mogę przesłać na @

Portret użytkownika Łukasz

Szymon ale przydało by się

Szymon ale przydało by się wyłączyć dmuchawę żeby cały czas nie pracowała gdy piec gaśnie

Portret użytkownika Szymon SQ3OPC

sterownik co

Ciągle pracuję nad tym kodem, w tej chwili są przedmuchy ,musiałem usunąć z programu pomiar 2ch temperatur została tera tylko temp. pieca i bojlera dla mnie wystarczy,fakt zostało teraz jeszcze trochę miejsca na razie kombinuje z przyciskiem start... a nie ma jeszcze część odpowiedzialną za sterowanie podświetlaniem z moim wyświetlaczem i tak nie było potrzebne. Oczywiście To dopiero zmiana programu teraz pozostaną testy, na razie musiałem, mój sterownik założyć bo pompa chodziła cały czas, jak tylko będę miał więcej wolnego czasu przetestuje chyba że ktoś ma ochotę to prześlę kod.

Portret użytkownika IMEX2

Przycisk START

przycisk Start w moim profesionalnym sterowniku dziala tylko na większy nadmuch dla kominka - tylko i wylacznie
osobno ustala sie obroty i czas rozpalania - potem praca

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Sterownik C.O

Nie rozumiem problemów z wyłączeniem się wentylatora jeśli w piecu wygasa, przecież w najprostszej wersji programu z wentylatorem którą napisałem wentylator wyłącza się automatycznie po około 30min jak nie jest wstanie podnieść temperatury w piecu (czyli jak wygasło)

do Łukasz:
Proszę nie umieszczać całych długich kodów źródłowych w odpowiedziach pod projektem, teraz trzeba przewijać stronę żeby poczytać posty. Proszę zamieścić kod pod atmega32 na forum w dziale kody źródłowe lub jeśli nie jest jeszcze gotowy to w dziale programowanie i tam pytać o pomoc. Do gotowego programu można dać link w tym temacie i każdy sobie ściągnie.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Szymon SQ3OPC

Sterownik co

No fakt jest ten kawałek w kodzie odpowiedzialny za wyłączenie wentylatora jak wygaśnie tak szczerze to dopiero teraz do niego zajrzałem i tak dokładnie przeanalizowałem.
Wcześniej chciałem dorobić tylko fragment nastawu temp. wyłączenia dmuchawy w Twoim programie już nie było miejsca wiec zaczołem przerabiać kod w którym nie było wentylatora.Myślę że dzisiaj dam rade dokończyć modyfikacje włącznie z wyłączeniem po wygaśnięciu.

Portret użytkownika grek1209

sterownik co

Szymon bardzo ci dziękuje postaram się dziś przetestować kod.Sterownik pracuje super .Dziękuje Szymonowi za zaangażowanie i poświęcony czas na przerobienie kodu.Mirley dziękuje za udostępniony kod Żródłowy.Pozdrawiam.

Portret użytkownika Szymon SQ3OPC

test

Ok dzięki daj znać jak efekty sam jestem ciekaw ale nie mogę zostawić swojej pompy na krótka;)i wgrarć programu.A zapomniałem niestety coś kosztem czegoś,jest tylko pomiar 2-ch temperatur piec i bojler powód mało miejsca:(

-------------

Piec: DSR1 = 1, DSR2 = 0
Bojler: DSR1 = 0, DSR2 = 1
1= zwora rozwarta 0= zwarta

Portret użytkownika paweł

Re: Sterownik C.O.

Mam takie laickie pytanie: czym rożni się zakończenie Vcc od '+5V'? Tak samo pin Reset-jest z czymś dalej połączony?
Pozdrawiam

Portret użytkownika slawo

mam prośbę

Witam wszystkich, trafiłem na tą stronkę przypadkiem, powiem że jest ciekawa, wpadł mi w oko sterownik pompy co. Chciałbym zbudować sobie taki sterownik i mam prośbę z tym związaną. Może dałoby się zamieścić wsady do procka w postaci hex lub bin, byłbym wdzięczny.
Pozdrawim

Portret użytkownika grek1209

sterownik co

napisz który wsad bo są4 i podaj adres e-mail to ci prześle.

Portret użytkownika slawo

Dzieki za zainteresowanie,

Dzieki za zainteresowanie, prosilbym o 2, bez wentylatora i z wentylatorem na Atmege8. Moj e mail

Portret użytkownika grek1209

sterownik co

Daj znać czy doszło bo mam jakiś problemy z pocztą .

Portret użytkownika slawo

Doszło, dzieki wielkie.

Doszło, dzieki wielkie.

Portret użytkownika Szymon SQ3OPC

Sterownik co

Zamieszczam trzeci kod myślę,że ta wersja będzie już ostatnia nic więcej już nie trzeba dodawać a przynajmniej nie w wersji pod atmega8 choć jeszcze troszkę miejsca zostało ale to już za mało nawet na pomiar jeszcze jednej temp. pozdrawiam
A kod dostępny Tu: http://mirley.firlej.org/node/335

Portret użytkownika rafliczek22

Witam. Mam takie pytanie jak

Witam.

Mam takie pytanie jak są naliczane te 4 minuty wentylatora, bo w obsłudze przerwania tego nie ma i jeszcze jedna rzecz której nie rozumiem to klawiatura, po co robić tak skomplikowaną obsługę klawiatury dla 3 przycisków bo ja za bardzo nie umiem się w niej połapać.

Portret użytkownika mirley

Re: Klawiatura sterownika C.O

Obsługa klawiatury wcale nie jest skomplikowana (ma tylko kilka linijek, reszta to obsługa kolejnych klawiszy), zasadę jej działania opisałem w kodach źródłowych na mojej stronie i zawsze korzystam z takiego rozwiązania. Dla trzech przycisków można by było zrobić prościej(ideowo) ale trzeba więcej zmiennych, będzie to zajmowało więcej pamięci procka i ogólnie po co się w to bawić jak mam sprawdzony i uniwersalny sposób.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika rafliczek22

A w jaki sposób są naliczane

A w jaki sposób są naliczane te 4 minuty bo w przerwaniu nie ma nic na temat ich naliczania(nie jest generowane przerwanie co 4 min.)

Portret użytkownika mirley

Re; 4 minuty

W procedurze odpowiedzialnej za sterowanie jest licznik:

      Incr Wygasz_licz
      If Wygasz_licz = 250 Then                             '250
        Wygasz_licz = 0                                     'co okolo 4min

Dokładnie odlicza on 250sek czyli 4,16 minuty

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Darek05

Sterownik co

Cześć !!!
Dzisiaj ukończyłem składać sterownik do mojego pieca, no i mam mały problem, posiadam wersję DEMO BASCOM-a i nie jestem w stanie przekompilować kodu w wersji Szymon-a.
Szymon SQ3OPC napisał:

Quote:
Zamieszczam trzeci kod myślę,że ta wersja będzie już ostatnia nic więcej już nie trzeba dodawać a przynajmniej nie w wersji pod atmega8, choć jeszcze troszkę miejsca zostało, ale to już za mało nawet na pomiar jeszcze jednej temp. pozdrawiam

Mam pytanie Szymon, czy mógłbyś przesłać mi skompilowaną tę wersję wsadu, ponieważ twoja najbardziej mi odpowiada z uwagi na obsługę zaworu dla bojlera.

-

Pozdrawiam Darek

Portret użytkownika Szymon SQ3OPC

wsad

Nie ma najmniejszego problemu którą wersje cytujesz o 3ciej ale tam nie ma obsługi zaworu. Podaj e-mail to wyślę chyba że mam jeszcze wprowadzić poprawki co do opisu wyświetlania czujników tzn np pokój,zewnątrz itp proszę o info na pocztę

Portret użytkownika Darek05

wsad

Przeleciałem na szybko wątki i gdzieś wyczytałem, że jest wersja z pomiarem dwóch temperatur, bojler i piec oraz obsługą zaworu odcinającego bojler po wygaśnięciu pieca lub obniżeniu temp. pieca względem temp. bojlera, oraz obsługą wentylatora.
Chyba, że moja radość była przedwczesna i mi się tylko wydawało że taka wersja istnieje?
I jeszcze jedno czy jest tam obsługiwane podświetlenie wyświetlacza bo zastosowałem w moim błękitny i bez podświetlenia nic nie będzie widać.

Mój adres

-

Pozdrawiam Darek

Portret użytkownika Darek05

wsad

Znalazłem!!! Chodzi o wersję z zaworem i czterema czujnikami temperatur ona nie obsługuje wentylatora - czy tak??Opisy mogą zostać są odpowiednie

-

Pozdrawiam Darek

Portret użytkownika Szymon SQ3OPC

wsad

To niestety muszę Cię zmartwić takiej wersji nie ma może by starczyło miejsca na sterowanie zaworem ale nastaw musiał by być odgórnie programowo nastawiony po za tym w układzie wykonawczym masz 2 kanały a potrzebował byś trzy.

Portret użytkownika Darek05

wsad

Ok. uprzedziłem twoją odpowiedź, chodziło mi o wersję z obsługą zaworu bojlera przyjrzałem się opisom nad kodami faktycznie takiej nie ma, ale o tą wersję mi właśnie chodzi - opisy dla czujników są odpowiednie.

-

Pozdrawiam Darek

Portret użytkownika Szymon SQ3OPC

wyświetlanie

Mirley mam pytanie chciał bym na pierwszym ekranie wyświetlać temperaturę z czujnika i w drugiej lini temperaturę zadaną czyli t_min nie mogę sobie z tym poradzić

  If Poz_wysw <> 1 Then
         Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32  'stopien
         'Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32       ' o kreskowane
 
         Cls
         Lcd "Piec:"
         Lowerline
         Lcd "T zadana:"
       End If
 
       For N = 1 To 2
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         Locate N , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N

Portret użytkownika mirley

Re: Wyświetlanie

najprościej jest zrobic dwie nowe zmienne:

Dim TT(2) as word

potem:

        ......
         Lowerline
         Lcd "T zadana:"
       End If
 
       TT(1) = T(1)
       TT(2) = T_zadana 'temperatura zadana
 
       For N = 1 To 2
         Hword(1) = T(n) / 10
      .....

w pętli for która jest niżej musisz zamienić teraz T(n) na TT(n) (w dwóch miejscach)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Szymon SQ3OPC

wyswietlanie

chyba o to Ci chodziło ale niestety nie działa znaczy nie bascom wywala błędy zrobiłem tak:

 Dim Tt(2) As Word 

potem
 Cls
         Lcd "Piec:"
         Lowerline
         Lcd "t ust:"
       End If
 
          Tt(1) = T(1)
          Tt(2) = T_min                                     'temperatura zadana
 
 
           For N = 1 To 2
         Hword(1) = Tt(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         Locate N , Hword(2)
         Hword(2) = Tt(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N

Jestem początkujący w bascomie więc odpowiedz na pewno będzie dla Ciebie prosta a ja będę się męczył z tym nie wiadomo jak długo

Portret użytkownika mirley

Re: Program

Jakie błędy w którym miejscu? Deklarację zmiennych dałeś na początku programu, razem z innymi zmiennymi? Może nie ma juz miejsca na program lub w ramie na zmienne?

Zmieniłeś dokładnie to o co mi chodziło, nie powinno być błędów

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Szymon SQ3OPC

program

Już wszystko jasne nie było miejsca na zmienne, teraz działa chcę wykorzystać program do sterowaniem wentylatorami w chlewni. Na wyświetlaczu ma być widoczna temperatura pomieszczenia i temperatura zadana jaką mają utrzymywać wentylatory może jeszcze wcisnę ustawiana histerezę ale do tego są potrzebne kolejne zmienne muszę jeszcze coś wyrzucić no tak przecież jeżeli będzie jeden czujnik nie trzeba stosować kodowania czujników. Dzięki za radę.

Portret użytkownika Szymon SQ3OPC

histereza

Znowu mam problem, tym razem z histerezą chciałem zrobić ustawianą z menu. Działa ale w dziwny sposób jeżeli nastawie histereza równa 0 jest ok jeżeli ustawie od 1 do 10 stopni to zawsze jest 0,3 stopnia. zrobiłem to tak
zmienne

Dim T_h As Word   
 


If T_h < 0 Or T_h > 100 Then T_h = 20     

ustawienie
   Case 3:
               Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                  If T_h < 100 Then T_h = T_h + 10

            Case 3:
               Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                   If T_h > 0 Then T_h = T_h - 10
               End Select
              Autosave = 0

    If T(1) >= T_min Then
      Went = 0
      Praca_przerwa = 1
       End If
 
        Hword(2) = T_min + T_h
    If T(1) < Hword(2) Then
       Went = 1
       Praca_przerwa = 0
       End If

dodałem też jeżeli temperatura nie jest większa niż ustawiona to przedmuchy.

Portret użytkownika paweł

zrobiłem:) ale mam kilka

zrobiłem:) ale mam kilka pytan.
Nie do końca rozumiem tego języka programowania. Nie ma ktoś przypadkiem napisanego programu w C?
Jaka jest konkretnie różnica między trybem letnim, a zimowym? No i gdzie mogę ustawić histerezę?
Z góry dziękuję i pozdrawiam.
Paweł

Portret użytkownika Szymon SQ3OPC

pytania

Ad1. różnica dotyczy załączenia pompy. Chodzi o to żeby woda w piecu jak najwięcej dogrzała bojler a nie żeby bojlera grzał piec;)
pompa -
Włączy się TRYB LETNI

-Temperatura w piecu przekroczy t. minimalną i będzie wyższa od temp w bojlerze o 7 stopni

Wyłączy sie TRYB LETNI

-Temperatura bojlera będzie niższa od pieca o 3 stopnie

Włączenie TRYB ZIMOWY

- Temperatura przekroczy temp. min

Wyłączenie TRYB ZIMOWY

Temperatura pieca stopnie poniżej temp. minimalanej

 If Tryb_letni = 1 Then
    If T(1) >= T_min Then
      Hword(1) = T(2) + 70
      Hword(2) = T(2) + 30
      If T(1) >= Hword(1) Then Pompa = 0
      If T(1) <= Hword(2) Then Pompa = 1
    Else
      Pompa = 1
    End If
  Else
    If T(1) >= T_min Then
     Pompa = 0
    Else
      Pompa = 1
    End If
  End If

Ad2.
Histerezę można ustawić programowo

Portret użytkownika paweł

Czujniki

Dziękuję. Mam jeszcze jeden problem. Po zarejstrowaniu czujnika wyświetla się Ds Piec, ale temperaturę dalej pokazuje zerową. Może to głupie pytanie, ale dopiero zaczynam swoją przygodę z elektroniką.
Pozdrawiam
Paweł

Portret użytkownika Szymon SQ3OPC

czujniki

Nie bardzo rozumiem co się dzieje z tym czujnikiem. Normalnie po ustawieniu odpowiednio zworek np konfiguracja dla desa piec po włączeniu zasilania na wyświetlaczu masz napis ds piec i po chwili już wyświetla temp. chyba że coś pozmieniałeś w programie albo masz uszkodzonego desa pamiętaj też że musi to być ds18b20 a nie ds18s20.