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 damian_zet

Zaawansowany sterownik C.O.

To super aby powstał do wiosny :)

-

Damian

Portret użytkownika Rosiak

RE.Re: Sterownik C.O

Jesli uwzglednilbys tez funkcje o ktorych pisalem wczesniej to cale grono piwowarow domowych byloby Ci wdzieczne!

Portret użytkownika neronik

Witam zmieniłem fragment kodu

Witam zmieniłem fragment kodu aby w drugiej linii pokazywała się temperatura zadana,niby działa ale temperatura wyświetlana jest ujemna (wyczytałem ,że trzeba pomnożyć przez -1 ) tylko gdzie kombinuję i coraz inne cyfry się wyświetlają tylko nie bez minusa.
If Poz_wysw <> 1 Then
Cls
Lcd "Piec :"
Lowerline
Lcd "T.zad :"
End If

Tt(1) = T(1)
Tt(2) = T_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"

Portret użytkownika mirley

Re: CO

Powinno zadziałać:

         Cls
         Lcd "Piec:"
         Lowerline
         Lcd "T Min:"
       End If
 
       tt(1) = T(1)
       tt(2) = T_min
 
       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

dobrze kombinowałeś, tylko temperatura minimalna nazywa się T_min, chyba że jeszcze coś modyfikowałeś w programie

-

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 neronik

Tak mam jak piszesz,chodzi mi

Tak mam jak piszesz,chodzi mi otu tylko,że Temp_zad(min) wyświetla się ze znakiem ujemnym np: Temp_zad : -45 stopni.

Portret użytkownika mirley

RE: CO

Jeszcze zmienną minusy, trzeba podmienić:

 
       tt(1) = T(1)
       tt(2) = T_min
       minusy2.1 = minusy.1
       minusy2.2 = 0
       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 Minusy2.n = 1 Then Decr Hword(2)
         Locate N , Hword(2)
         Hword(2) = Tt(n) Mod 10
         If Minusy2.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N

spróbuj tak, trzeba dodać zmienną minusy2 as byte. Program odczytuje ujemną temperaturę na drugim czujniku a co za tym idzie wstawia minus tam gdzie wtedy miał temperaturę bojlera. Teraz powinno być ok

-

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 neronik

Dziękuję teraz wyświetla

Dziękuję teraz wyświetla poprawnie.Jeszcze mam jedną prośbę (nie wiem czy możliwą do realizacji ale spytać mogę).Chciałbym aby jeżeli po resecie (zanik prądu dość częsty u mnie) T.piec większa niż np.40 to wentylator automatycznie kontynuuje pracę z zachowaniem automatycznego wyłączenia po czasie itp (wtedy będzie to ideał sterownika).

Portret użytkownika mirley

Re: Sterownik c.o

Nie mam czasu żeby ci to w kodzie napisać dokładnie ale zrób zmienna start_went as bit oraz licz_start_went as byte. na starcie przed do loop do start_went przypisz 1 a do licznika 0.

W obsłudze flagi 1s wstaw na samym końcu po "gosub sterowanie" cos takiego:

if start_went = 1 then
  incr licz_start_went
  if licz_start_went = 6 then
    start_went = 0
    If T(1) >= T_min Then
      Off_licz = 0
      Tryb_pracy = 0
      Wygaszenie = 0 
    end if
  end if
end if

powinno zadziałać, po starcie odczeka 6 sekund i sprawdzi czy temperatura jest większa niż minimalna. Jesli tak to uruchomi wentylator tak jakbyś kliknął przycisk

-

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 neronik

Poczekam aż będziesz miał

Poczekam aż będziesz miał chwilę rozpisać, zmienne i fragment dopisałem ale nie chce działać (na starcie przed do loop do start_went przypisz 1 a do licznika 0 -nie wiem gdzie to przypisać).Dziękuję.

Portret użytkownika mirley

Re: CO

Na starcie to np tutaj:

...
Wait 1
Wyswietlono = 1
Wyswietlanie = 1
Autosave = 5
Autolight = 0
 
start_went=1
licz_start_went=0
...

-

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 neronik

Działa z tym, ze jeżeli

Działa z tym, ze jeżeli temperatura po restarcie jest większa od T_min,chciałbym aby to była wartość stała np.40 stopni.Czy jeśli wpiszę tam (If T(1) >= 40 Then)
to zadziała ?

Portret użytkownika mirley

Re: C.O

Tak zadziała tylko napisz 400 a nie 40 bo temperatura jest wartością pomnożoną przez 10 dla zachowania w zmiennej całkowitej "przecinka"

-

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 neronik

Dziękuję.

Dziękuję.

Portret użytkownika ludek

A słuchajcie czy jest

A słuchajcie czy jest możliwość, że występuje problem z programowaniem atmegi z oznaczeniem Atmega8A w układzie sterownika? Bo z moich ostatnich obserwacji na to wynika.

Portret użytkownika mirley

Re: M8

Nie ma prawa być problemu.... sam używam już teraz w większości przypadków M8A M16A itp

-

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 ludek

Mam tak, że jak włożę atmega8

Mam tak, że jak włożę atmega8 bez żadnego oznaczenia to zczytuje ją bascomAVR bez problemu, a gdy włożę atmega8A to przy próbie identyfikacji chipu wyrzuca błąd: Could not identify chip with: ID:FFFFFF

Sprawdziłem napięcia - są w porządku, podpięcie do mikroprocka również (atmega8 czyt)

Miałbyś na to jakąś radę?

Portret użytkownika ludek

Problem rozwiązany,

Problem rozwiązany, sprawdziłem na 3 programatorach i na trzecim w końcu ruszyła atmega8L:)

Pytanie jeszcze mam odnośnie zasilenia magistrali 1-wire - czy układ wytrzyma zasilanie pasożytnicze? Tzn zwarte Vdd do Gnd na czujnikach?

Portret użytkownika mirley

Re: DS

Chodzi o podłączenie dwuprzewodowe czujników? możesz sprawdzić jakby nie działały to można spróbować wydłużyć odstępy między odczytami temperatury

-

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 mateuszwro

Wyświetlacz LCD symbol

Witam chciałbym zrobić ten projekt ale nie wiem jaki może być symbol tego wyświetlacza.Proszę o odpowiedź.

-

mati

Portret użytkownika Jelonek

Sterownik z podajnikiem

Witam,

Chciałbym się dowiedzieć czy będzie sterownik taki jak ten ale dodaktowo aby miał sterowanie podajnikiem.

Portret użytkownika mirley

Re; Sterownik C.O.

Wyświetlacz 16x2 znaki zgodny ze sterownikiem HD44780.... dowolny model o tych parametrach powinien działać.

----------

Cały czas mam zamiar pisać taki sterownik ale nie mam kiedy

-

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 bolo

witam czy można by było dodać

witam czy można by było dodać do programu kad żeby alarm temperatury włączył się ponowmnie po skasowaniu jeżeli temperatura nadal rośnie (o 2stopnie)

Portret użytkownika cienkipyrtol

Problem z załączeniem pompy i dmuchawy.

Panowie mam problem. otóż zmontowałem sobie ten sterownik i wgrałem wsad w wersji z wentylatorem i z przedmuchami ustawianymi z pozycji menu.
Po włączeniu sterownika pokazuje jaka jest temperatura na piecu i bojlerze. mam ustawiony tryb letni.
Jak nacisnę przycisk "-" to na chwilę mruga dioda od wentylatora ale wentylator nie uruchamia sie (napięcie zmierzone miernikiem 160v) i po chwili wyłącza się (na płytce wykonawczej odpowiednio zapala sie dioda na chwilę i gaśnie) po uzyskaniu odpowiedniej temperatury na piecu (ustawione 45st) pompka wogóle się nie załącza a jeżeli juz się włączy to świeci dioda na obydwu płytkach ale napięcie na wentylatorze jest 0v.
wstawione optotriaki takie jak na zdjęciu moc3041, warystory są założone, rezystory prawidłowe. pod kątem poprawności lutów sprawdzałem kilka razy.

Gdzie szukać przyczyny usterki?

Problem został rozwiązany- problemem okazało się zasilanie- włożyłem stabilizator 3,3v i miałem za niskie napięcie. PO wymianie na stabilizator 5v wszystko jest ok. Idę założyć i testować sterowniczek.

Pozdrawiam

Portret użytkownika matwro

Witam Złożyłem już wszystkie

Witam
Złożyłem już wszystkie elementy w tym sterowniku, zaprogramowałem procesor(nie wyskoczyły żadne błędy podczs programowania) włożyłem czujnik temperatury oraz wszystkie zworki tak jak należy ,a gdy podłączę zasilanie to świeci tylko wyświetlacz bez żadnej treści.
Bardzo proszę o podpowiedź co robie źle.
Pozdr

Portret użytkownika matwro

Witam Złożyłem wszystkie

Witam
Złożyłem wszystkie elementy w tym sterowniku, zaprogramowałem procesor(nie wyskoczyły żadne błędy podczas programowania),podłączyłem czujnik temperatury oraz zworki tak jak należy ,a gdy włączę zasilanie to świeci tylko wyświetlacz bez żadnej treści.
Bardzo proszę o podpowiedź co robię źle.
Pozdr

Portret użytkownika damian_zet1

Najprawdopodobniej masz źle

Najprawdopodobniej masz źle podłączony wyświetlacz posprawdzaj jeszcze wszystkie połączenia od IC oraz od wyświetlacza czy wszystkie przewodzą jak w schemacie :)

Portret użytkownika mateuszwro

dobra sprawdzę i dam

dobra sprawdzę i dam odpowiedź

-

mati

Portret użytkownika mateuszwro

sprawdziłem połączenia są jak

sprawdziłem połączenia są jak na schemacie

-

mati

Portret użytkownika pokokolo1

sprawdź potencjometr od

sprawdź potencjometr od kontrastu moze jest skrecony za dużo lub jest uszkodzony- mialem taki przypadek kiedys i dlugo szukalem problemu.

Pozdrawiam

Portret użytkownika mateuszwro

już działa potencjometr od

już działa potencjometr od wyświetlacza był źle ustawiony.

-

mati

Portret użytkownika mat

Witam Uruchomiłem sterownik

Witam
Uruchomiłem sterownik ,ale mam problem ponieważ jedno z wyjść w momencie włączenia załączy się na chwilę i zgaśnie a drugie wogóle się nie załącza.

Portret użytkownika pokokolo1

Sprawdź napięcie zasilania,

Sprawdź napięcie zasilania, ja miałem podobny problem i okazało sie że na stabilizator wchodzilo 5v i za stabilizatorem mialem ledwo 3,5 -caly uklad niby dzialal ale byl problem z zalaczaniem tyrystorow.

Portret użytkownika wlodex

Dwie pompki

Witam
mam pytanie czy jes mozliwosć rozbudowy sterownika o dwie pompki do grzejników i osobno do wymiennika C.W.U. zamiast wentylatora lub dołożyć dodatkową.

Portret użytkownika mirley

Re: Sterownik co

Jak już pisałem wcześniej jest dużo możliwości zrobienia dodatkowych funkcji do sterownika jednak nie idzie tego dopisać w bieżącej wersji sprzętu. Poza tym mam w planach ad dłuższego czasu zrobienie zaawansowanego sterownika co z tymi wszystki bajerami ale ciągle coś mi wypada i spycham to na dalszy plan

-

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 IMEX2

Impulsator

Czy ktoś posiada prosta procedurę do wpięcia w kod żeby działał poprawnie impulsator

If In1 = 1 And In2 = 0 Then
 
oraz
 
If In1 = 0 And In2 = 1 Then

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Impulsator

A to co mam w kodach źródłowych się nie nadaje? Ewentualnie zrób to na przerwaniach, jedna z nóżek impulsatora wywołuje przerwanie na zboczu narastającym, zaraz po jego wystąpieniu sprawdzasz drugą nóżkę..... jeśli jest na niej stan wysoki to obrót był w jedną stronę a jesli stan niski to w drugą stronę.

-

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 IMEX2

Impulsator

Cześć Mirku

Właśnie nie działa jak powinno w obecnym układzie kodu. Pozmieniałem czasy eksperymentalnie zeby przy wolnych obrotach impulsatora uzyskać zmianę danych.

Niestety zmiana kodu pod impulsator nie ogranicza się tylko do skoku na przyciski. Potrzeba pozmieniać kod w kilku miejscach. Liczyłem na coś gotowego ale jak widać brak odzewu - a impulsator to świetna sprawa jesli pakuje się układ w obudowę.

pozdrawiam
Grzesek

PS
A może masz jakiś kod niepublikowany na łamach www i podeślesz na PRW lub maila - dziękuję z góry.

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika Wróbel

Mam takie pytanie bo nie wiem

Mam takie pytanie bo nie wiem czy mam coś źle czy ten sterownik tak pracuje. Na wyświetlaczu po padaniu napięcia pojawia się rząd kratek jeżeli przytrzymam dowolny swith to sterownik pracuje jednak gdy puszczę to sterownik tak jakby zatrzymywał się wyłącza się podświetlenie wyświetlacza i temperatura przestaje wzrastać na wyświetlaczu pomimo mechanicznego wzrostu temperatury. Gdy przytrzymam "-" to załącza się triak i dioda żółta miga dopóki nie puszczę. Proszę o odpowiedź czy ja coś źle zrobiłem czy tak po prostu jest. Z góry dzięki

Portret użytkownika IMEX2

PCB

sprawdzaj płytke masz cos nie tak z pcb na to stawiam chyba ze cos pozmieniales w programie

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika Wróbel

W program nie ingerowałem a

W program nie ingerowałem a płytkę sprawdzałem pod względem zwarć i czy nie pomyliłem elementów ale mam pytanie takie czy na miejscu switch wraz z nimi mają być zworki bo zauważyłem owe na schemacie montarzowym ?

Portret użytkownika Wróbel

Dziękuje za pomoc już

Dziękuje za pomoc już znalazłem co źle zrobiłem. Miałem wlutowane zamiast switch zwykłe przyciski zwierające i nie zauważyłem że jak niema switch to w jesnym miejscu niema połączenia teraz śmiga wielkie dzięki :D

Portret użytkownika mirley

Re: Impulsator C.O

Ja bym bezpośrednio w D loop dał kod:

 Rezultat = 0
 Select Case Tryb
  Case 0:
   If I1 = 1 And I2 = 1 Then Incr Tryb                      'jezeli dwa rozwarte
  Case 1:
   If I1 = 1 And I2 = 0 Then
    Rezultat = 1
    Incr Tryb
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = -1
    Incr Tryb
   End If
  Case 2:
   If I1 = 0 And I2 = 0 Then Incr Tryb
  Case 3:
   If I1 = 1 And I2 = 0 Then
    Rezultat = -1
    Tryb = 0
   End If
   If I1 = 0 And I2 = 1 Then
    Rezultat = 1
    Tryb = 0
   End If
 End Select
 
If Rezultat <> 0 Then
 
  If Rezultat = 1 Then
    'jesli w prawo
    'tutaj musi być to co w przycisku +
  Else
    'jesli w lewo
    'tutaj przycisk -
  End If
 
End If

Procedura obsługi przycisków musi być za to uproszczona i powinna zawierać tylko przycisk menu, który podłączysz do przycisku impulsatora. Ewentualnie można by to zostawić żeby był zarówno impulsator jak i przyciski.

-

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 mm3203

ds18s20

Witam czy do tego układu moge zastosować czujnik ds18s20, czy trzeba zmienic procedure odczytu?

Portret użytkownika mirley

Re: Sterownik

Tak na szybko to wydaje mi się że wystarczy zmienić linijkę:

T(ktory_ds) = T(ktory_ds) / 16

na
T(ktory_ds) = T(ktory_ds) / 2

-

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 gino

ATMega8A

Witaj, super projekt, zrobiłem, ale gdy doszło do zaprogramowania Atmegi dostałem kopa. Bascom wykrywa mi ATmega8A i jest ok, ale program nie chce |"siąść" na tym sterowniku. Dlaczego ? Wywala: The target chip: does not match the detected chip ATmega8A

Portret użytkownika mirley

Re: Atmega8A

Jaki masz programator że wykrywa ci M8A, ja używam usbaspa i avrdude. Zawsze programuje dokładnie tak samo jak zwykły M8, nie ma takiego problemu. Czytałem gdzieś że bascom nie radzi sobie z Mega8A

-

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 gino

Re: ATmega8A

Witaj,

to fakt, bo avrdude zaprogramował od strzała, dzięki za info

edit: programator usbasp

Portret użytkownika kylo

chcialem zaaplikowac Twoj

chcialem zaaplikowac Twoj programik do płytki AVT1665 i niestety nie daje rady wywalczyc ze zmiana ustawien portow, bo wejscia i wyjscia sa inaczej rozplanowane a ich konfiguracja nie jest dla mnie przejrzysta, moglbym prosic o pomoc...mozliwe, ze nie da sie tego ogarnac, bo switche sa na roznych portach i sa podciagniete do +

Portret użytkownika Domino

klawiatura

w jaki sposób robisz te klawiatury ?
Jakich switchy uzywasz ?
czy dodajesz jakieś gumki pod laminat ?

Portret użytkownika gino

Nie chce ruszyć po złożeniu

jak w temacie, wyświetlacz nic nie wyświetla, przeprogramowana ATmega i nic, cisza...

edit: już nieaktualne, nie chodził oscylator, jeden z kondensatorów był 10pF