Prosty Sterownik Domowy


9.2
Ocena: None Średnia: 9.2 (20 głosujących)

Opisywane urządzenie jest prostym sterownikiem domowym, urządzeniem pełniącym wiele pożytecznych funkcji, do których między innymi należą: dwupunktowy pomiar temperatury (w domu i na dworze) i zegar pracujący w trybie 24-godzinnym, wzbogacony o dwukanałowy sterownik czasowy. Dodatkowo w programie zaimplementowano prosty termostat z histerezą oraz prosty system alarmowy z dwoma obwodami ochronnymi. Funkcja cichego alarmu umożliwia podgląd o której godzinie obwód ochronny został naruszony, bez włączania syreny. Układ sterownika został zbudowany na mikrokontrolerze ATMEGA16 a wszystkie ustawienia dokunuje się poprzez bardzo prosty interfejs z wyświetlaczem LCD i 6-przyciskową klawiaturą. Do odmierzania czasu wykorzystano układ RTC przez co sterownik może długo chodzić podtrzymując czas na zasilaniu bateryjnym. Wyjścia układu zbudowane na triakach posiadają optoizolację od napięcia sieciowego.



Działanie:

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

Sercem układu jest mikrokontroler U1 (ATMega16) wraz z rezonatorem kwarcowym X1 (16MHz) i kondensatorami C1 (22pF) i C2 (22pF). Do odmierzania czasu wykorzystywany jest układ RTC U2 (PCF8583). Do jego poprawnej pracy wymagany jest rezonator kwarcowy (tak zwany zegarkowy) X2 (32,768kHz) oraz kondensator C5 (33pF). Kondensatory C6 (100nF) i C7 (47uF) filtrują napięcie zasilania samego układu RTC, które podawane jest poprzez prosty układ bezprzerwowego zasilania z diodami D1 (1N4148), D2 (1N4148) i baterią BAT1 (3V). Rezystory R15 (3,3k) i R16 (3,3k) podciągają linie magistrali I2C do plusa zasilania, umożliwiając jej poprawną pracę.

Obwody zasilania całej płytki zbudowane są na stabilizatorze U5 (7805) i kondensatorach filtrujących C3 (220uF), C4 (47uF) i C8 (100nF). Potencjometr P1 (10k) umożliwia regulację kontrastu wyświetlacza W1 (LCD 16x2). Podświetlanie wyświetlacza uruchamiane jest z poziomu programu sterownika za pomocą tranzystora T1 (BC556) i rezystora R2 (3,3k). Prąd podświetlania wyświetlacza ograniczany jest przez rezystor R1 (47R). W roli sygnalizacji alarmu pracuje buzzer z generatorem BUZ1 (5V), włączany poprzez tranzystor T2 (BC556) i rezystory R3 (3,3k) i R4 (3,3k).

Złącze Prog (goldpin) umożliwia programowanie mikrokontrolera U1 w układzie, do tego został tez wyprowadzony pin resetu Res. Złącze RS (goldpin) umożliwia podpięcie komunikacji Rs232 a właściwie odpowiedniego konwertera, w przypadku klasycznego Rs232 będzie to MAX232 a przypadku konwertera USB-RS232, odpowiednia przejściówka. Klawiaturę urządzenia stanowią przyciski S1-S6 (uSwitch). Złącze ALARM (ARK) stanowi wejścia czujników alarmowych, jedno wejście jest typu N.O. a drugie typu N.C. Rezystor R14 (4,7k) umożliwia poprawną pracę magistrali 1-Wire z czujnikami U3-U5 (DS18B20).

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. Montaż płytki nie jest skomplikowany i wykonujemy go w sposób klasyczny. Rozpoczynamy od wlutowania dwóch zworek pod wyświetlaczem W1, następne w kolejności powinny być rezystory a potem kondensatory. Kolejność pozostałych elementów nie jest krytyczna. Pod mikrokontroler U1 i układ RTC U2 dobrze jest zastosować podstawki. Złacza na czujniki U3 i U4 są w takiej odległości że można wlutować w ich miejsce podstawkę DIL6, tak jak można to zobaczyć na zdjęciach. Złącza te przydadzą się w momencie rejestracji czujników DS18B20 i podczas testów całego systemu. Potem można wykorzystać złącze U5 do podłączenia wszystkich czujników temperatury równolegle. Zamiast BUZ1 można podłączyć układ sterujący większą syreną alarmową. Do zasilania całego układu najwygodniej jest użyć ładowarki od komórki (np. NOKIA 6610) gdyż daje ona przy takiej pracy napięcie ponad 5V. Szczególną ostrożność należy zachować przy podłączaniu odbiorników 230V gdyż triaki znajdują się na tej samej płytce co sterownik i istnieje ryzyko porażenia. Układ został zbudowany głównie do celów pokazowych (stąd układy wykonawcze na tej samej płytce) ale jest w pełni funkcjonalnym urządzeniem. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.

Podłączenie sterownika przedstawione jest na rysunku poniżej:

Wykaz Elementów:

5x Złącze Śrubowe ARK2(podwójne)
1x Złącze Śrubowe ARK3(potrójne)
1x Złącze Śrubowe ARK3(potrójne)
1x Listwa Goldpin 1x3 (RS)
2x Listwa Goldpin 1x3 (DS18B20)
1x Listwa Goldpin 1x4 (Prog)
1x Bateria 3V(CR2032) + Podstawka
6x uSwitch
1x 2A Bezpiecznik

5x 3,3k
1x 4,7k
1x 47R
6x 180R
3x 330R
3x Warystor JVR-7N431
1x Potencjometr Montażowy 10k

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

1x Rezonator Kwarcowy 16MHz
1x Rezonator Kwarcowy 32768Hz
2x 1N4148
3x Dioda LED
2x BC556
1x Stabilizator 7805
1x Mikrokontroler ATMEGA16 + Podstawka
1x Układ RTC PCF8583
3x BT138-600E
3x MOC3041
1x Buzzer z Generatorem 5V
1x LCD 16x2

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 = "m16def.dat"
$crystal = 16000000
 
Config Porta = &B11110011 : Porta = &B11111111
Config Portb = &B11111111 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.1 , Rs = Porta.0
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
Config 1wire = Pinc.7
 
Config Scl = Portb.0
Config Sda = Portb.1
I2cinit
 
Lcd_light Alias Portc.6
Sw_port Alias Pind                                          'nazwa portu
Tr1 Alias Portc.2
Tr2 Alias Portc.1
Tr_term Alias Portc.0
Buzz Alias Portc.5
Linia_no Alias Pina.2
Linia_nc Alias Pina.3
 
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 , Autolight As Byte
 
 
Dim Ds1(8) As Byte , Ds2(8) As Byte , Ds3(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(3) As Word
Dim T_ust As Word , T_his As Byte , Term_ena As Bit         'termostat
 
 
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
 
Dim Godziny As Byte , Minuty As Byte , Sekundy As Byte
Dim Godziny_bcd As Byte , Minuty_bcd As Byte , Sekundy_bcd As Byte
Dim Zapisz_czas As Bit
 
 
Dim G(4) As Byte , M(4) As Byte , Ar_tr1 As Bit , Ar_tr2 As Bit       'programtot czas
 
Dim Alarm As Byte , Salarm As Byte , A_g As Byte , A_m As Byte       'alarmy 0-wyl, 1-czuwa, 2-czas wtargniecia
Dim Alarm_licz As Byte
 
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Lcd_light = 0
Autolight = 20
 
Lcd "Sterownik Domowy"
Lowerline
Lcd "  Wersja 1.05"
 
Wait 1
 
If Sw_port = &B01001111 Then
  Ds_adr = 30
  Gosub Ds_reg
  Cls
  Lcd "Ds1"
End If
If Sw_port = &B01010111 Then
  Ds_adr = 40
  Gosub Ds_reg
  Cls
  Lcd "Ds2"
End If
If Sw_port = &B01011011 Then
  Ds_adr = 50
  Gosub Ds_reg
  Cls
  Lcd "Ds term"
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)
Next N
 
 
For N = 10 To 13
  Readeeprom G(n -9) , N
  If G(n -9) > 23 Then G(n -9) = 0
Next N
For N = 14 To 17
  Readeeprom M(n -13) , N
  If M(n -13) > 59 Then M(n -13) = 0
Next N
Readeeprom Hbyte(1) , 18
Ar_tr1 = Hbyte(1).0
Ar_tr2 = Hbyte(1).1
Term_ena = Hbyte(1).2
 
Readeeprom T_ust , 19
Readeeprom T_his , 21
 
If T_ust > 1000 Or T_ust < 100 Then T_ust = 450
If T_his > 100 Or T_his < 5 Then T_his = 20
 
Readeeprom Alarm , 22
Readeeprom Salarm , 23
Readeeprom A_g , 24
Readeeprom A_m , 25
 
If Alarm > 2 Then Alarm = 0
If Salarm > 2 Then Salarm = 0
If A_g > 23 Then A_g = 0
If A_m > 59 Then A_m = 0
 
 
Wait 1
Wyswietlono = 1
Wyswietlanie = 1
Autosave = 5
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
  '***********************************************   co 4ms
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
 
    If Alarm = 1 Then
      If Linia_no = 0 Or Linia_nc = 1 Then
        Alarm = 2
        A_g = Godziny
        A_m = Minuty
      End If
    Else
      If Alarm = 2 Then
        Buzz = Mig
      Else
        Buzz = 1
      End If
    End If
 
    If Salarm = 1 Then
      If Linia_no = 0 Or Linia_nc = 1 Then
        Salarm = 2
        A_g = Godziny
        A_m = Minuty
      End If
    End If
 
    Gosub Przyciski
    If Wyswietlono = 1 Then Gosub Wysw_lcd
 
  End If
  '***********************************************
 
  '***********************************************   co 500ms
  If Flaga_500ms = 1 Then
    Flaga_500ms = 0
 
    If Autolight > 0 Then
      Decr Autolight
      Lcd_light = 0
    Else
      Lcd_light = 1
    End If
 
    Mig = Not Mig
 
    If Poz_wysw <> 1 Or Poz_ust = 0 Then
      If Zapisz_czas = 1 Then
        Gosub Zapis_rtc                                     'jednorazowo zapisuje po wyj?ciu z ustawie?
        Zapisz_czas = 0
      Else
        Gosub Odczyt_rtc                                    'odczytuje czas
      End If
    Else
      Zapisz_czas = 1
    End If
 
    If Poz_wysw = 1 Then Wyswietlanie = 1                   'uaktualniaj czas je?li jest pokazywany na LCD
    If Poz_wysw = 2 Then Wyswietlanie = 2
    If Poz_wysw = 4 Then Wyswietlanie = 4                   'je?li wyswietlony termostat to uaktualnij.
    If Poz_wysw = 5 Then Wyswietlanie = 5
 
  End If
  '***********************************************
 
  '***********************************************   co 1s
  If Flaga_1s = 1 Then
    Flaga_1s = 0
 
    If Autosave < 5 Then
      Incr Autosave
      If Autosave = 5 Then
        For N = 10 To 13
          Writeeeprom G(n -9) , N
        Next N
        For N = 14 To 17
          Writeeeprom M(n -13) , N
        Next N
        Hbyte(1) = 0
        Hbyte(1).0 = Ar_tr1
        Hbyte(1).1 = Ar_tr2
        Hbyte(1).2 = Term_ena
        Writeeeprom Hbyte(1) , 18
 
        Writeeeprom T_ust , 19
        Writeeeprom T_his , 21
 
        Writeeeprom Alarm , 22
        Writeeeprom Salarm , 23
        Writeeeprom A_g , 24
        Writeeeprom A_m , 25
 
        Poz_ust = 0
      End If
    End If
 
    Gosub Temperatura
    If Poz_wysw = 3 Then Wyswietlanie = 3                   'jesli wysw temperatura to uaktualnij
 
    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 &B11111100                                 'And &B00001111                                 'maska na piny nieu?ywane jako sw
If Sw <> &B11111100 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 68 Then
      Licznik_sw = 0
      Autolight = 20
 
      Select Case Stan_sw
        Case &B11101100:                                    'incr
        '***********************************************************
          Select Case Poz_wysw
            Case 1:
              Select Case Poz_ust
                Case 0:
                  'podczas wyswietania czasu
                  If Alarm = 2 Then Alarm = 0
                  'If Salarm = 2 Then Salarm = 0
                Case 1:
                  Incr Godziny
                  If Godziny = 24 Then Godziny = 0
                Case 2:
                  Incr Minuty
                  If Minuty = 60 Then Minuty = 0
                Case 3:
                  Incr Sekundy
                  If Sekundy = 60 Then Sekundy = 0
              End Select
 
            Case 2:
              Select Case Poz_ust
                Case 0:
                  Ar_tr1 = Not Ar_tr1
                Case 1:
                  Incr G(1)
                  If G(1) = 24 Then G(1) = 0
                Case 2:
                  Incr M(1)
                  If M(1) = 60 Then M(1) = 0
                Case 3:
                  Incr G(2)
                  If G(2) = 24 Then G(2) = 0
                Case 4:
                  Incr M(2)
                  If M(2) = 60 Then M(2) = 0
                Case 5:
                  Incr G(3)
                  If G(3) = 24 Then G(3) = 0
                Case 6:
                  Incr M(3)
                  If M(3) = 60 Then M(3) = 0
                Case 7:
                  Incr G(4)
                  If G(4) = 24 Then G(4) = 0
                Case 8:
                  Incr M(4)
                  If M(4) = 60 Then M(4) = 0
              End Select
              Autosave = 0
 
            Case 4:
              Select Case Poz_ust
                Case 0:
                   Term_ena = Not Term_ena
                   If Term_ena = 0 Then Tr_term = 1
                Case 1:
                  If T_ust < 1000 Then T_ust = T_ust + 10
                Case 2:
                  If T_his < 100 Then Incr T_his
              End Select
              Autosave = 0
            Case 5:
              Select Case Poz_ust
                Case 0:
                 ' podczas wysw alarmow
                Case 1:
                  If Alarm <> 0 Then Alarm = 0 Else Alarm = 1
                  Buzz = 1
                Case 2:
                  If Salarm <> 0 Then Salarm = 0 Else Salarm = 1
              End Select
              Autosave = 0
          End Select
 
        Case &B11111000:                                    'ustaw next
        '***********************************************************
          Select Case Poz_wysw
            Case 1:
              Incr Poz_ust
              If Poz_ust = 4 Then Poz_ust = 0
 
            Case 2:
              Incr Poz_ust
              If Poz_ust = 9 Then Poz_ust = 0
 
            Case 4:
              Incr Poz_ust
              If Poz_ust = 3 Then Poz_ust = 0
 
            Case 5:
              Incr Poz_ust
              If Poz_ust = 3 Then Poz_ust = 0
          End Select
 
        Case &B11110100:                                    'decr
        '***********************************************************
          Select Case Poz_wysw
            Case 1:
              Select Case Poz_ust
                Case 0:
                  'podczas wyswietania czasu
                  If Alarm = 2 Then Alarm = 0
                Case 1:
                  Decr Godziny
                  If Godziny = 255 Then Godziny = 23
                Case 2:
                  Decr Minuty
                  If Minuty = 255 Then Minuty = 59
                Case 3:
                  Decr Sekundy
                  If Sekundy = 255 Then Sekundy = 59
              End Select
 
            Case 2:
              Select Case Poz_ust
                Case 0:
                  Ar_tr2 = Not Ar_tr2
                Case 1:
                  Decr G(1)
                  If G(1) = 255 Then G(1) = 23
                Case 2:
                  Decr M(1)
                  If M(1) = 255 Then M(1) = 59
                Case 3:
                  Decr G(2)
                  If G(2) = 255 Then G(2) = 23
                Case 4:
                  Decr M(2)
                  If M(2) = 255 Then M(2) = 59
                Case 5:
                  Decr G(3)
                  If G(3) = 255 Then G(3) = 23
                Case 6:
                  Decr M(3)
                  If M(3) = 255 Then M(3) = 59
                Case 7:
                  Decr G(4)
                  If G(4) = 255 Then G(4) = 23
                Case 8:
                  Decr M(4)
                  If M(4) = 255 Then M(4) = 59
              End Select
              Autosave = 0
 
            Case 4:
              Select Case Poz_ust
                Case 0:
                  Term_ena = Not Term_ena
                  If Term_ena = 0 Then Tr_term = 1
                Case 1:
                  If T_ust > 100 Then T_ust = T_ust - 10
                Case 2:
                  If T_his > 5 Then Decr T_his
              End Select
              Autosave = 0
 
            Case 5:
              Select Case Poz_ust
                Case 0:
                 ' podczas wysw alarmow
                Case 1:
                  If Alarm <> 0 Then Alarm = 0 Else Alarm = 1
                  Buzz = 1
                Case 2:
                  If Salarm <> 0 Then Salarm = 0 Else Salarm = 1
              End Select
              Autosave = 0
          End Select
 
        Case &B11011100:                                    'next menu
        '***********************************************************
        Poz_ust = 0
        Wyswietlanie = Poz_wysw + 1
        If Wyswietlanie = 6 Then Wyswietlanie = 1
 
         Case &B10111100:                                   'triak 1
        '***********************************************************
         Select Case Poz_wysw
            Case 2:
             Ar_tr1 = 0
             Tr1 = Not Tr1
            Case 4:
             Term_ena = 0
             Tr_term = Not Tr_term
            Case 5:
             If Alarm = 2 Then Alarm = 0
             'If Salarm = 2 Then Salarm = 0
         End Select
 
         Autosave = 0
 
         Case &B01111100:                                   'triak 2
        '***********************************************************
         Select Case Poz_wysw
            Case 2:
             Ar_tr2 = 0
             Tr2 = Not Tr2
             Autosave = 0
            Case 4:
             Term_ena = 0
             Tr_term = Not Tr_term
            Case 5:
             If Alarm = 2 Then Alarm = 0
             If Salarm = 2 Then Salarm = 0
         End Select
 
         Autosave = 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:                                                'aktualny czas
     '**************************************************************
       If Poz_wysw <> 1 Then
         Cls
         Lcd " Aktualny  Czas "
       End If
        Locate 2 , 5
        If Poz_ust = 1 And Mig = 1 Then
          Lcd "  "
        Else
          If Godziny < 10 Then Lcd "0"
          Lcd Godziny
        End If
 
        If Poz_ust = 0 And Mig = 1 Then Lcd " " Else Lcd ":"
        If Poz_ust = 2 And Mig = 1 Then
          Lcd "  "
        Else
          If Minuty < 10 Then Lcd "0"
          Lcd Minuty
        End If
        If Poz_ust = 0 And Mig = 1 Then Lcd " " Else Lcd ":"
 
        If Poz_ust = 3 And Mig = 1 Then
          Lcd "  "
        Else
          If Sekundy < 10 Then Lcd "0"
          Lcd Sekundy
        End If
 
     Case 2:                                                'programator czasowy
     '**************************************************************
        If Poz_wysw <> 2 Then
         Cls
        End If
 
        Locate 1 , 1
        If Poz_ust = 1 And Mig = 1 Then
          Lcd "  "
        Else
          If G(1) < 10 Then Lcd "0"
          Lcd G(1)
        End If
 
        Lcd ":"
 
        If Poz_ust = 2 And Mig = 1 Then
          Lcd "  "
        Else
          If M(1) < 10 Then Lcd "0"
          Lcd M(1)
        End If
 
        Lcd " - "
 
        If Poz_ust = 3 And Mig = 1 Then
          Lcd "  "
        Else
          If G(2) < 10 Then Lcd "0"
          Lcd G(2)
        End If
 
        Lcd ":"
 
        If Poz_ust = 4 And Mig = 1 Then
          Lcd "  "
        Else
          If M(2) < 10 Then Lcd "0"
          Lcd M(2)
        End If
 
        Lcd "  "
 
        If Ar_tr1 = 1 Then Lcd "A" Else Lcd "R"
 
        Locate 2 , 1
 
        If Poz_ust = 5 And Mig = 1 Then
          Lcd "  "
        Else
          If G(3) < 10 Then Lcd "0"
          Lcd G(3)
        End If
 
        Lcd ":"
 
        If Poz_ust = 6 And Mig = 1 Then
          Lcd "  "
        Else
          If M(3) < 10 Then Lcd "0"
          Lcd M(3)
        End If
 
        Lcd " - "
 
        If Poz_ust = 7 And Mig = 1 Then
          Lcd "  "
        Else
          If G(4) < 10 Then Lcd "0"
          Lcd G(4)
        End If
 
        Lcd ":"
 
        If Poz_ust = 8 And Mig = 1 Then
          Lcd "  "
        Else
          If M(4) < 10 Then Lcd "0"
          Lcd M(4)
        End If
 
        Lcd "  "
 
        If Ar_tr2 = 1 Then Lcd "A" Else Lcd "R"
 
 
     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 "Dw" ; Chr(1) ; "r:"
         Lowerline
         Lcd "Dom:"
       End If
 
       For N = 1 To 2
         Hword(1) = T(n) / 10
         Hword(2) = 11
         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
         Lcd " "
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
     Case 4:
     '**************************************************************
        If Poz_wysw <> 4 Then
         Deflcdchar 2 , 4 , 4 , 31 , 4 , 4 , 32 , 31 , 32   '+-
         Cls
         Lcd "Term:"
       End If
 
       Hword(1) = T(3) / 10
       Hword(2) = 8
       If Hword(1) >= 10 Then Decr Hword(2)
       If Hword(1) >= 100 Then Decr Hword(2)
       If Minusy.3 = 1 Then Decr Hword(2)
       Locate 1 , Hword(2)
       Hword(2) = T(3) Mod 10
       Lcd " "
       If Minusy.3 = 1 Then Lcd "-"
       Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C  "
 
       If Term_ena = 1 Then Lcd "A" Else Lcd "R"
 
       If Poz_ust = 1 And Mig = 1 Then
          Locate 2 , 1
          Lcd "        "
       Else
       'tust
         Hword(1) = T_ust / 10
         Hword(2) = 3
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 2 , Hword(2)
         Hword(2) = T_ust Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C " ; Chr(2)
       End If
 
       If Poz_ust = 2 And Mig = 1 Then
          Locate 2 , 11
          Lcd "      "
       Else
       'thist
         Hbyte(1) = T_his / 10
         Hbyte(2) = 12
         If Hbyte(1) >= 10 Then Decr Hbyte(2)
         If Hbyte(1) >= 100 Then Decr Hbyte(2)
         Locate 2 , Hbyte(2)
         Hbyte(2) = T_his Mod 10
         Lcd Hbyte(1) ; "." ; Hbyte(2) ; Chr(0) ; "C"
       End If
 
     Case 5:
     '**************************************************************
        If Poz_wysw <> 5 Then
         Cls
         Lcd "Alarm: "
         Lowerline
         Lcd "C. Alarm: "
        End If
 
         Locate 1 , 8
         If Poz_ust = 1 And Mig = 1 Then
           Lcd "       "
         Else
           If Alarm = 0 Then Lcd "Wyl. "
           If Alarm = 1 Then Lcd "Czuwa"
           If Alarm = 2 Then
             If A_g < 10 Then Lcd "0"
             Lcd A_g ; ":"
             If A_m < 10 Then Lcd "0"
             Lcd A_m
           End If
         End If
 
         Locate 2 , 11
         If Poz_ust = 2 And Mig = 1 Then
           Lcd "       "
         Else
           If Salarm = 0 Then Lcd "Wyl. "
           If Salarm = 1 Then Lcd "Czuwa"
           If Salarm = 2 Then
             If A_g < 10 Then Lcd "0"
             Lcd A_g ; ":"
             If A_m < 10 Then Lcd "0"
             Lcd A_m
           End If
         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():
  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 = 4 Then Ktory_ds = 0
 
Return
'**********  Temperatura  Koniec *********
 
 
'****************** Zapis RTC ********************
Zapis_rtc:                                                  'zapisuje czas g,m i s do uk?adu RTC
  Godziny_bcd = Makebcd(godziny)
  Minuty_bcd = Makebcd(minuty)
  Sekundy_bcd = Makebcd(sekundy)
 
  I2cstart
  I2cwbyte 162
  I2cwbyte 0                                                'rejestr kontrolny
  I2cwbyte 8                                                'ustawienie rejestru zapisu daty
 
  I2cstop
  I2cstart
  I2cwbyte 162
  I2cwbyte 2
 
  I2cwbyte Sekundy_bcd
  I2cwbyte Minuty_bcd
  I2cwbyte Godziny_bcd
  I2cstop
Return
'************* Zapis RTC Koniec *****************
 
'****************** Odczyt RTC ********************
Odczyt_rtc:                                                 'odczytuje czas z RTC do zmiennych
  I2cstart
  I2cwbyte 162                                              'adres zapisu
  I2cwbyte 2                                                'rejestr sekund
  I2cstart
  I2cwbyte 163                                              'adres odczytu
  I2crbyte Sekundy_bcd , Ack
  I2crbyte Minuty_bcd , Ack
  I2crbyte Godziny_bcd , Nack
  I2cstop
  Sekundy = Makedec(sekundy_bcd)
  Minuty = Makedec(minuty_bcd)
  Godziny = Makedec(godziny_bcd)
Return
'************** Odczyt RTC Koniec *****************
 
'************   Sterowanie       ***************
'***********************************************
Sterowanie:
  Hword(1) = Godziny * 60
  Hword(1) = Hword(1) + Minuty                              'czas w minutach
 
  'prog czasowy
  For N = 1 To 3 Step 2
    Hword(2) = G(n) * 60
    Hword(2) = Hword(2) + M(n)                              'czas w minutach
    Hword(3) = G(1 + N) * 60
    Hword(3) = Hword(3) + M(1 + N)                          'czas w minutach
    Hbit = 1
    If Hword(3) >= Hword(2) Then
      If Hword(1) >= Hword(2) Then If Hword(1) < Hword(3) Then Hbit = 0
    Else
      If Hword(1) >= Hword(2) Then Hbit = 0
      If Hword(1) < Hword(3) Then Hbit = 0
    End If
    If N = 1 Then
      If Ar_tr1 = 1 Then Tr1 = Hbit
    Else
      If Ar_tr2 = 1 Then Tr2 = Hbit
    End If
  Next N
 
  'termostat
 
  If Term_ena = 1 Then
     Hword(1) = T_ust + T_his
     Hword(2) = T_ust - T_his
     If T(3) >= Hword(1) Then Tr_term = 1
     If T(3) <= Hword(2) Then Tr_term = 0
  End If
 
 
Return
'********    Sterowanie      Koniec ************

Ustawienia fusebitów przedstawione są na rysunku poniżej:

Zdjęcia Projektu:

ZałącznikWielkość
Schemat64.7 KB
Płytka26.28 KB
Płytka (odbicie lustrzane)26.24 KB
Płytka (2 na stronie)49.87 KB
Montowanie38.47 KB
Opis14.54 KB
Opis (odbicie lustrzane)14.57 KB
Kod Źródłowy23.71 KB
Program po kompilacji (bin)10.85 KB
Program po kompilacji (hex)30.54 KB
Kod Źródłowy (2 termostaty)26.73 KB
Program po kompilacji (bin, 2 termostaty)12.4 KB
Program po kompilacji (hex, 2 termostaty)34.9 KB



Portret użytkownika mirley

Re: Programator

To nie jest miejsce żeby rozwodzić się na temat jakiegoś programatora z allego. Napisz odpowiednie pytanie na forum w dziale "Programatory", opisz dokładnie jaki to programator, na jakiej aukcji go kupiłeś? w jakim programie próbujesz to uruchomić? czym zasilasz procesor? Wszystko co wpadnie Ci na myśl odnośnie tego jak to próbowałeś podłączać i sprawdzać. tutaj zgodnie z regulaminem pytania na temat sterownika domowego

-

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 andrzej34

kompilacja

Witam, przy próbie kompilacji kodu wystawia mi taki komunikat:Error:999 Line: 894 DEMO/BETA only suports4096Bytes of code, in File: a dalej jest adres zapisanego kodu do kompilacji :(

Portret użytkownika mirley

Re: Sterownk

Plk HEX masz tutaj, demo pozwala skompilowac tylko 4kB co zresztą masz napisane w treści błędu

-

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 andrzej34

sterownik od +2st C

Witam, udało mi się wprowadzić zmiany w kodzie aby można było zejść z termostatem do +1 st.C ale tego ustawienia temperatury już nie można zmienić, czyli od ustawienia początkowego można było po jednym stopniu obniżać dowolnym przyciskiem (up-down)
ale tylko w dół, reszta wydaje się być ok.

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

Witam, jakieś nowe pomysły w sprawie sterownika? :)

Portret użytkownika mirley

Re: Sterownik

Nie zastanawiałem się nad tym... nie mam kiedy. Zamieść kod w załącznikach i podaj link do niego to popatrzę co pozmieniałeś

-

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 andrzej34

sterownik od +2st C

załączniku BAS po wprowadzonych zmianach :), i jeszcze wartość histerezy też daje się tylko zmniejszać

po zmianach

Portret użytkownika mirley

Re; termostat


nic dziwnego że się tak dzieje skoro tak sobie napisałeś:

Dla przycisku + masz:

Case 4:
              Select Case Poz_ust
                Case 0:
                   Term_ena = Not Term_ena
                   If Term_ena = 0 Then Tr_term = 1
                Case 1:
                  If T_ust > 10 Then T_ust = T_ust - 10
                Case 2:
                  If T_his > 5 Then Decr T_his
              End Select
              Autosave = 0

a dla -:
 Case 4:
              Select Case Poz_ust
                Case 0:
                  Term_ena = Not Term_ena
                  If Term_ena = 0 Then Tr_term = 1
                Case 1:
                  If T_ust > 100 Then T_ust = T_ust - 10
                Case 2:
                  If T_his > 5 Then Decr T_his
              End Select
              Autosave = 0

W obu przypadkach odejmujesz temperaturę, natomiast w moim kodzie jest dla +:

Case 4:
              Select Case Poz_ust
                Case 0:
                   Term_ena = Not Term_ena
                   If Term_ena = 0 Then Tr_term = 1
                Case 1:
                  If T_ust < 1000 Then T_ust = T_ust + 10     'tu jest zwiększanie aż do 100 stopni (wartość to temp*10)
                Case 2:
                  If T_his < 100 Then Incr T_his              'histereza do 10 stopni
              End Select
              Autosave = 0

a dla -:

Case 4:
              Select Case Poz_ust
                Case 0:
                  Term_ena = Not Term_ena
                  If Term_ena = 0 Then Tr_term = 1
                Case 1:
                  If T_ust > 100 Then T_ust = T_ust - 10     'tutaj jest zmniejszania aż do 10 stopni wystarczy zamiast 100 dac w ifie 10 i będzie do 1 stopień
                Case 2:
                  If T_his > 5 Then Decr T_his               'tutaj do 0,5 stopnia histereza, 
              End Select
              Autosave = 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 andrzej34

termostat

Witam i wielkie dzięki jest jak oczekiwałem :), mściłem się nie na tym przycisku.

Portret użytkownika IMEX2

kasowanie DS bez nowego programu

Cześć Mirku

Prośba o sposób skasowania z pamięci eeprom komórek gdzie został zapisany DS

to jest odczyt - wiadomo

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

a to jest zapis DS-ów
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
Gosub Beeper
Return

Jak kasować poszczególne DS-y pojedyńczo lub wszystkie razem - dziękuje serdecznie

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Ds'y

nie wiem po co maiło by byc takie cos potrzebne ale wystarczy zapisać coś do pamięci gdzie przechowywane są numery seryjne ds:

x = 255 'zmienna pomocnicza
 
For N = 1 To 8
  Hbyte(1) = 30 + N
  Writeeeprom x , Hbyte(1)
  Hbyte(1) = 40 + N
  Writeeeprom x , Hbyte(1)
  Hbyte(1) = 50 + N
  Writeeeprom x , Hbyte(1)
  Hbyte(1) = 60 + N
  Writeeeprom x , Hbyte(1)
Next N

Takie cos powinno zadziałać dając 255 w komórkach gdzie były ds18b20

-

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 gosc

Jak wykorzystac kod źródłowy

Witam.
Jestem początkującym elektronikiem może mi kolega podpowiedzieć jak wykorzystać kod źródłowy nie mam pojęcie.Nauczyłem się programować wykorzystując (BIN ,HEX) ale co z tym zrobić nie mam pojęcia.Z góry dziękuje

Portret użytkownika mirley

Re: Program

Musisz zrobić sobie bin z kodu źródłowego za pomocą BASCOM AVR, klikając przycisk "kompiluj"

Popatrz na odpowiedzi wcześniej, już ktoś to napewno kompilował

-

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 beleco

avrdude i kasowanie eepromu

witam
mam taki problem: do programowania procesora używam wersji tekstowej (terminala)
Avrdude. Nie mogę znaleźć opcji, aby po wgraniu nowego programu nie kasował mi zawartości wewnetrznej pamięci procesora - eepromu.
Zależy mi na tym, bo za każdym razem muszę rejestrować DS'y, a mam je wszystkie przykręcone do kostki.

-

Max

Portret użytkownika mirley

Re: Program

Trzeba to w fusebitach przestawić to będzie najprościej bit EESAVE lub poprostu odczytywać sobie eeprom, wgrywać program i wgrywać eeprom na nowo

-

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 beleco

zmiany w fusach sobie

zmiany w fusach sobie darowałem, ale faktycznie ta 2 metoda jest bardzo dobra.
dzięki wielkie za podpowiedz,

-

Max

Portret użytkownika matrix

Re: avrdude i kasowanie eepromu

jest taka dyrektywa w bascom, ale nie wiem czy działa. cytat zaczerpnięty z polskiego helpa.

Przeznaczenie:
Informuje kompilator by nie zmieniał lub usuwał pliku .EEP.
Składnia:

$EEPLEAVE

Opis:
Jeśli istnieje potrzeba umieszczenia danych w pamięci EEPROM procesora, a dane te zostały utworzone przez inne narzędzie, można w programie umieścić dyrektywę $EEPLEAVE.

Normalnie plik .EEP (gdzie znajdują się te dane) jest tworzony przez BASCOM. Podanie właśnie tej dyrektywy jest sygnałem dla kompilatora by pozostawił istniejący plik .EEP. W innym wypadku plik ten mógłby być usunięty lub zmieniony.

Portret użytkownika beleco

może coś z zasilaniem

Wykonałem w.w. prosty sterownik domowy wczesną wiosną. Chodził znakomicie.
Jakiś czas temu z nieznanych przyczyn spalił mi się stabilizator. Wymieniłem go i podkręciłem do niego radiator, układ znowu chodził. Dzisiaj niestety znowu coś się stało "chyba z tym zasilaniem", bo na wyświetlaczu mam ### - coś takiego, natomiast jak układ jest zasilany z usb wszystko pięknie działa.
Może mi ktoś podpowiedzieć co mam teraz wymienić, albo czemu tak się dzieje?

-

Max

Portret użytkownika White

Sterownik

A jakim napięciem i z czego zasilacz układ? Standardowo stabilizatory wytrzymują spokojnie ten 1A a przypuszczam że układ pobiera znikomy prąd więc wykluczał bym zbyt duży pobór prądu. Mogło go uszkodzić zbyt wysokie napięcie na wejściu więc napisz co tam podłączasz ewentualnie jakieś zwarcie w układzie które spowodowało że prąd nagle wzrósł ale skoro układ nadal działa to pewnie do jakiegoś większego zwarcia nie doszło.

-

Co cie nie zabije to cie wzmocni.
(Nie dotyczy kondensatora 230V)

Portret użytkownika beleco

zasilam układ zwykłym

zasilam układ zwykłym zasilaczem od telefonu nokia.

-

Max

Portret użytkownika rafliczek22

Oryginalna czy za 0.99zł z

Oryginalna czy za 0.99zł z alledrogo.pl w sumie ta za 99gr. powinna sama się spalić a nie palić 7805 aha a co się dzieje gdy dasz jakiś zasilacz na najzwyklejszy zasilacz niestabilizowany ale przed 7805 na trafku co się dzieje z układem?

Portret użytkownika beleco

Zastosowałem oryginalny

Zastosowałem oryginalny zasilacz od starego telefonu Nokia.
Ale sytuacja się nieco zmieniła, bo po podłączeniu tego samego zasilacza wieczorem układ zadziałał bez problemu. Próby powtarzałem kilkukrotnie i teraz wszystko chodzi. Zastanawiam się co będzie jutro.

-

Max

Portret użytkownika czacha666

Problem z zegarem i nie tylko

Witam,
wykonałem ten sterownik w nieco zmienionej wersji (dołożone dwa dodatkowe triaki z wolnych wyjść Uc). Podstawowy problem dotyczy wyświetlania czasu ponieważ od 40 do 59 sekundy zamiast pierwszej cyfry w godzinie wyświetlana jest cyfra 4 lub 5. tak to zegar chodzi bardzo ładnie. Druga sprawa jaką zauważyłem to na złączach po triakach występuje napięci ok 30V AC i nie wiem skąd ono się bierze. Dodam że jestem początkującym elektronikiem. Proszę o pomoc.
Pozdrawiam

Portret użytkownika mirley

Re: Sterownik

Uruchom na początek oryginalny program bez zmian na dodatkowe triaki, może poprawi się sprawa z wyświetlaniem. Przekompiluj go ponownie w bascomie i wtedy wgraj do procka. Na triakach może być niewielkie napięcie, wkońcu to elementy elektroniczne a nie mechaniczne tak jak przekaźnik. Podczas włączenia poprostu zmienia się rezystancja (najprościej mówiąc)

-

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 czacha666

niestety wgranie programu nie

niestety wgranie programu nie pomogło, dalej od 40 do 59 sekundy zmienia godzinę. ale wygląda to tak jak by do godziny dodawał 40. Wyczytał gdzieś na forum elektrody że trzeba maskować wole bity. Spróbuję jeszcze tego.

Portret użytkownika yin@yang

Napięcia na wyjściach lamp i termostatu

Witam,

Zrobiłem sterownik i wszystko od razu zadziałało !!! Zastosowałem tylko inne warystory (Warystor metalowo-tlenk. RMS 275VAC/350VDC 1200A 0,25W) bo nie miałem takich jakie podałeś.
Mam tylko jedno pytanie. Na wyjściach lamp i termostatu (kiedy nie są włączone) mam ciągle napięcie 178 V. Po włączeniu (czy to ręcznie czy timerem) napięcie jest 230 V - czyli OK. A pytanie to: czy na wyjściach lamp i termostatu, kiedy nie są aktywne, ma być 178 V ? Jeśli nie to poradźcie co powinienem sprawdzić.
Dziękuję za pomoc.

-

Kamil

Portret użytkownika mirley

Re: Sterownik

Nie rób pomiarów na wyjściach bez obciążenia, masz triaki na wyjściu więc jak jest triak wyłączony to przez swoją dużą rezystancję może wskazywać napięcie. Podłącz lampy do gniazd ark i wtedy dopiero rób pomiary na złączu

-

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 yin@yang

Sterownik (ds-y)

Dzięki za odpowiedź/wyjaśnienie. DS-y też się zarejestrowały i już wszystko gra. Pozdrawiam

-

Kamil

Portret użytkownika ViRek

Zakup komponentów

Witam,
Zamierzam wykonać ten projekt i wykorzystać go jako sterownik do akwarium.
Jako że nie jestem elektronikiem to przy kompletowaniu elementów spotkałem się z dwoma małymi problemami: 1- jakie mają być użyte rezystory(0,25W; 1W; 2W czy może jakieś inne)
2- jakie mają być użyte kondensatory (25V,50V,100V,160V czy może jakieś inne)

Z góry dzięki za pomoc.

Portret użytkownika mirley

Re: Sterownik domowy

Rezystory 1/4W, widać ze zdjęć. Co do kondensatorów to nie ma się nad czym zastanawiać, przecież układ jest na 5V to jakie kondensatory będą dobre? Na napięcie powyżej 5V, prawda?

Tylko elektrolit wejściowy który jest przed stabilizatorem zależy od napięcia jakie będzie na jego nóżkach ale jak będzie na 25V to napewno starczy bo układ nie powinien mieć aż tak dużego napięcia podanego na stabilizator. Kondensatory stałe i MKT i tak sa robione na napięcia minimum kilkadziesiąt V więc nie ma sie co nad nimi zastanawiać

-

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 ViRek

Dzięki mirley pozdro

Dzięki mirley
pozdro

Portret użytkownika yin@yang

Napięcia na wyjściach lamp i termostatu cz. 2

Witam ponownie,

Kilka postów do góry pisałem, że na wyjściach lamp i termostatu (kiedy nie są włączone) mam ciągle napięcie 178 V. Po włączeniu jest OK - 230V. Wspominałeś wcześniej, żebym najpierw podłączył lampy i wtedy sprawdzał napięcia ale niestety nawet jak lampy są podłączone to i tak świecą ale słabiej (kiedy sterownik powinien nie podawać napięcia). W chwili włączenia przez sterownik lampy rozjaśniają się do normalnego poziomu.

Bardzo proszę o wskazówkę, jakąś poradę. Nie mam pojęcia od czego zacząć sprawdzanie. Generalnie wszystko chodzi jak trzeba tylko z wyjściami lamp mam kłopot.

Pozdrawiam

-

Kamil

Portret użytkownika mirley

Re: Sterownik

To w takim razie jest problem z triakim, optotriakim lub innym elementem na drodze od uC do triaka. Sprawdź po pierwsze czy mikrokontroler podaje poprawne napięcie na optotriak, czy w chwili włączenia jest 0V na pinie mikrokontrolera a w chwili wyłączenia jest 5V? Czy diody D3-D5 zaswiecają się i gaszą poprawnie? jakie masz triaki?

-

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 yin@yang

Diody zapalają się i gasną

Diody zapalają się i gasną poprawnie. Triaki mam takie: BT138-600E
Triak 600V 12A 25mA TO220AB. Napięcia sprawdzę jutro jak wrócę do domu.
Dzięki za podpowiedź.

-

Kamil

Portret użytkownika yin@yang

Re: Sterownik

Sprawdziłem i jest tak: kiedy światła są wyłączone to na końcówkach uC jest 139mV. Kiedy światła są wyłączone na końcówkach uC jest 5,05V. Dziwi mnie, że tak dzieje się ze wszystkimi wyjściami światła, czyżby wszystkie triaki i optotriaki się zepsuły? Diody LED jak pisałem działają poprawnie czyli zapalają się w chwili włączenia (ręcznie czy automatycznie) świateł i gasną po wyłączeniu.

Bardzo proszę poradę jak z tego wybrnąć.

Dzięki i pozdrawiam

-

Kamil

Portret użytkownika mirley

Re: triak

Ciekawa sprawa.... mam te same triaki i nie było problemów. Rezystory w układzie wykonawczym są takie same? triaki zamontowane są tak jak na zdjęciu, a nie np odwrócone o 180 stopni? Możesz jeszcze zobaczyć czy sam optotriak działa: odłącz 230V od triaków i zmierz rezystancję wyjściową optotriaka, to miedzy tymi dwoma nóżkami co idą do rezystorów 180R.

-

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 yin@yang

Re: RE: triak

Triaki zainstalowane jak trzeba. Rezystory też takie jak powinny (180R). Rezystancja na nóżkach optotriaka wynosiła 3k. Jedyne czego się dopatrzyłem to to, że użyłem optotriaków MOC3041 (takie jak w twoim opisie) a na zdjęciach twojego układu widzę MOC3021. Nie wiem czy to ma znaczenie bo nie miałem czasu zerknąć w datasheety. Masz może jeszcze jakiś pomysł co to moę być?
Dzięki za zainteresowanie :)

-

Kamil

Portret użytkownika mirley

Re: Optotriak

Quote:
Rezystancja na nóżkach optotriaka wynosiła 3k

nie zależnie czy było włączone czy wyłączone to wyjście? w jednym stanie powinna być inna rezystancja niż w drugim

Z tego co pamiętam to MOC3041 jest dodatkowo wyposażony w obwody włączania w zerze sieci, żeby zakłóceń nie robiło. Nie powinno to mieć znaczenia ale możesz jednego podmienić na MOC3021 aby wyeliminować wszystkie podejrzenia

A masz wlutowane warystory za triakami? może one stanowią problem, ja nie dałem mimo umieszczenia na schemacie

-

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 slawko

Witam czy jest możliwość

Witam czy jest możliwość dodania daty zamiast linijki "Aktualny czas" najlepiej z rokiem.

Portret użytkownika mirley

Re: Data

Jest taka możliwość tylko nie mam czasu tego dopisać. Samo wyświetlanie raczej nie powinno sprawić problemów, natomiast jeszcze trzeba to do menu dopisac a to zajmie trochę czasu na przypomnienie sobie co i gdzie jest w programie napisane

-

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 yin@yang

Re: Re: optotriak

Quote:
A masz wlutowane warystory za triakami? może one stanowią problem, ja nie dałem mimo umieszczenia na schemacie

Tak mam warystory. Już je wylutowałem i wszystko gra: 0V na wyłączonym i 230V na włączonym.

Dla odmiany, żebym nie miał za lekko ;) , teraz na wyświetlaczu nic nie widać. Świeci się ale nie widać żadnych literek. Sterownik działa tylko nic nie widać (o zadanych godz. włącza i wyłącza lampy itd).

-

Kamil

Portret użytkownika mirley

Re: LCD

Spróbuj przeprogramowac procka... poruszaj potencjometrem kontrastu lub popraw luty złącza wyświetlacza. Może coś poruszałeś i przestał LCD 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 slawko

Mam pytanie związane z

Mam pytanie związane z dodaniem jeszcze jednego triaka który ma być sterowany czasowo podobnie jak pozostałe dwa. Jak do tej pory udało mi się zrobić : menu, wybór pracy automat - ręcznie, ustawianie czasu i tu zaczyna się problem ponieważ po ustawieniu godziny triak się nie załącza, mogę jedynie sterować ręcznie. Nie znam jeszcze tak bardzo BASCOMA ale zdaje mi się że odpowiedzialny za to jest ta część kodu:

'************   Sterowanie       ***************
'***********************************************
Sterowanie:
  Hword(1) = Godziny * 60
  Hword(1) = Hword(1) + Minuty                              'czas w minutach
 
  'prog czasowy
  For N = 1 To 3 Step 2
    Hword(2) = G(n) * 60
    Hword(2) = Hword(2) + M(n)                              'czas w minutach
    Hword(3) = G(1 + N) * 60
    Hword(3) = Hword(3) + M(1 + N)                          'czas w minutach
    Hbit = 0
    If Hword(3) >= Hword(2) Then
      If Hword(1) >= Hword(2) Then If Hword(1) < Hword(3) Then Hbit = 1
    Else
      If Hword(1) >= Hword(2) Then Hbit = 0
      If Hword(1) < Hword(3) Then Hbit = 0
    End If
    If N = 1 Then
      If Ar_tr1 = 1 Then Tr1 = Hbit
    Else
      If Ar_tr2 = 1 Then Tr2 = Hbit
    End If
  Next N

Bardzo proszę o pomoc.

Portret użytkownika mirley

Re: Sterownik

Jeśli już dorobiłeś sobie menu to musiałeś powięszyć tablicę godzin G i tablicę minut m o dwa dodatkowe elementy. Teraz modyfikujesz fragment kodu:

Sterowanie:
  Hword(1) = Godziny * 60
  Hword(1) = Hword(1) + Minuty                              'czas w minutach
 
  'prog czasowy
  For N = 1 To 5 Step 2
    Hword(2) = G(n) * 60
    Hword(2) = Hword(2) + M(n)                              'czas w minutach
    Hword(3) = G(1 + N) * 60
    Hword(3) = Hword(3) + M(1 + N)                          'czas w minutach
    Hbit = 0
    If Hword(3) >= Hword(2) Then
      If Hword(1) >= Hword(2) Then If Hword(1) < Hword(3) Then Hbit = 1
    Else
      If Hword(1) >= Hword(2) Then Hbit = 0
      If Hword(1) < Hword(3) Then Hbit = 0
    End If
    If N = 1 Then
      If Ar_tr1 = 1 Then Tr1 = Hbit
    Else if N = 3 then
      If Ar_tr2 = 1 Then Tr2 = Hbit
    else
      If Ar_tr3 = 1 Then Tr3 = Hbit
    End If
  Next N

jeszcze trzeba zmienną Ar_tr3 zadeklarować i odpowiednia ją ustawiać w menu oraz nazwac port jako Tr3

-

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 slawko

Zmodyfikowałem ten kawałek

Zmodyfikowałem ten kawałek kodu ale przy compilowaniu wywala taki błąd: Error:46 Line: 1052 Assignment error [ELSE IF N:0 3THEN:0] linia 1052 w kodzie to:

Else If N = 3 Then 

Portret użytkownika mirley

Re: ELse

No bo jest to źle napisane.... wstaw

Elseif N = 3 Then 

powinno zadziałać, a jak nie to wstaw case'a zamiast tych dwóch ifów z else'ami

-

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 slawko

Dzięki teraz jest wszystko

Dzięki teraz jest wszystko dobrze do momentu odpięcia zasilania, nie zapamiętuje mi ustawień dla tego dodanego triaka, nie za bardzo wiem gdzie to dopisać.

Portret użytkownika demsy1

Układ RTC PCF8583

Mam małe pytanie czy Układ RTC PCF8583 mogę zastąpić układem PCF8563?

Portret użytkownika mirley

Re; PCF RTC

Teoretycznie adresy bazowe się zgadają ale w praktyce masz inny układ rejestrów więc musiał byś sobie przerobić procedury Zapis_RTC i Odczyt_RTC. Nie mam kiedy tego zrobić ani jak tego wytestować bez budowania układu na płytce testowej więc albo zastosuj układ który jest w projekcie albo na podstawie karty katalogowej musisz zmodyfikowac te procedury

-

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 beleco

+ 1 TERMOMETR

CHCIAŁBYM DODAĆ JESZCZE 1 TERMOMETR, Z PROGRAMEM CHYBA SOBIE PORADZĘ, ALE CO Z OPORNOŚCIĄ??
PROSZĘ MI DORADZIĆ, CO MAM ZROBIĆ Z TYMI REZYSTENCJAMI I JEŚLI MOŻNA TO JAK DALEKO MOŻNA ODSUNĄĆ DS'A (SKRĘTKĄ KOMPUTEROWĄ) JA MAM OK 70METRÓW.

-

Max

Portret użytkownika mirley

Re: DS

Dodaj kolejny Ds, schematu nie zmieniaj, wszystkie elementy bedą dobre. Podłacz czujnik 3 przewodami, żeby miał tez pewne zasilanie i powinno zadziałać na te 70m. Ja testowałem na około 20-30m z bele jakim kablem, na skrętce powinno być lepiej

-

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.