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 Yozue

Pomocy

Witam
Długo szukałem aż wpadłem na ten projekt, właściwie ma on wszystko czego potrzebuję do swojego sterownika, bo myślę, że na linii 1-wire nie będzie problemu podpiąć czujnika wilgotności oraz kostki DS wej/wyj.
Jednak mój problem polega na tym, że nie mam możliwości zrobienia sobie płytki.
I tu moja prośba czy ktoś mógłby mi w tym pomóc ???
Czy można ją gdzieś kupić czy może mi ją ktoś wykonać ??
z góry dziękuję

Portret użytkownika IMEX2

Yozue - PCB

Napisz do mnie - mam wolna PCB wersje na 5 triaków -

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika Pit

Pytanie

Hej, z góry chciałem powiedzieć, że strona i projekty zamieszczane na niej są świetne. W szczególności ten projekt przypadł mi do gustu i planuje sobie go wykonać. Mam jedno pytanie tylko odnośnie podłączania urządzeń do sterownika czasowego. Mam np lampki na choinkę, podłączam je do ARK TR01, a zasilanie sieciowe kablem do ARK 230V?

Portret użytkownika xtreme69

Re: Pytanie

Podłączasz dokładnie tak jak piszesz.

Portret użytkownika Pit

Hej, wiecie może czemu mi

Hej,
wiecie może czemu mi triaki dzialaja w dziwny sposób. Jeżeli ustawie na jakimś prace np od 1:30 do 1:40, a kolejny bedzie wylaczony to i tak ten jeden nie działa mi. Musze ustawić na obydwu przedziały czasowe np na 1 od 12:15 do 12:30, a na 2 od 12:20 do 12:30 to triaki będą obydwa działy od 12:20 do 12:30. Nie jest to chyba wina, że używam BT138-600 zamiast BT138-600E

Portret użytkownika Pit

Przepraszam za post pod

Przepraszam za post pod postem, komentarze mi sie nie odświeżały. Projekt juz działa, miałem bardzo małe zwarcie, którego nie zauważyłem. Wszystko działa.

Portret użytkownika andrzej34

termostat do - 30 st.

Witam, mam wykonany i ładnie pracujące urządzenie jeszcze wersja z jednym termostatem. Obecnie pilnie potrzebuję monitorować stan zamrażarki, sam sobie z zmianami kodu jeszcze poradzę :(
Pozdrawiam.

Portret użytkownika obelix94

komunikacja ds18

ktoś może mi wytłumaczyć w jaki sposób działają termometry? chodzi mi o ich połączenie

-

Zapraszam na gl-art.pl

Portret użytkownika IMEX2

obelix

poczytaj zanim zadasz takie pytanie

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika matiss98

Witam mam takie małe

Witam

mam takie małe pytanie czy mogę uruchomić sterownik bez układu pcf 8583 ??

Portret użytkownika matrix

Re: małe pytanie

matiss98 wrote:
mam takie małe pytanie czy mogę uruchomić sterownik bez układu pcf 8583 ??

Uruchomić możesz tylko najpewniej procesor przy pierwszej próbie komunikacji z pcf'em wywali krzaki na lcd i program się rozłoży.

Portret użytkownika matiss98

no wiec uruchomiłem i cały

no wiec uruchomiłem i cały czasz wyświetla się początkowy napis "sterownik domowy wersja 1.05" i dalej nic nie reaguje i nic się nie wyświetla

Portret użytkownika matrix

Re: małe pytanie

matiss98 wrote:
no wiec uruchomiłem i cały czasz wyświetla się początkowy napis "sterownik domowy wersja 1.05" i dalej nic nie reaguje i nic się nie wyświetla

Wcześniej nie chciało mi się zaglądać do kodu. Ale zdaje się że po wyświetlaniu napisu powitalnego jest za niedługo komunikacja z pcf'em.

Bdajże tu jest pierwsza rozmowa:

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

Portret użytkownika matiss98

Dzieki za odpowiedz

Dzieki za odpowiedz

Portret użytkownika chicken2

Witam, czy muszą być 3

Witam, czy muszą być 3 czujniki podłączone aby pokazywało temp? Zarejestrowałem na kazdym wejsciu DS`a lecz dalej na wyświetlaczu mam -0.00

Portret użytkownika andrzej19903

Witam, złożyłem sobie ten

Witam, złożyłem sobie ten sterownik i mam problem. Chce zarejestrować czujniki temp. wciskam odpowiednią kombinacje przycisków pojawia się napis dla danego czujnika ale nie wyświetla się temperatura. Co może być przyczyną że tak się dzieje?? Dodam że czujniki temp są sprawne bo sprawdziłem je w innym układzie.

Portret użytkownika chicken2

Zarejestrowałeś je

Zarejestrowałeś je pojedynczo? Przy rejestracji moze być tylko 1 czujnik wsadzony. I sprawdz jeszcze czy nie pomyliłeś rezystorów R1 z R14 lub czy R14 dałeś dobrą wartość. Ja niestety miałem taka pomyłke i mialem ten sam problem bo z opisu montowania elementów można sobie pomylić te rezystory.

Portret użytkownika KrzysiekG10

Jasność LCD

Czy istniej możliwość sterowania wyświetlaczem tak aby w stanie "uśpienia" też był podświetlony na 20-30% mocy?

-

Krzysiek

Portret użytkownika gosc - andrzej

ja podświetliłem swój LCD

ja podświetliłem swój LCD przez osobny rezystor, podłączyłem rezystor nastawny i nim zasiliłem podświetlenie w stanie uśpienia, przy zadowalającym poziomie podświetlenia zmierzyłem jego oporność i od strony druku podłączyłem malutki rezystorek i jest ok.ze dwa lata :)
Pozdrawiam.

Portret użytkownika gosc - andrzej

ja podświetliłem swój LCD

ja podświetliłem swój LCD przez osobny rezystor, podłączyłem rezystor nastawny i nim zasiliłem podświetlenie w stanie uśpienia, przy zadowalającym poziomie podświetlenia zmierzyłem jego oporność i od strony druku podłączyłem malutki rezystorek i jest ok.ze dwa lata :)
Pozdrawiam

Portret użytkownika KrzysiekG10

Re: LCD

Dziękuję Ci bardzo. Działa!

-

Krzysiek

Portret użytkownika IMEX2

Podświetlanie LCD

Panowie trzeba zaprzęgnąć PWM-a do podświetlania i zmienic w kodzie zamiast 0 i 1 wstawić odpowiedni parametr dla PWM-a a dla zaawansowanych i wielkość podswietlania w menu

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika kamil18202

Czy mógłby Pan udostępnić

Czy mógłby Pan udostępnić schemat ale w pliku brd ??

Portret użytkownika Lima

Imex2 jak byś mógł to wrzuć

Imex2 jak byś mógł to wrzuć swój schemat w pliku brd i sch poniewarz potrzebuje obsługi szamba i chciałbym się zawzorowac troszkę :)

Portret użytkownika Lima

Udostępni pan ten plik brd i

Udostępni pan ten plik brd i sch???

Portret użytkownika masterczo

Witam. Czy ma znaczenie gdzie

Witam. Czy ma znaczenie gdzie podepnę fazę a gdzie masę przy wejściu zasilania 230V ?

Portret użytkownika mirley

Re: Sterownik

Nie ma znaczenia z punktu widzenia działania ale zawsze podpina się tak żeby zero było na stałe podpięte do odbiornika a faza była podłączona do triaków

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika piotrek-zki

przerobka na mega8

Witam!
Mam pytanko bo chcialbym zrobić ten sterownik ale na atmege8, wiem, że w tej formie sie nie zmieści ale gdyby zostawic tylko 1 Ds-a i wywalic alarmy to pewnie by sie udalo.
Próbowałem sił w tym temacie ale bascom ciągle mi wywala błedy jak pousuwam kawalki kodu odpowiedzialne za dsy i alarmy.domyślam się, że tez trzeba by zmienić częśc odpowiedzialną za odczyt zapis czujnikow.Niestety nadal raczkuje bo czasu mało na naukę.

p.s.
Mirku podpowiesz jak bezboleśnie odchudzić kod :)

pozdrowienia dla Wszystkich użytkowników
Tu można się wiecej dowiedzieć niż na elektrodzie

Piotrek

Portret użytkownika mirley

Re: Sterownik

Próbowałem usunąć cześć kodu ale nie jest to takie proste, szczególnie po takim okresie czasu od jego napisania.... po wywaleniu alarmów i tak się to nie zmieści w M8... brakuje jeszcze 0.5kB..... Polecam zastosowac M16, chyba że są jakieś inne przesłanki za M8 poza kosztem procesora

-

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 piotrek-zki

Dzieki Mirley za odzew

Dzieki Mirley za odzew :)
Musze to koniecznie upchnąc na m8, myślałem aby usunąc Buzz Linia_no,Linia_nc oraz pozostawić tylko 1-ego DS-a to powinno wystaczyc aby upchnać na mniejszego procka.
Jak narazie ciagle sie ucze i jak widze jeszcze daleka droga do pisania dobrych programów jak ten.

Pozdrawiam
Piotrek

p.s.
jesli bedziesz miał chwilke to prosze pomóż

Portret użytkownika IMEX2

zmiana - dodanie flagi

Cześć

Jak pozmieniać żeby flaga była 1ms

pomijam ze potrzebne zmienne początkowe

$crystal = 16000000
Prescale = 256

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

dziękuję

Jeśli nie będzie problemu to może info jak uzyskać drobniej - mikrosekundy - np 100 (10 lub 1 ) us
wiem ze wtedy dla kwarcu 16MHz będzie inny preskaler

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Timer

Wykonanie dzielnika tak aby timer miał przerwanie co 1ms jest niemożliwe przy podzielniku 256 i kwarcu 16MHz. Przerwanie musiało by dzielić co 62,5 co jest niemożliwe. Można natomiast zrobić 400us wstawiając Timer0=231.

Ogólnie wzór jest prosty: Częstotliwość przerwania = Kwarc/preskaler/(256-X), gdzie X to wartość ładowana do timera (Timer0=X)

-

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

Cześć MIrek

Zgodnie ze wzorem dlaczego wstawiasz 5 a nie 6 dla Timer0 ?? (4ms)

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Timer

To jest błąd, powinno być 6... w wiekszoći przypadków nie ma to znaczenia ale jak zalezy nam na liczeniu dokładnym czasu to trzeba o to dbać

-

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

Kalendarz

Sterownik zbudowany na podstawie tego opisu działa poprawnie już od ponad roku.
Ostatnio postanowiłem go rozszerzyć o kalendarz. Zgodnie z Twoim opisem PCF-a dorobiłem brakujące zmienne, ale niestety to nie działa.
Zapisywane poprawnie są dzień i miesiąc na swoich miejscach w "Dzien" i "Miesiac" ale rok i dzień tygodnia mają zawsze wartość "0".
Nawet próba zapisu na sztywno 31 grudnia 1 cz(3)
Dzien = &B01110001
Miesiac = &B01110010
prawidłowo ustawia 31 grudnia ale pozostałe rok i dzień tygodnia mają po zapisie wartość 0.
Czy jakaś inna część programu powinna jeszcze być zmodyfikowana? A może ktoś dorobił sobie taki działający kalendarz?

-

Krzysiek

Portret użytkownika KrzysiekG10

Kalendarz

Ta..ak. Doczytałem w nocie katalogowej - należało wyłączyć maskowanie roku i dnia.

-

Krzysiek

Portret użytkownika przemcio

centralka alarmowa

Witam, przepraszam ze tutaj, ale nie wiem gdzie skierować swoją proźbę.

Bardzo fajny i rozbudowany sterownik domu :).

poszukuję sterownika do czujnika ruchu cyfrowego NC i syreny arkustyczniej (zewnętrznej ).
I moja prośba do autora tego projektu kierowana czy znalazł by Pan troszkę czasu by zaprojektować lub nawet tylko napisać program do atmegi8 by działała jako centralka alarmowa program skromny by obsłużył czujnik ruchu NC po wykryciu ruchu uruchomił syrenę np. na 15min do tego dwa przyciski jeden do wyłączenia/ włączenia centralki a drugi do wcześniejszego wyłączenia alarmu przed upływem 15 min. ja próbowałem coś w tym kierunku pisać ale nic z tego nie wyszło :( a niechciał bym poprostu obciążać kogoś z tłumaczeniem co jest dobrze a co zle ze nie działa dlatego wolę poprosić o napisanie programu w ramach rozrywki do wieczornego piwka :) bardzo był bym wdzięczny . próbowałem coś wyciągnąc z tego listingu polecenia sterowania syreną i portem NC ale program za bogaty i sie gubię :) a praca mi nie pozwala na studiowanie książki bascom od podstaw . a podejrzewam ze taki program to Pan pisze z głowy jak listy miłosne :). Bardzo proszę.

przemcio18-19@o2.pl
gg 9800166

Portret użytkownika kimi9

termostat

Mam zrobiony termostat, który po osiągnięciu pewnej temperatury wyłącza wentylatory. Musiałbym do tego dodać osobny tryb - praca czasowa. Wł wentylatorów na np 3min i później przez godzine przerwa i tak w kółko. Oczywiście czas ten musi być do zmiany. Dużo jest pracy aby do mojego kodu dodać to? I tak naprawdę od czego mam zacząć. Z góry dziękuję za pomoc ;)

Portret użytkownika jatoc

czujniki temperatury + dlugi przewod

Witaj. Mam problem odnosnie czujnikow temperatury, na dlugosci kabla okolo 25m uklad nie wykrywa czujnikow, przewod jaki zastosowalem to skretka nie ekranowana, na mniejszych odleglosciach wszystko dziala dobrze.
Co zrobic by dzialalo na takiej odleglosci?
Z gory dziekuje za pomoc.

Portret użytkownika EDC

Odp. czujniki temperatury + długi przewód

Spróbuj dołożyć kondensator elektrolityczny przy czujniku. Ja telefonicznym kablem czterożyłowym to robiłem i wolnym przewodem steruje jeszcze jednym silnikiem na 12V (a masa wspólna z czujnikami). W momencie włączania silnika zrywało odczyty temperatury. Po wstawieniu kondensatora przy czujniku ustąpiło. To jak z tymi 100nF przy zasilaniu procesora i reszty...są tam nie bez powodu.
Miłego dnia :D

-

BARTek
Moja strona

Portret użytkownika jatoc

Sprobuje... a co zmniejszenie

Sprobuje... a co zmniejszenie r14 pomoglo by cos?

Portret użytkownika jatoc

A zmniejszenie R14 pomoglo by

A zmniejszenie R14 pomoglo by cos?

Portret użytkownika jatoc

czujniki temperatury + dlugi przewod

A co dalo by zmniejszenie R14?

Portret użytkownika EDC

1WIRE - czujnik

Z ciekawości poczytałem. Dallas pisze że najmniejszy może być 1,5kOhm Szyna robi się przez to bardziej prądożerna ale odporniejsza na zakłócenia ale... Bezproblemowo powinna działać na jakimkolwiek kablu do 30metrów, dopiero powyżej rekomenduja użyć skrętki. Smigają dallasy nawet na 100 metrowych.
Druga rzecz która rzuciła się w oczy to konfiguracja 1WIRE w programie. We wszystkich przykładach jest "Config 1Wire = PORTD.7" a nie "PIND.7" (numer nieważny, chodzi o różnice PORT-PIN) Może kompilator to sobie przetwarza i działaja obydwie formy, niemniej w Helpie Bascoma jest PORT.

[edit]

Zapytałem u źródła i obydwie formy konfiguracji sa poprawne. Config PORT jest wersją oficjalną.

-

BARTek
Moja strona

Portret użytkownika gosciu

zmiany w Alarmach

Witam !!
Panie Mirku miałbym taką prośbę proszę mnie oświecić co zmienić w Pana programie aby uzyskać w menu alarmów dodatkową opcję "uzbrajam alarm" i dopiero po określonym czasie alarm został uzbrojony na czuwanie.
Mam nadzieję że opisałem to zrozumiale.
Pozdrawiam i czekam na odpowiedź.

Portret użytkownika EDC

Odp. zmiany w Alarmach

Proszę kolego. Pod tym linkiem jest zmodyfikowany program. W programie była niewykorzystana do niczego zmienna Alarm_licz. W Bascom można po skompilowaniu programu nacisnąć taką ikonkę "kalkulatora" i to wyświetla takie podsumowanie. Na jego samym dole wyświetają się zadeklarowane, a nieużywane zmienne. Przydatne gdy szukamy oszczędności ;)
Wykorzystałem więc tą zmienną (która pewnie miała służyć za licznik alarmów) do odmierzania czasu do uzbrojenia.
Do testów czas został ustalony na 10 sekund. Żeby go zmienić znajdź na początku listingu zapis:

Const Czas_odliczania = 10
i wpisz sobie wartość w sekundach (max 255). Porównaj sobie obydwa kody. Jakby coś było niejasne to mogę coś podpowiedzieć :D

Nie masz tam czasu na wyłączenie alarmu...ale może dasz rade jak porównasz kody :D

Miłego dnia.

-

BARTek
Moja strona

Portret użytkownika gosciu

Odp. zmiany w Alarmach

Witam !!
Do kolegi "EDC" Bartek
Wielkie dzięki Kolego , nawet nie wiesz jak mi pomogłeś !!
resztę programu miałem napisaną wraz z czesem na wejście (czas na wyłączenie Alarmu) i rozgraniczeniem lini opóźnionej i natychmiastowej, brakowało mi tylko "uzbrajania Alarmu."
Jestem Ci bardzo wdzięczny , wreszcie mogę ten projekt zamknąć.
Mam dług wdzieczności.
Pozdrawiam serdecznie , Miłego dnia.

Marek

Portret użytkownika radom20

Brak reakcji

Witam.
Na moim sterowniku po podłączeniu wyświetla tylko "Sterownik Domowy Wersja 1.05" i jest brak jakiejkolwiek reakcji na przyciski.
Czujniki temp można poprawnie zalogować i nic więcej.
Zwarcia i połączenia sprawdzałem.

Problem rozwiązałem wgrywając program z jednym termostatem.

Portret użytkownika Pinky

Wykonanie płytki

Witam
Czy mógłby ktoś odpłatnie wykonać taką płytkę?

Pozdrawiam wszystkich

Portret użytkownika asimo

Mirku ... czy masz czas i

Mirku ... czy masz czas i jesteś w stanie powiedzieć co w jakich sekcjach trzeba zmienić/dodać by "dobudować" do sterownika dodatkowe sterowanie triaków Tr4 i Tr5 na takiej samej zasadzie jak Tr2 i Tr3??
Pozdrawiam
Robert