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 grizz

A wydrukowałeś bez

A wydrukowałeś bez skalowania?

Portret użytkownika elektron1988

plytka

Tzn. wziąłem otworzyłem plik płytka.pdf i wydrukowałem nic nie zmieniając.

-

elektron1988

Portret użytkownika grizz

I 3cm odcinek ma rzeczywiście

I 3cm odcinek ma rzeczywiście 3cm?

"nic nie zmieniając" - to akurat bład bo adobe ma OIDP standardowo skalowanie załączone.

Portret użytkownika elektron1988

Aha. Dziękuję za informację,

Aha. Dziękuję za informację, na przyszłość będę o tym pamiętał.

-

elektron1988

Portret użytkownika jajen

timer sekundowy

Witam,

Zrobilem sterownik. Dziala jak należy. Ale potrzebuje wykorzystać jeden timer sterownika do uruchamiania kroplownika na ok 5-30 sek. Co należy dopisać w kodzie żeby mozna było ustawić godzinę wył/wł jednego timera z uwzględnieniem sekund? To dla mnie wazna sprawa, wiec bardzo proszę o pomoc kogoś biegłego w temacie.

Portret użytkownika IMEX2

kroplownik

witam co to takiego ?? ten kroplownik

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika jajen

re:timer sekundowy

przyrząd do precyzyjnego dozowania cieczy (kroplami).

Portret użytkownika IMEX2

oj te kropelki

chcesz w kodzie dodatkowy timerwł/wył tylko o określonejgodzinie czyjak ?
ma się wł o godz 19,37,20 sekund a wył 19,37,40 sekund czy jak ?
chcesz zastosować do tego dodatkowy triak/przekaźnik poza tymi trzema triakami i dodatkowe menu
Jaki zastosowaleś procek M16 czy 32

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika jajen

re :timer minutowy

Nie dodatkowy, ale jeden z dwóch timerów, które sa juz w układzie. Drugi może chodzić minutowo , tak jak dotąd. Chodzi dokładnie o to co napisales, czyli możliwość ustawienia timera na kilka sekund np. 08:30,40 sek do 08:30,48 sek. Kroplownik ma podac kilka ml cieczy, a taką ilość podaje w kilka sekund. Obecnie timer można ustawić minimum na minutę, a to już jest za dużo zdecydowanie. Myslalem zeby w tym samym menu dodac możliwość ustawienia godziny wl/wyl jednego z istniejacych kanalow z uwzględnieniem sekund. Procesor mam Atmega16.

Portret użytkownika IMEX2

timer sekundowy

napisz do mnie na gg

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika jajen

re:timer sekundowy

Gdyby ktoś wiedział jak zmodyfikować program sterownika na sekundowe odliczanie i miał ochotę pomóc to prośba zostaje aktualna.

Portret użytkownika mirley

Re: Sterownik domowy

Trzeba zamienić czas z reprezentacji minutowej na sekundową w procedurze sterowanie (fragment podobny do tego niżej)

Hword(2) = G(n) * 60
Hword(2) = Hword(2) + M(n)                              'czas w minutach

Trzeba dac godziny *3600 + minuty *60 + sekundy zarówno dla czasu aktualnego jak i dla obu czasów ustawianych

W procedurze przycisków trzeba dopisać dodatkowe case do poz_ust i przy poz_wysw = 2 czyli dla ustawień czasów odpowiedzialne za ustawienia sekund dla wszystkich 4 czasów. Oczywiście trzeba zrobić tablicę S(4) na początku programu analogiczną do minut i godzin

Na końcu w procedurze Wysw_lcd w case = 2 trzeba dopisac wyświetlanie tych sekund. Nie wiem jak to zmieścisz na LCD. Trzeba będzie chyba dwukropki pominąć i zrobic napis w stylu: 123456-123554

-

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 jajen

re:timer sekundowy

Wielkie dzieki za zainteresowanie. Niestety ponieważ jestem zielony w programowaniu to niewiele z tego zrozumiałem. Ale może ktoś znajdzie czas i wklei jak powinny wyglądac poszczególne fragmenty kodu. Ważne, że da się to zrobić, bo jedyna rada jaką dotąd dostałem, to że się nie da i trzeba od nowa wszystko pisać, co zniechęciło mnie do zmian i zamierzałem zrobić elektroniczny opóźniacz startu wywoływany impulsem z timera, ale to droga na około. Oczywiscie dwukropki nie są niezbędne. Dzięki raz jeszcze.

Portret użytkownika ervin

thermostats from histereza

Or I could be made that bi had up two thermostats from histereza instead of timer

Portret użytkownika mirley

Re: Termostats

Two termostats are possible to implement in this project, but program must be completly different. I'm afraid I don't have time to do this in this moment

-

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

because doesn't in a hurry

because doesn't in a hurry like this samo comes on that to make so you please that you make me this when you will have time

Portret użytkownika Enkoder

kilka pytań

Witam! Chcę zbudować ten układ i mam kilka pytań. Jakich układów alarmowych można tutaj użyć? Proszę o jakieś przykłady. Chciał bym mieć czujnik alarmujący o otwarciu drzwi. Kolejnym pytaniem jest to, czy triaki powinny mieć radiatory? Jeżeli tak to czy przy jednym wspólnym muszą być odizolowane np. podkładką mikową?

Portret użytkownika mirley

Re: Triaki

Triaki raczej nie potrzebują radiatorów. Musiałbyś podłączyć dużą moc do obciążenia rzędu 500W żeby się nagrzewały. To czy możesz je zewrzec czy nie zależy od triaka. niektóre maja na blaszce anodę a niektóre są izolowane. Zawsze należy sprawdzić w PDF'ie

-

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

mirley or you will consider

mirley or you will consider little time my request thermostats from histereza instead of timer

Portret użytkownika mirley

Re: Sterownik

Sorry but I don't have time in this month.... many thinks to do and not too much time to do this

-

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

Ok only that you didn't

Ok only that you didn't forget

Portret użytkownika KrzysiekG10

Ilość DS-ów

Od dłuższego czasu przeglądam tą stronę i w końcu zdecydowałem się wykorzystać pomysł Sterownika. Zakupiłem już wszystkie elementy. Ale ... jest on prawie w 100% zgodny z moimi potrzebami:
- chciałbym zastosować 6 czujników pomiaru temp. (jest o tym mowa ale nie znalazłem jaki dopisać kod i jak je później wczytać korzystając z kombinacji klawiszy?)
Może mała pomoc lub wyjaśnienie nie zajmie zbyt dużo czasu!!

-

Krzysiek

Portret użytkownika mirley

Re: Ds

Żeby wstawić więcej dsów trzeba się trochę natrudzić. Modyfikacji trzeba dokonać w całym programie:

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

i

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

potem w procedurze odczytu temperatury, w wyświetlaniu i w obsłudze klawiszy jeśli chcesz aby temperatury wyświetlały się jako ekran 4.

-

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 KrzysiekG10

Ilość DS-ów

Tak wiem, "bez pracy nie ma kołaczy". Masz w sobie coś z nauczyciela.
Nie programowałem nigdy w BASCOM-ie i stąd kłopoty. Czytam właśnie sobie o tym i owym na Twojej stronie i nie bardzo wiem czy kolejne DS mogą być 60+N, 70+N, 80+N (już są 30+N, 40+N, 50+N), pętlę rozumiem, odczyt przycisków z kodu binarnego już też.
Nie mógłbyś zamieścić fragmentów kodu ze zmianami dla 1 (jednego!) następnego DS-a - sądzę, że byłoby to pomocne nie tylko mnie.
Co do wyświetlania, kupiłem wyświetlacz 20x4 więc i tak będę musiał ten fragment przerabiać - o tym później.

-

Krzysiek

Portret użytkownika mirley

Re: DS

Adresy dsów mogą być zapisywane na kolejnych miejscach 60+N, 70+n itd. Jak już zmienisz, dopiszesz procedury rejestracyjne, na samym początku. Dodasz linijkę z odczytem numeru z eeproma (to z 60+N itd) to trzeba zmienić procedurę odczytu temperatury. Jest ogólnie napisana więc nie powinno być problemu, dodajesz kolejnego case'a:

Temperatura:
  Disable Interrupts
  1wreset
  Select Case Ktory_ds
.....
 
    Case 3:
      1wwrite &H55
      1wwrite Ds3(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
 
    Case 4:
      1wwrite &H55
      1wwrite Ds4(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
  End Select

i jeszcze zakres licznika
If Ktory_ds = 4 Then Ktory_ds = 0

Trzeba jeszcze dodać zmienną tablicową Ds4 i zwiększyć ilość komórek tablicy T. Po tych zabiegach powinno już czytać temperaturę. Możesz sobie ją wyświetlić np zamiast T1 podmieniając zmienną w procedurze wyświetlania.

-

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 KrzysiekG10

Ilość DS-ów

Dzięki za podpowiedź, tymczasem znalazłem na Twojej stronie w kodach źródłowych artykuł o DS18x20 i już wiele rozumiem.
Spróbuję uruchomić układ zwiększając ilość czujników ale z wyświetlaczem 16x2 podmieniając tak jak sugerujesz tylko zmienne. Jak zadziała zabiorę się za zmianę wyświetlacza bo jeszcze nie wiem jak obsługiwane są te 4 linie. Wtedy, jeżeli pozwolisz, znowu będę miał jakieś pytania. Na razie zabieram się do przeróbki płytki bo układy wykonawcze chcę dać w innym budynku (odległość między budynkami ok. 6m) a dołożyć gniazda i wtyczki.

-

Krzysiek

Portret użytkownika sowa

sterownik domowy

WITAM NAPRAWDĘ NIE SAM-OWITE PROJEKTY WSZYSTKO JAK NA TALERZU PODANE
STEROWNIK ZŁOŻONY WSZYSTKO ŁADNIE ŚMIGA TERAZ TYLKO KWESTIA SYRENY I JAKIEJŚ LAMPY LED KOGUCIK POD BUZER PRZEKAŹNIK I BĘDZIE GRAŁO WSZYSTKO

WIELKI SZACUNEK DLA MIRKA

-

sowa

Portret użytkownika KrzysiekG10

Sterowanie

Układ sterownika jest doskonały-mam świetną zabawę dzięki Tobie Mirku. Minęło trochę czasu ale wszystko jest na dobrej drodze. Udało mi się dopasować sterownik do własnych potrzeb:
- 7 termometrów,
- wyświetlacz 4x20,
- 5 triaków(dodatkowe C3 i C4) ale... to za mało na moje zapędy do sterowania.
Czy istnieje sposób aby rozszerzyć ilość wyjść jeszcze tak o 3-4 triaki. Może po RS-ie ... a może jest to gdzieś na Twojej stronie tylko ja tego nie widzę.

-

Krzysiek

Portret użytkownika IMEX2

Dodatkowe piny

Właśnie z tego powodu, braku pinów i pamięci w M32 przesiadłem się na Atmegę 128 - Obecnie po rocznej pracy nad domowym sterownikiem i dopracowaniem programu (60% pamieci) i tak ma jeszcze delikatne niedociągnięcia (tak dla odpicowania) myślę nad Atmegą 256 która ma kilka pinów więcej. No i zasadnicza sprawa duuuuuża ilość wątków. Obecnie moja atmega 128 wykonuje przy jednym przejściu około 100 - więc pracuje na 80% swojej mocy :)

Jeżeli wystarcza tobie pamięci w M32 domniemam to zwiększenie ilości triaków to nie problem - zrób to na podstawie Kodu BCD - zastosuj do tego Atnity lub atmegę 8 - Za pomocą 4 pinów M32 możesz sterować 15 triakami.

Pozdrawiam

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika KrzysiekG10

Re: Dodatkowe piny

Dzień dobry IMEX2, Twój wpływ na moje prace jest również niebagatelny(pomysł na sterowanie C3,C4, czuwanie nad wejściami, - bez urazy Mirku!). Mam jeszcze trochę miejsca w M32(nie napisałem wcześniej, że zmieniłem M16/M32) i jak sądzę na razie wystarczy jeszcze na te dodatkowe triaki. Ale jak widać wcześniej moja zabawa zaczęła się z Bascom-em we wrześniu i wiedza przybywa na zasadzie porównań innych projektów i pomysłów. Zupełnie zadowala mnie pomysł z kodem BCD i Attiny2313. Jedyny problem to jakiś przykład schematu i oprogramowania. Szukałem również na elektrodzie ale nie potrafię znaleźć konkretnego przykładu w Bascom-ie.
Dzięki za podjęcie tematu.

-

Krzysiek

Portret użytkownika mirley

Re: Triaki

Jak zostanie zastosowany dekoder BCD to automatycznie będzie mógł działać tylko jeden triak. Nie da się włączyć np 3 i 5 jednocześnie. Polecam raczej expender na i2c PCF8574A lub podobne

-

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 KrzysiekG10

Triaki

Dzień dobry Mirku!
Odpowiedź jest konkretna i wyklucza zastosowanie. Co do i2c poczytałem trochę na elektrodzie i jest to "trochę" zbyt skomplikowane jak dla mnie. Może zmiana na M128 była by sensowniejsza ale robota od nowa. Mam pytanie wynikające z braku wiedzy o AVR- porty A,B,C,D w karcie katalogowej opisane są tak samo jako DRIVERS/BUFFERS czy mogę zatem zrezygnować np. z portu B.3 jako wejścia a zrobić z niego wyjście na triaka???
Jeżeli nie, to czy mógłbyś wskazać jakiś przykład z wykorzystaniem i2c?
Jeżeli chodzi o Twój sterownik to działa on bez zarzutu i steruje pracą kilku urządzeń w domku. Super zabawa!

-

Krzysiek

Portret użytkownika mirley

Re: Sterownik

Dowolny pin mikrokontrolera możesz użyć w dowolny sposób, jeśli chodzi o klasyczne zastosowania jako wejście lub wyjście. Wiadomo że są piny o dodatkowych specjalnych funkcjach takie jak przerwania zewnętrzne, wejście countera itp, ale do triaka nadaje się każdy pin. Wystarczy go skonfigurować jako wyjście na początku w programie. Przykład I2c jest np tutaj a także w projekcie zegara nixie no i przede wszystkim w projekcie który zrobiłeś. Wystarczyło by podłaczyć expender równolegle z zegarem do pb1 i pb0

-

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 KrzysiekG10

I2c

To rzeczowa odpowiedź. Oczywiście zegar działa w oparciu o I2c ale jeszcze nie bardzo wiem na jakiej zasadzie działa tu ekspander(nazwa kojarzy mi się raczej z ekspanderami do alarmu Satela). Będę musiał poczytać o tym, a doraźnie zmienię porty B z czuwania na sterowanie triakami.
Pomysł z sufitem też jest OK.

-

Krzysiek

Portret użytkownika mirley

Re: Expender

Mozna to nazwać "rozszerzaczem" portu. Proste działanie. Masz układ którego sterujesz przez I2C. a uzyskujesz 8 pinów wyjściowych. Wysyłasz np liczbę 255 po I2c to wszystkie wyjścia expendera ustawiają się w stan wysoki. Wysyłasz 1 to tylko pierwszy bit ustawia się w stan wysoki a reszta jest w niskim.

Wadą jest to że expender PCF8574A nie ma wyjść w standardzie takim jak AVR. Do masy jest silne zwarcie ale jak jest stan wysoki to podciągany jest stan źródłem prądowym 100uA. Jak zastosujesz sterowanie poprzez zwieranie do masy np optotriaka to nie musisz się tym przejmować.

Duża zaletą jest to że nawet jak procesor się zawiesi i zresetuje to expender trzyma stan wyjść jakie miał przed resetem. Można z niego odczytać ten stan i na nowo zainicjalizowac zmienne w programie. Przydaje się to w wypadkach kiedy choćby nie wiem co się działo z prockiem odbiornik ma działać w stanie jaki ustawił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 KrzysiekG10

I2c-Rolety

Dzisiaj dwie sprawy:
1. Przeglądałem te Twoje strony i I2c owszem jest wykorzystywany ale nie w połączeniu z PCF8574A. Znalazłem w necie schemat z dwoma PCF-ami i rozszerzeniem do 16 wyjść - ale bez oprogramowania, czyli nie bardzo wiem jeszcze jak tym sterować.
2. Wyjścia mają sterować podnoszeniem i opuszczaniem rolet - czyli dwa triaki na roletę. Napisałem w programie, że F1 opuszcza roletę a F2 ją podnosi.
Przycisk "-" zatrzymuje opuszczanie przez zmianę z Tr5=0 na Tr5=1. Wszystko było OK do momentu wstawienia WAIT. Aby zjechała do końca wstawiłem parametr "Wait" następnie zmianę wartości na 1. Niestety to nie działa - "-" nie wymusza stanu 1 w trakcie trwania cyklu.
Problem tkwi w tym, że chciałbym aby po F1 bez ingerencji opuściła się do końca lub po naciśnięciu "-" zatrzymała się w dowolnym miejscu.

-

Krzysiek

Portret użytkownika mirley

Re: Sterownik domowy

1: Chodzi o ogólną ideę nadawania do PCF'a zrób sobie prosty ukłąd tylko z procesorem i PCF, podłacz do pcf'a diody i popróbuj swoich sił w programowaniu. Spróbuj tego do wysyłania danych:

  I2cstart
  I2cwbyte adres 'wyczytany z pdf strona 9 i zalezny od ustwień zworek
  I2cwbyte stan  'stan portu 0-255                                                
  I2cstop

Odczyt będzie podobnie

2. Nie rozumiem tego, co dokładnie i gdzie wstawiłeś, polecenia wait nie wstawiaj bo się nie nadaje do poważnych zastosowań

-

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 KrzysiekG10

Przyciski

1. Spróbuję zrobić jak radzisz model i pobawię się( potrzebuję dokładnie 8 dodatkowych wyjść).
2. Chodzi tu tylko o przyciski wł/wył i stop.
Dopisałem

Case &B10111100:                                   'triak 1     Przycisk "F1"
        '***********************************************************
         Select Case Poz_wysw
       Case 9:                                         'Włączanie Tr5 Opuszczanie rolety
             Ar_tr5 = Not Ar_tr5                            
             Tr5 = Not Tr5
......
Case &B11110100:                                    'decr       Przycisk "-"
        '***********************************************************
          Select Case Poz_wysw
       Case 9:                                         'stop
             Ar_tr5 = 1
             Tr5 = 1

problem tylko jak zrobić aby triak był włączony przez 30 sekund(czas potrzebny na całkowite zamknięcie) i/lub aby można go było wyłączyć w dowolnym momencie

-

Krzysiek

Portret użytkownika mirley

Re: 30 s

W programie musisz dodać zmienną, która policzy ten czas. Co np. 1s sprawdzasz jaki jest stan na triaku i jeśli został uruchommiony to zwiększasz licznik. jeśli licznik dojdzie do 30s to wyłączasz triak i resetujesz wartośc tej zmiennej.

-

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 kza

Witam, właśnie dziś

Witam, właśnie dziś uruchomiłem ten sterownik i mam pytanie który fragment kodu trzeba by zmienić żeby zamiast funkcji termostatu było trzecie wyjście sterowane czasowo.

Portret użytkownika mirley

Re: Sterownik domowy

NIe jest to takie proste. Trzeba zrobić nowe zmienne G i M, zwiększyć rozmiar tablicy o 2. Zamiast menu termostatu wkleić menu odpowiedzialne za kolejny sterownik czasowy z czasami G(5) M(5) i G(6) M(6). W menu sterowania nalezy zmienić pętle for na od 1 do 5 i dopisać ifa dla N=5 żeby sie odpowiedni triak włączył. Jeszcze w obsłudze klawiatury trzeba napisać ustawianie tych G i M dodatkowych

-

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 kza

A mógłbyś mi pomóc w zmianie

A mógłbyś mi pomóc w zmianie tego kodu, nie mam doświadczenia w pisaniu programów a chciałbym w pełni wykorzystać możliwości sterownika

Portret użytkownika mirley

Re: Sterownik domowy

Raczej będzie ciężko z czasem ale mogę coś na sucho bez sprawdzania napisać.... po nowym roku

-

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 kza

W takim razie czekam z

W takim razie czekam z niecierpilością. pozdrawiam

Portret użytkownika andrzej19903

problem z uruchomieniem sterownika

Witam,

mam problem z uruchomieniem owego prostego sterownika domowego wszystko zostało zmontowane zgodnie ze schematem program został wgrany do uP i po włączeniu zasilania po ok 3s włącza się wyświetlacz jego podświetlenie lecz nic na nim nie jest wyświetlane po kilku sekundach zapala się dioda przy trzecim triaku po jakimś czasie gaśnie wyświetlacz a dioda świeci w dalszym ciągu. Prosił bym o pomoc co z tym zrobić aby to zaczęło poprawnie funkcjonować.

Pozdrawiam andrzej19903

Portret użytkownika mirley

Re: Sterownik domowy

A kontrast LCD próbowałeś ustawić..... może dlatego masz wygaszony

-

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 andrzej19903

już działa wystarczyło

już działa wystarczyło ustawić kontrast.

Portret użytkownika andrzej19903

Gdzie się ustawia te

Gdzie się ustawia te fusebity?

Portret użytkownika mirley

Re: Fusebity

A jakim programem programujesz?

-

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 andrzej19903

programy pisze i kompiluje w

programy pisze i kompiluje w bascom avr wersja 1.11.9.8 mam wersje demo, a plik hex do mikroprocesora przesyłam programem avrdude z nakładką graficzną avrdude-GUI