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 Marcjanp

Podświetlenie

Witam.

Zacząłem też robić ten sterownik. Mam problem z podświetlaniem. Nie jestem tak biegły w bascomie żeby to znaleźć. Która linijka kodu odpowiada za podświetlenie wyświetlacza w chwili naciśnięcia przycisku? Bo u mnie działa to w taki sposób, że pali się cały czas a jak coś nacisnę to podświetlenie gaśnie. :/

Portret użytkownika mirley

Re: Podsw

    If Autolight > 0 Then
      Decr Autolight
      Lcd_light = 0
    Else
      Lcd_light = 1
    End If

Nie ma to prawa działać na odwrót, chyba że masz tranzystor NPN i podłączyłeś od strony masy, wtedy zamień miejscami wartości 0 i 1 przy LCD_light

-

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 Marcjanp

O dziękuje. Już działa.

O dziękuje. Już działa.

Portret użytkownika Levy88

Wyświetlanie wyników w internecie

Witam. Świetny projekt aczkolwiek byłoby ciekawie gdyby wyniki pracy sterownika można było oglądać w internecie. Ma Pan może jakiś pomysł jak to zrobić w miarę łatwy sposób?

Portret użytkownika rafliczek22

Na to nie ma za bardzo

Na to nie ma za bardzo łatwego sposobu, no chyba że laptop i po rsie wysyłać a na kompie zrobić serwer.

Portret użytkownika Adam 25

DS 1307

Witam czy zaniast PCF8583 będzie działał DS1307 ,czy coś trzeba będzie pozmieniać w programie ?

Portret użytkownika mirley

Re: PCF

Nie pamiętam dokładnie ale chyba układy mają inny układ rejestrów. Trzeba przestudiować kartę katalogowa i porównać oba układy

-

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 demsy1

Pobór prądu

Chciałbym się dowiedzieć ile prądu max. pobiera układzik?

Portret użytkownika mirley

Re: Prąd

Oczywiście dokładnego poboru prądu nie mierzyłem..... ale z oglądu schematu to będzie 200mA max. Zależy wszystko od tego czy podswietlanie LCD jest właczone i czy triaki pracują 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 demsy1

Aktualny czas

Układzik zmontowany, ale jest jeden problem. W miejscu gdzie wyświetla się aktualny czas jest godzina 165:165:165, nie mogę tego przestawić w żaden sposób i nie wiem co jest tego powodem.

Doszedłem co było nie tak. Brakowało mi ścieżki zasilającej układzik U2

Mam jeszcze jedno pytanie. Chce napisać w bascomie wyraz garaż zamiast dom, ale jak napisać ,,ż,,?

Portret użytkownika IMEX2

Ż

Wstaw to na poczatek a potem w wyrazie zamiast "Ż" wstaw ; Chr(7) ;

Deflcdchar 7,2,32,15,1,6,8,15,32

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika IMEX2

Alarm - do Mirka

Cześć Mirku
zdemontowałem wcześniej zamontowany sterownik zainstalowany w domku.
Ale znalazłem kolejny błąd. A mianowicie dotyczy tym razem Alarmu
Urządzenie działa - alarm wł - aktywuję alarm - pokazuje sie godzina i po czasie (jak dział beeper) zanika zasilanie -
sterownik nie pamięta aktywacji

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika demsy1

Litera "ó"

Zmieniłem tak jak Pan napisał, ale jest coś nie tak bo zamiast litery "ó" w wyrazie dwór jest jakiś znak.

Portret użytkownika mirley

Re: Znak "ż"

Linijkę która proponuje IMEX2 wstaw w miejsce:

 ......
         Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32       ' o kreskowane
 
         Deflcdchar 3,2,32,15,1,6,8,15,32   '!!!!!!!!!!!!!dopisz to
 
         Cls
         Lcd "Dw" ; Chr(1) ; "r:"
         Lowerline
         Lcd "Gara"; Chr(3)                          '!!!!!!!!!!!!!zmień
 
.......

Zmiana w tym fragmencie powinna pomóc, ale trzeba to wytestowac bo już dawno temu to pisałem:

 If Flaga_4ms = 1 Then
    Flaga_4ms = 0
 
    If Alarm = 1 Then
      If Linia_no = 0 Or Linia_nc = 1 Then
        Alarm = 2
        Writeeeprom Alarm , 22              '!!!!!!dopisać
        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
        Writeeeprom Salarm , 23            '!!!!!!dopisać
        A_g = Godziny
        A_m = Minuty
      End If
    End If

-

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 demsy1

Dopisałem Deflcdchar

Dopisałem Deflcdchar 3,2,32,15,1,6,8,15,32 i teraz wyszystko jest ok, ale również dopisałem Writeeeprom i musze napisać że również działa.

Podziękowania dla kolegi mirleya

Portret użytkownika andrzej34

brak odczytu z DS18B20

Witam, wykonałem taki sterowniczek jakiś czas temu i pilnuje on obecnie pompy wody przed zamarznięciem na działeczce, wykonałem następny i mam problem bo niema odczytów z termometrów. Przy rejestracji wydaje się ,że jest ok. a wskazania -0,0 st.. Posługuję się kilkoma termometrami i to samo, a mam jeszcze dwa które chodziły na poprzednim sterowniku. Procesor był zaprogramowany jeszcze przy okazji pierwszego sterownika i działał poprawnie, przy niepowodzeniu jakie mnie dopadło z drugim sterownikiem przeprogramowałem procesor i też nic. Pokazują się napisy "DS1" itp. przy rejestracji i nic więcej, przy braku termometru taki napis też się pokazuje. wyjście z termometru pocynowałem aż do procesora i nic.
Jakieś sugestie?
Pozdrawiam.

Portret użytkownika andrzej34

brak odczytu z DS18B20

Mam!- mój błąd, R-1 i R-14 można łatwo pomylić zerkając na "podgląd montażu", ja tak zrobiłem :(, teraz jest ok. nic nie "uwaliłem" :).
Pozdrawiam.

Portret użytkownika IMEX2

zmiana wyboru ds-ów

Mirku które dane trzeba pobierać żeby w menu wstawić sobie zmianę DS-ów do poszczególnych odczytów. Chcę wstawić odczyt automatyczny wszystkich podłączonych czujników (i tu niema problemu) tylko zostaną one zapisane nie tak jak trzeba.
własnie jak jest zapisywany ID DS-a i tu nie doszedłem

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Temperatury

Wystarczy że odczytane temperatury przypiszesz do moich zmiennych T(1), T(2) i T(3), więc w programie np automatycznie masz rozpoznawane czujniki i czytasz temperatury A, B, C. W menu napiszesz która tempratura przypisuje się zawsze do której z T(n).

Nie wiem jak się ds'y odczytują, wygląda na to że to trochę losowa sprawa, znaczy po wymianie czujnika na inny trudno stwierdzic na którym miejscu się zapisze

-

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 Grzegorz

niestety nie działa

Witam

Zmontowałem sterownik niestety jak zwykle nie działa a z racji, że nie jestem elektronikiem nie umie sobie z tym dać rady. W związku z tym mam pytanie, jak powinien zachować się ten układ po uruchomieniu.
U mnie na wyświetlaczu świeci tylko pierwsza linia wyświetlacza i wyświetla same kwadraty nie ma nawet podświetlenia. Układ reaguje tylko na przycisk F2 i zaświeca się środkowa dioda dwie pozostałe świeca cały czas. Może macie jakieś sugestie zależy mi na tym układzie miał służyć jako sterownik w wędzarni a zdaje mi się, że wyląduje gdzieś w kącie.

Portret użytkownika mirley

Re: Sterownik domowy

Spróbuj regulacji kontrastu za pomocą potencjometru. Jeśli wgrałeś program poprawnie i ustawiłeś fusy to do pierwszego uruchomienia nie trzeba nic więcej. Sprawdź czy na pewno jest połączenie od LCD do procka

-

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 matrix

Re: niestety nie działa

Masz źle podłączony lcd, bo nie został poprawnie zainicjowany. Sprawdź podłączenie lcd.

Portret użytkownika Grzegorz

Witam ponownie wyświetlacz

Witam ponownie wyświetlacz jest poprawnie podpięty na piny 1 2 przychodzi napięcie 5.025V pin 2 to + a reszta pinów jest po kolei oprócz pinów, 7 8 9 10 bo nie są podpięte.
Podpiąłem drugi wyświetlacz i dalej to samo procer jeszcze raz sprawdzony i też OK.

Portret użytkownika Grzegorz

Sterownik

Sterownik działa poprostu wgrałem hex z elektrody od IMEX i niestety na nim nie ruszył.

Portret użytkownika ervin

Zrobić ten projekt i jesteśmy

Zrobić ten projekt i jesteśmy pewne funkcje mogą nie działać delajo.Ne podświetlenia ekranu LCD i nie uznaję DS18B20 gdzie byłby problem.
Ervin Slovenia

Portret użytkownika mirley

Re: Sterownik Domowy

Czujniki trzeba zarejestrować żeby działały. Wkładasz czujniki po kolei i włączasz zasilanie. Za każdym razem trzymając inną kombinację przycisków przed włączeniem zasilania (UP+MENu+F2, DOWN+MENU+F2, SET+MENU+F2) jednocześnie może być tylko jeden czujnik włożony podczas rejestracji. Po rejestracji wkłada się do układu 3 czujniki.

Na LCD tylko podświetlanie nie działa czy w ogóle nie pokazuje znakó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 ervin

Dziękujemy za pomoc DS18B20

Dziękujemy za pomoc DS18B20 pracy, to nie działa, a my pracujemy normalnie lcd.Znaki oświetlenie

Portret użytkownika mirley

Re: Sterownik

Może tranzystor T1 jest uszkodzony albo źle wlutowany. Może LCD nie ma podświetlania? albo wyprowadzenia podświetlania są zamienione miejscami

-

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 ervin

Wymieniłem już parę T1

Wymieniłem już parę T1 Sprawdziłem wiele stawów ale nadal nie działa oświetlenie .

Portret użytkownika mirley

Re: LCD

Może twój LCD ma zamienione nóżki podświetlania. Zdarzają się takie wersje. Masz kartę katalogową albo dokładny numer swojego LCD?

-

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 ervin

ftp://www.ozdisan.com/KOMPONE

Portret użytkownika mirley

Re: LCD

Wyprowadzenia są takie jak u mnie. Próbowałeś zewrzeć kolektor tranzystora T1 do +5V? Może rezystor ograniczający prąd jest zły?

-

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 ervin

Teraz działa podświetlenie

Teraz działa podświetlenie LCD Zamieszczam nowe ATmega16 i jest zaprogramowany coś jest oczywiście błędne z procesorem
dzięki za pomoc

Portret użytkownika beleco

Allegro

Czy za pomocą np. allegro można sprzedawać układy i programy z Twojej strony??
Przecież programy są Twojego autorstwa, można go wykorzystywać, ale czy sprzedawać??
Rzućcie okiem na link
http://allegro.pl/testowa-mega32-termometr-zegarek-czasowka-alarm-i1486179385.html

-

Max

Portret użytkownika mirley

Re: sterownik domowy

Jasne że nie można sprzedawać. Projekty tutaj zamieszczone są wynikiem mojej pracy, udostępniam je użytkownikom mojej strony na własny użytek. Dziękuje za informacje

-

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

Sprostowanie - ALLEGRO sterownik

Witam serdecznie

Sprzedaję ten sterownik na allegro bo jest mi poprostu zbędny - jeśli jest ktoś zainteresowany proszę dać znać.

Nie Handluje - służyło mi to przez około 1 rok. Mam kilka podobnych projektów sterowników.

Opracowałem własny rozbudowany projekt sterownika domowego na Atmega 128

Brak na Fotce jeszcze LCD 4x20 Big Znaki -

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika demsy1

Prosty sterownik

Witam
Mam pytanie do wykonawcy tego projektu, czy trudno jest zmodyfikować program pod atmege 8 tyle że tylko z opcją zegarka i wyłącznikiem czasowym takim żeby 2 razy dziennie, albo nawet i 3 razy się wł. i wył.?

Portret użytkownika mirley

Re: Program

O tyle trudno że mało pamiętam z programu i musiał bym go całego analizować. Zdecydowanie prościej będzie napisać ci to samemu prawie od nowa, bazując na tym co jest zrobione. Musisz wywalić część programu odpowiedzialną za temperaturę i zrozumieć działanie całości. Ze względu na brak czasu mogę pomóc w zrozumieniu tylko konkretnych bloków programu

-

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

Sterowanie czasowe zmiana z 2 na 4 - problem

Więc tak Mirku

Zmieniłem sterowanie z 2 na 4 czasy i mam problem ze sterowaniem

Zmianę wykonałem w przyciskach wykonałem - wszystko działa OK

zapis do pamięci i odczyt działa OK

For A = 10 To 17
  Readeeprom G(a -9) , A
  If G(a -9) > 23 Then G(a -9) = 0
Next A
For A = 18 To 25
  Readeeprom S(a -17) , A
  If S(a -17) > 59 Then S(a -17) = 0
Next A

        For A = 10 To 17
          Writeeeprom G(a -9) , A
        Next A
        For A = 18 To 25
          Writeeeprom S(a -17) , A
        Next A

Ale mam problem z tym sterowaniem - nadmienię że ma dotyczyć jednego triaka

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

U siebie pozmieniałem literki ale wszystko pozostaje w kodzie tak samo prawie

Hword(1) = Godziny * 60
  Hword(1) = Hword(1) + Minuty
 
  For R = 1 To 5 Step 2
    Hword(2) = G(r) * 60
    Hword(2) = Hword(2) + S(r)                              'czas w minutach
    Hword(3) = G(1 + R) * 60
    Hword(3) = Hword(3) + S(1 + R)                          '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
 
' Ar_tr1 - pozostawione Automatyczne i ręczne sterowanie
    If R = 1 Then
      If Ar_tr1 = 1 Then Tr1 = Hbit    
    End If
    If R = 2 Then
      If Ar_tr1 = 1 Then Tr2 = Hbit
    End If
    If R = 3 Then
      If Ar_tr1 = 1 Then Tr3 = Hbit
    End If
    If R = 4 Then
      If Ar_tr1 = 1 Then Tr4 = Hbit
    End If
 
' jezeli na ktorymź z tych Tr1-Tr4 wystapi "0" to włącz triak
    If Tr1 = 0 Or Tr2 = 0 Or Tr3 = 0 Or Tr4 = 0 Then Czasowka = 0 Else Czasowka = 1
 
  Next R

zmienione N na R i M(minuty) na S - miałem takie potrzeby w kodzie

Nadmienię że sterowanie jednym triakiem i 2 czasy było OK ale z 4 lub więcej mam problem

Jak widzę nie tylko mnie ta sprawa interesuje wiec mile widziane konkrety :)

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Sterownik domowy

Jeśli jest For R = 1 To 5 Step 2 to R przyjmuje wartości 1, 3 i 5, więc z twoich 4 ifów 2 się nigdy nie wykonują

-

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

Sterowanie czasowe zmiana z 2 na 4 - problem

hmm, oczywiście zmieniałem wartość if-ów ale niewiele mi to dało

A jak to działa w twoim kodzie - masz 2 odczyty w w jednym przebiegu kodu - włącz i wyłącz

    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)

Więc czy u mnie dobrym rozwiązaniem będzie dopisanie kolejnych odczytów 2,3,4 za jednym podejściem czy pozostawić jeden odczyt. Ale robiłem

For R = 1 To 4 Step 1

i nadal miałem problem. Dla rozpoznania stanów na danych przejściach " R " dodałem sobie tylko dla informacji to
If Tr1 = 0 Then Lcd "*" Else Lcd " " 
If Tr2 = 0 Then Lcd "*" Else Lcd " "
If Tr3 = 0 Then Lcd "*" Else Lcd " "
If Tr4 = 0 Then Lcd "*" Else Lcd " "

Podczas wpisywania danych dla czasówki załączają się " * " dla wartości R = 1 ( to 4) ele nie działa to jak trzeba.

Więc jeśli dasz rade w wolnej chwili to poproszę o pomoc.

PS.
Pytanko - Czy pracowałeś na M128 - mam problem z konfiguracją portów F i G jako input - podłączenie I2C również nie działa.

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika klucha93

Witam! Chciałbym zrobić ten

Witam! Chciałbym zrobić ten sterownik. Mam programator pod USB i zwykle programuję przez program AVRDUDE wbijając plik hex. Czy mógłby mi ktoś powiedzieć jak zmienić kod źródłowy (kod do bascoma) na plik hex. odrazu do wgrania? Jak to zrobić? Jak można zmienić np. w programie nazwy obiektu pomiaru np.(Zamiast dwór-pokój)? Czy można jakoś zmienić w tym programie, aby cały czas wyświetlało datę i temperaturę z dwóch czujników? Czy można zastosować więcej czujników pomiaru temperatury? Sory, za trochę głupie pytania, dopiero zaczynam przygodę z mikroprockami itp. "Prosty termostat z histerezą" to znaczy, że mogę nastawić temeperautę jakiegoś obiektu i będzie ją stale utrzymywać?

Portret użytkownika mirley

Re: Odczyt

Mam dwa odczyty bo potrzebuje czas włączenia i wyłączenia.... nie wiem jak chcesz to zrobićinaczej. Pętla idzie co 2 i nie ma nigdy stanu 4 oraz 2. Jak chcesz to mieć inaczej to sobie musisz cały program napisać od nowa. Step w pętli ma być 2. Czas jest zapisany w tablicy tak że komórka 1 jest włacz, komórka 2 wyłącz, 3 włacz 2 , 4 wyłącz 2, więc stan 5 będzie się odnosił do zmiennej G(5)i G(6)

Na m128 nigdy nic nie robiłem

-

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

Do zmiany nazw i zrobienia

Do zmiany nazw i zrobienia hexa potrzebujesz programu BASCOM-AVR dostępny TU http://www.mcselec.com/index.php?option=com_content&task=view&id=14&Itemid=41
Daty w org sterowniku niema wiec trzeba dopisać do kodu
Czujników możesz podłączyć ile chcesz - potrzebujesz zmieniając jednocześnie kod

pozdrawiam

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika IMEX2

Sterowanie czasowe zmiana z 2 na 4 - problem

Jak widać moja tablica jak ja nazywasz ma stan od 1 do 8 (eeprom 10 to 17 dla G)
Stan 5 oznacza odczyt G5 tylko bo G6 = 6, czy zgadza się - jest 8 par.

Masz u siebie wartość 1 to 3 step 2 ?? - a odczyty są 4, tzn 4 pary G+M , już nie kumam

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Sterownik

pętla 1 to 3 step 2 ma dwa stany, odpowiadające kanałom (mam dwa kanały czasowe). Do wyznaczenia stanu logicznego każdego z kanałów trzeba mieć dw czasy, czas wyłączenia i włączenia, czyli G i M włączenia i G i M włączenia.

W jednym kroku dla wartości 1 odczytuje 4 parametry i obliczam czy czas aktualny jest w przedziale i ustawiam stan
W drugim kroku odczytuje kolejne dwa czasy, porównuje z aktualnym i ustawiam drugie wyjście.

To naprawdę nie jest trudne do zrozumienia. Jak czytasz w każdym kroku po jednym czasie to sprawdzanie stanu musi być po dwóch odczytach a to jest niepotrzebna komplikacja..... Nie wiem jak mam to wyjaśniać jeszcze

-

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 kuba2509

Podświetlanie

Witam i gratuluje projektu,badzo udany.

Mam w związku z nim pytanie czy istnieje możliwość podświetlania
wyświetlacza bez wygaszenia po paru sekundach.
Jeśli tak to jak to zrobić.
Pozdrawiam Kuba

Portret użytkownika IMEX2

Sterowanie czasowe zmiana z 2 na 4 - problem

Problem rozwiązany po rozpisaniu na pojedyncze przebiegi czego wadą jest więcej kodu, a zaleta możliwość niezależnego sterowania wł/wył kolejnych kanałów czasowych

Problem rozwiazany

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika IMEX2

podswietlanie

Wartość odpowiedzialna za podświetlanie w sekundach

Autolight = 20

a jeżeli chcesz bez kombinacji wogole nie używać auto wygaszania wykasuj ta zawartość lub odznacz

    'If Autolight > 0 Then
    '  Decr Autolight
    '  Lcd_light = 0
    'Else
    '  Lcd_light = 1
    'End If

pozdrawiam

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika elektron1988

płytka

Witam Mirku

Mam takie pytanie w jakim programie projektujesz płytki? Wczoraj wydrukowałem mozaikę ścieżek i zobaczyłem, że piny układu układu w tym sterowniku nie pokrywają się. 4 czy 5 pierwszych nóżek pasuje w otwory ale później nie trafia.

-

elektron1988