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 mirley

Re: Co

To jest kwestia głupio rozwiązanego wyświetlania... zamiast :

       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

spróbuj:

       For N = 1 To 2
         Hword(1) = T(n) / 10
         Locate N , 10
         Lcd "  "
         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

-

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 idepozapalki

Niestety w wersji Demo

Niestety w wersji Demo Bascoma tego nie skompiluję. Uruchomiłem i dostałem błąd 999 linii czy jakoś tak.

Właściwie to nie jest to wielki problem, bo temperatura baniaka nieczęsto schodzi poniżej 10 jednak chciałem żebyś wiedział że coś takiego się dzieje.

Portret użytkownika mirley

Re: Co

Poprawiłem to w kodzie, skompilowana wersja jest w załącznikach..... sprawdx czy działa jak możesz bo musiał bym płytke testową podpinac a teraz nie mogę tego zrobić

-

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 idepozapalki

Witam ponownie, Program

Witam ponownie,
Program wgrałem, jednak nie zrobiłem mu dokładnego sprawdzenia.
Już trzeci raz wyskoczył mi ten sam problem z tym sterownikiem. Nie wiem z jakiego powodu, ale coś kasuje EEPROMa w mojej Atmedze. To był już 3 raz i zdecydowałem na zmianę oprogramowania. Czujniki teraz mam podpięte niezależnie i oddzielnie do osobnych pinów Atmegi, nie ma już potrzeby ich identyfikacji i zapisywania numerów w pamięci. Przy okazji sprawdzane jest CRC każdego pomiaru. Wiem, że mógłbym zgrać sobie zawartość pamięci EEprom po przypisaniu czujnik jednak moim zdaniem to bez sensu.

Portret użytkownika mirley

Re: Sterownik do Pieca

Ciekawe... u mnie działa to już ponad 5 lat bez problemu. Może problemy z zasilaniem albo procek uszkodzony i eeprom się wywalił.... cięzko powiedzieć

-

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 EDC

Odp. Sterownik pieca

U mnie podczas burz napięcie sieciowe często przerywało bo gałęzie drzew szarpały przewody. Na końcu Zakład Energetyczny poszedł po rozum do głowy i wynajął firmę która przycięła drzewa w pobliżu linii.
Niemniej do czasu kiedy to zrobili podczas burz napięcia szalały i zasilacz na transformatorku, mostku i kondensatorze powodował że dwa razy Eeprom się wysypał jak pisze kolega wyżej.

Sprawę załatwia włączenie FuseBitu BODEN.
Nawet czytając Datasheet do mikrokontrolera można natknąc się na uwagę że bit ten powinno się właczać zawsze kiedy pracujemy z Eeeprom.
(dla Atmega8 strona 21 - Preventing EEPROM Corruption)

Te błędy eeprom pojawiały się nawet kiedy program nie zapisuje niczego do niej podczas startu. Chodzi o to że mikrokontroler ma ścićle określone przy jakich napięciach gwarantowana jest jego bezawaryjna praca. Nie znaczy to jednak że poniżej tych wartości przestaje on pracować. Mogą pojawiać się błędne interpretacje rozkazów i niepoprawna praca.

Włączenie BODEN powoduje że procesor zostaje wyłaczony natychmiast i utrzymywany w stanie RESET do czasu aż napięcie nie ustabilizuje się na poprawnej wartości.

Od czasu włączenia BODEN nie mam problemów z pamięcią.

Włączam go bardzo często. Może się na przykład przydać wtedy kiedy okazuje się ze mikrokontorler odłączony od zasilania pracuje dalej kiedy mamy do niego podłączona przejściówkę RS232. Pobiera prąd z pinów interfejsu. Można ustawić BODEN na 4V i procek nie będzie pracował na zasilaniu pasożytniczym :D

Podsumowując - włącz BODEN w FuseBitach

-

BARTek
Moja strona

Portret użytkownika mirley

Re:co

W sumie kolega słusznie zauważył.... ja testując układy przeważnie w mieszkaniu w mieście nie mam szans zauwazyc takich problemó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 idepozapalki

mirley Nie wiem co było

mirley
Nie wiem co było przyczyną czyszczenia eepromu. Oczywiście problemów z zasilaniem nie wykluczam. Jednak do tej teorii byłem sceptyczny, bo układ jest solidnie zasilany ze stabilizatora liniowego 7805 na radiatorze. Naturalnie z kondensatorkami. W układzie nie użyłem triaków tylko przekaźnik. Zdawałem sobie sprawę z jego ułomności. Układ był testowany przez pół roku, na płytce uniwersalnej jednak zmontowany dość solidnie (wykluczone sytkówkowe problemy). Podczas użytkowania przy niektórych włączeniach/wyłączeniach przekaźnika wariował/wieszał się LCD (wywalał chińszczyznę, mroził ekran itp), ale pomimo tego, że na LCD były głupoty to atmega w dalszym ciągu robiła swoje czyli wyłączała ten przekaźnik. Po resecie wszystko wracało do normy. Druga sprawa: ponieważ używałem przekaźnika więc pompka nie była załączana w zerze tylko jak się jej udało i to też rozwalało "grafikę" na LCD, ale procesor pracował.

Problem z Eepromem był od razu przy starcie. Na wyświetlaczu od pieca i bojlera: -0.0C i to wszystko. Za pierwszym razem sprawdziłem wszystko. Nigdy nie było padu w trakcie pracy, żeby nagle na wyświetlaczu pojawiło się 0. Nie miałem też zakłóceń typu 85C. Raz padł zapis w eepromie od samego bojlera i na nim pokazywało -0.0C.
Upierdliwość z wyczyszonym Eepromem jest jednak taka że oba DS pracowały podpięte pasożytniczo na dwuprzewodowym kablu i po każdej takiej akcji z padniętym eepromem byłem zmuszony je wyciągać rozlutowywać, rejestrować i montować je ponownie. Dla mnie to BARDZO duży minus tej konstrukcji, ale tylko od strony programowej. Dobrze, że nie zalałem czujników na stałe żywicą z wyprowadzonym dwużyłowym kablem z rurek.

Za radą BARTka skoryguje tego fuza. Jednak pod obecnym oprogramowaniem nie ma żadnych problemów. Obecność czujników mam kontrolowaną przy starcie i wystarczy zresetować sterownik żeby sprawdzić czy DSy są ok, ale one chyba się nie psują. Wiem, że onewire to niegłupie rozwiązanie jednak u mnie się nie sprawdziło. Poza tym DSy na osobnych pinach mają dla mnie taką zaletę że gdyby coś się jednak któremuś stało to ktoś mi go po prostu wymieni gdyby mnie nie było i nie trzeba do tego grzebać w menu, niczego ustawiać/przestawiać, tylko po prostu wymienić na nowy. Sterownik mam w okolicy pieca więc zalety onewire są raczej pomijalne u mnie, a ponieważ użytkuje go nie tylko ja więc zależy mi na jego bezawaryjności.

Portret użytkownika mirley

Re: Sterownik

Rozumiem wszystkie takie sytuacje i sam nie mógł bym pracowac w sytuacji kiedy eeprom by sie kasował.... U mnie jedna taka akcja zaowocowała by przerobieniem systemu..... Tez jestem zwolennikiem czujników na wielu przewodach w ważnych sytuacjach, kiedy trzeba cos na szybko wymienić rejestacja czujników jest kłopotliwa....

Co do przekaźników sam miałem problemy z przekaźnikami, w projekcie obrotnica do kolektora słonecznego.... tam były dwa styczniki włączające mały silnik trójfazowy.... jesli styczniki były w tej samej puszcze co mikrokontroler, wywalał sie LCD co drugie włączenie... z eepromem nie pamiętam czy były problemy.... Dopiero oddalenie styczników kilka metrów od procesora rozwiązało problem.... Teraz juz prawie zawsze używam triakó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 sq3ow

problem z dodaniem czujników

Witam serdecznie nie mogę zarejestrować czujników a dokładnie wszystko idzie ok ale nie pojawia się temperatura na wyświetlaczu

Portret użytkownika sq3ow

problem z dodaniem czujników

Witam serdecznie nie mogę dodać czujników a dokładnie nie chce mi wyświetlać tęmperatury
na lcd dla wszystkich -0.0

Portret użytkownika Szymon SQ3OPC

Sterownik pracy hajnówki

Witam.Na bazie sterownika co postanowiłem zrobić sterowanie do hajnówki. Jest to spalanie trocin. Potrzebne sterowanie ma za zadanie sterowaniem podania trocin przez żmijkę do komory spalania oraz regulacja temperatury poprzez sterowanie wentylatorem.
-Podawanie trocin:
Sterownik ma włączyć silnik podawania na określony czas oraz odczekać i ponownie załączyć go.
-Wentylator.
Włącza się gdy temperatura spadnie poniżej nastawionej i wyłącza przy jej przekroczeniu.
Nie mogę dać sobie rady ze sterowaniem.
Gdy dołożyłem załączanie wenylatora przestało działać sterowanie podawaniem trocin.
Proszę o pomoc.

Sterowanie:
 
       If T(1) >= T_min Then
         Praca = 1
         Praca_przerwa = 0
       Else
        Hword(1) = T_min - T_h
        If T(1) <= Hword(1) Then
         Praca = 0
        End If
       End If
 
 
 
 If Praca = 1 Then
     Went = 0
Else
    If Praca_przerwa = 0 Then                               'przerwa
        Went = 0
        Incr Licznik_went
        If Licznik_went >= Dmuch Then
          Licznik_went = 0
          Praca_przerwa = 1
 
        End If
      Else
        Incr Licznik_went
        If Licznik_went >= Przerwa Then
          Licznik_went = 0
          Praca_przerwa = 1
        End If
        End If
        End If
 
 If T(1) >= T_min Then
    Went1 = 0
 Else
    Hword(1) = T_min - T_h
        If T(1) <= Hword(1) Then
         Went1 = 1
        End If
       End If
Return

Portret użytkownika EDC

Odp.Sterownik pracy hajnówki

Pamiętasz pewnie z lekcji matematyki "skracanie". Po co najpierw mnożyć coś x2 jeśli zaraz potem dzielisz /2...
To samo tyczy się programowania. Jeśli się przyjrzysz to pierwszy If ma te same parametry co ostatni czyli porównuje T(aktualną) z T_min.
Można więc te zadania zamknąć w tym samym, pierwszym If`ie.
Zastanawiający w nim jednak jest zapis "Praca_przerwa=0" . To by bowiem oznaczało że zawsze kiedy temperatura wyższa od minimalnej to zmienna Praca_przerwa ma zero i to Ci popsuje właśnie tę prace czasową.

Sterowanie:
 
   If T(1) >= T_min Then
      Praca = 1
      Praca_przerwa = 0                                     '<<< zastanawiające
      Went1 = 0
   Else
      Hword(1) = T_min - T_h
      If T(1) <= Hword(1) Then
         Praca = 0
         Went1 = 1
      End If
   End If
 
 
   If Praca = 1 Then
      Went = 0
   Else
      If Praca_przerwa = 0 Then                               'przerwa
         Went = 0
         Incr Licznik_went
         If Licznik_went >= Dmuch Then
            Licznik_went = 0
            Praca_przerwa = 1
 
         End If
      Else
         Incr Licznik_went
         If Licznik_went >= Przerwa Then
            Licznik_went = 0
            Praca_przerwa = 1
         End If
      End If
   End If
 
Return

-

BARTek
Moja strona

Portret użytkownika Szymon SQ3OPC

Sterownik hajn?wki

Dziękuję Bartku za szybką odpowiedź. Jednak niestety nie działa. Początkowa wersja przyjmowała tylko pracę samego podajnika i działało moze nie całkiem jak chciałem. Miałem do tego usiąść jednak trzeba jeszcze było dołożyć wentylator. I teraz działa tylko on.Reszta programu tylko trochę przerobiona. Wieczorem postaram się wrzucić całość

Portret użytkownika Szymon SQ3OPC

Sterownik pracy hajnówki

.

Portret użytkownika Szymon SQ3OPC

Sterownik pracy hajnówki

Poradziłem sobie z kodem. Mam tylko jeszcze jeden problem. Chciał bym żeby cykl pracy zaczynał się od załączenia stycznika (praca) a nie jak teraz od przerwy.

 If T(1) >= T_min Then
    If Tryb_pracy = 1 Then                                  'je?li był ciagly to zmien tryb na przerywany i resetuj zmienne
      Tryb_pracy = 0
      Licznik_went = 0
      Praca_przerwa = 0
      Went1 = 0
    End If
  Else
    Hword(1) = T_min - T_h
    If T(1) < Hword(1) Then
      If Tryb_pracy = 0 Then
        Tryb_pracy = 1
        Went1 = 1
      End If
    End If
  End If
 
  If Wygaszenie = 0 Then
 
    If Tryb_pracy = 0 Then
      Went = 0
      End If
 
    Else
      If Praca_przerwa = 0 Then                             'przerwa
        Went = 0
        Incr Licznik_went
        If Licznik_went >= Przerwa Then
          Licznik_went = 0
          Praca_przerwa = 1
        End If
      Else
        Went = 1
        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

Portret użytkownika Szwagier

Sterowanie 2 pompka

Czesc. Jestem nowy, wiec na wstepie witam wszystkich.
Mam mala prosbe, potrzebuje sterowac 2 pompka, nie moge sobie poradzic z kodem. Czy mozecie mi pomoc?
Fajnie byloby gdyby druga pompka zalaczala sie przy osiagnieciu temperatury minimalnej. Ale jesli nie jest to mozliwe to 2 opcja. Zalaczanie 2 pompki przy wyborze np trybu zimowego. Przy trybie letnim dzialalaby tylko jedna pompka, ta ktora dziala.
Ogolnie sterownik dziala bardzo dobrze. Wiec dzieki za udostepnienie pomyslu.

Portret użytkownika mirley

Re: CO sterownik


Procedura sterownie wyglądać będzie teraz tak:

Sterowanie:
 
  If Tryb_letni = 1 Then
    'letni
    If T(1) >= T_min Then                                   'wlacza sie przy t_min
      Hword(1) = T(2) + 70
      Hword(2) = T(2) + 30
      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 - 30
      If T(1) < Hword(1) Then Pompa = 1
    End If
    Went = 1
  Else
    'zimowy
    If T(1) >= T_min Then
     Pompa = 0
    Else
      Hword(1) = T_min - 30
      If T(1) < Hword(1) Then Pompa = 1
    End If
    Went = Pompa
  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
 
Return

Wywaliłem całą obsługę wentylatora i zamiast niego należy teraz podłączyć drugą pompkę. W trybie Letnim druga pompka jest zawsze wyłączona, natomiast w trybie ziomowym działa dokładnie tak samo jak pompka podstawowa... mam nadzieję że tak to miało działać

-

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 Szwagier

Dzieki mirleyZrobiłem także

Dzieki mirley

Zrobiłem także kilka udoskonaleń pod swój piec, mianowicie sterownik steruje jedną pompką CWU w trybie letnim a dwiema (CWU i CO) w trybie zimowym.
Jest sterowana temperatura załączenia pompki lub pompek i ustawiana temperatura max bojlera. Sterowanie temperaturą max bojlera przydaje się w trybie zimowym ponieważ dogrzewa bojler do określonej temperatury a potem wyłącza pompkę i pracuje pompka CO. Również działa to jak w orginale że wyłącza CWU kiedy temperatura na piecu spadnie o 1 stopień a kiedy wzrośnie o 5 załacza pompkę i pompuje do ustawionej temperatury. Jedynie z czym jeszcze nie walczyłem to to iż nie mogę wyrzucić Case 5 (wyrzuciłem sterowanie wentylatorem i teraz mam dwa razy to samo wyświetlenie) nie do końca pamiętam Bascoma ale już jest o wiele lepiej.
Sterownik działa mi tylko latem kiedy opalam tylko drzewem, czasami tylko potrzebuję załaczyć ciepło na dom, stąd też używanie drugiej pompki.
Zmodyfikowałem program dla obsługi 3 pompki dla podłogi ale jeszcze nie testowałem gdyż nie mam jeszcze układu wykonawczego
O dziwo jeszcze się mieści na atm8 ;-)

Jeszcze raz dziękuję za udostępnienie projektu, bardzo mi pomógł i działa teraz praktycznie idealnie jest czytelny i prosty w obsłudze.

Oczywiście mogę podzielić się kodem, nie pisałem na forum bo dużo miejsca zajmuje. Ale jak coś to mogę wpisać tylko dajcie znać.