Prosty Sterownik Domowy


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

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



Działanie:

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

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

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

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

Budowa:

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

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

Wykaz Elementów:

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

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

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

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

Programowanie:

Kod Źródłowy do sterownika został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

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

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

Zdjęcia Projektu:

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



Portret użytkownika mirley

Re: Sterownik Domowy

W programie mogą występować problemy bo wersja na której pisałem była dostosowana do płytki testowej potem tylko wkleiłem fragment z konfiguracja ze starego programu. O klawiaturze sobie zapomniałem bo na płytce testowej inne piny były wykorzystywane.

Jak będę dopisywał dalszą część programu to zmienię konfigurację pinów od razu na takie jak powinny być i w takiej wersji będę testował. Co do temperatury to po zaprogramowaniu nową wersją eeprom procesora się skasował i trzeba na nowo zarejestrować czujniki temperatury według opisu o którym już mówiliśmy. Aby tego w przyszłości uniknąć można sobie zgrać do pliku epp pamięć eeprom i po zaprogramowaniu flash wgrać tez eeprom. Ogólnie mówiąc dopiszę to jak znajdę troszkę czasu

Co do tego sterowania czujnikiem w szambie to nie będzie problemu, drugi procesor będzie badał poziom i komunikacja między procesorami będzie po rs232 bez najmniejszego problemu. Wystarczy w jednym procesorze napisać "printbin zmienna" a w drugim odebrać bajt z wartością poziomu i wyświetlić go. To nie będzie żaden problem o ile wiesz jak zmierzyć poziom w zbiorniku. Komunikacja będzie odbywała się za pomocą pinów RXD i TXD procesora porty D0 i D1

-

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

Szambo

OK kod w wersji v1,03 i V1,05 różnia się sporo poza tym że dodałeś odczyt portów

poprawiłem kod i nazwałem go V1,06 Mirley & Greg :)

>>Tutaj wklej link do pliku umieszczonego na jakimś serwisie, kod źródłowy zajmuje za dużo miejsca i wystarczy że jest juz raz w treści opisu

więc możesz sie tym posugerować

Myślę że te ikonki są nie potrzebne, i może pozostać tak jak jest obecnie tylko trzeba dodać szynę beep do pipania i szynę do alarmu - sugeruję przekaźnik - ja tak u siebie zrobiłem PK załancza syrenę więc potrzeba szyny na beeper aktywny

jesli chodzi o szambo to czujniki to

myslę ilość zgodna z ilościa kratek na LCD ale może coś do ustawienia w peogramie ile tych kratek ma sie pokazywać
Ja chce zastosować 10-16 czujników - zależy jak podziele czy na 10 części czy na ilość metrów sześciennych cieczy

będą załanczać te czujniki po kolei masę na porty w czasie żeczywistym

może jeśli dasz rade to w menu jak będzie full na zbiorniku i załączy się ostatni czujnik " nazwijmy awaryjny" to niech wyświetla informację " Zamow Transport " na zmiane z nr tel "dzwon 0700123456" czy jakos tak.

pozdrawiam

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Sterownik Domowy

Jedyną zmianę jaka trzeba było zrobić w programie to połączyć kod w pierwszej wersji z kodem który ostatnio dodałem. Poza wklejeniem pierwszej części programu trzeba było tylko zmienić procedurę przyciski a dokładniej linijki " Case &B11111000: " na takie wartości jak w pierwszej wersji. Jeśli siądę do dopisania dalszej części to i tak sam to pozmieniam żeby być pewnym że wszystko jest jak ma być.

Co do podpisów ikonek i tych rzeczy to jeszcze zobaczę, podpis na panelu przednim będę miał taki jak wcześniej tylko z nowszą wersją, jak chcesz to możesz sobie pozmieniać napisy ale w twojej wersji programu. Co do tego szamba to zrobię to tak że będę wyświetlał wartość jaka przyjdzie po rs232, powiedzmy w zakresie 0-255, twój drugi procesor pomiarowy ma odczytać czujniki i wysłać po rs232 wartośc w takim przedziale (przedział liczbowy sie ustali) gdzie 1 to min a 255 max. W jaki sposób to przedstawię na wyświetlaczu to już jest dodatkowe zmatrwienie.

Ps. Narazie nie dopisuj nic do programu, dopóki nie dokończę kodu... straszny się bajzel w tym robi i nigdy nie dojdę gdzie mam najnowszą wersję. Wszystkie wersje dokończone które napiszę, umieszczę na stronie.

-

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 wiechu65

Wykonałem pana sterownik jest

Wykonałem pana sterownik jest ok.
Ale mam taką prośbę, czy dała sie ustawić mniejszą histerezę nap 0,1 st ewentualnie
proszę wskazać w progranie w którym miejscu można to zrobić

Portret użytkownika mirley

Re: Sterownik Domowy

TO akurat nie jest problemem aby dać możliwość ustawienia od 0.1 stopnia. Wystarczy zmienić w linijce:

If T_his > 5 Then Decr T_his

zamienić: T_his > 5 na T_his > 1 a na początku programu w linijce:

If T_his > 100 Or T_his < 5 Then T_his = 20

zamienić: T_his < 5 na T_his < 1

1 oznacza właśnie 0.1 stopnia i w tym sterowniku nie da się dać mniej. Skorzystaj z wyszukiwania aby znaleźć te linijki w kodzie o których mówiłem. Po tych modyfikacjach menu powinno pozwolić ustawić do min 0.1 stopnia

-

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

takie mam wskazania temperatury

jak w tytule i są one poprawne

a i takie jest moje menu sterownika

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika wiechu65

Dzięki za odpowiedz. jak

Dzięki za odpowiedz.
jak znajdę chwilę czasu to przetestuję

Portret użytkownika danioo

jak ustawić

Pnie Mirku proszę o jakieś instrukcje jak mam ustawić żeby mi zadziałała druga lampa.
Dodam że jedną z nich udaje mi się załączać a druga za chiny nie zadziała

Portret użytkownika IMEX2

T1 i T2 - danioo

Jeśli chodzi o czasy to naciskasz tylko set i przechodzisz dalej - natomiast jeśli jesteś w menu ustawień tych 2 triaków to naciskasz sw T1 i sw T2 - wł/wył się jeden lub drugi triak i to cala filozofia - niema nic do ustawiania w programie tych dwóch triaków i kropka

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika danioo

Z tym że ja właśnie tak

Z tym że ja właśnie tak robię.

u mnie jeden triak działa a drugi wogule nie daje się sterować.

Udaje mi się sterować z czsu w dolnej linijce wyświetlacza

Portret użytkownika IMEX2

napisz program dla sprawdzenia

napisz program dla sprawdzenia przyciskow - ale zaraz czy ja tak nie mialem - trzeba na procku JTAG wylaczyc na portach bo cos nie dzialalo - przeczytaj posty moje na calosci

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika IMEX2

bardzo prosze gotowca - danioo :-)

wiec trzeba czytac - poprostu

moje posty i rozwiazanie problemu
Nie działa mi tr1 czyli linia 1 - ani automatyczne ani ręczne - nie pokazuje się stan niski na C2 pin24 - C1 pin 23 dziala ręcznie F2 i automatycznie (mało tych funkcji do zaprogramowania) temp. działa poprawnie

Nie działa mi buz. pin C5 - po zał sie alarmu nie zmienia sie stan wyjścia - jest cały czas stan wysoki hmm - jakies pomysły - bo w menu alarm dziala poprawnie zwierny i rozwierny cichy i glośny wstawia godzine

rozwiązanie problemu w następnym poście
Wystarczyło poczytać note katalogowa Atmega16 - oryginalnie w nowym procku piny C2 do C5 są nieaktywne a działają na JTAG - przełączyłem na we/wy i śmiga

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika danioo

Czyli kolego mam rozumieć że

Czyli kolego mam rozumieć że podczas programowania mam we "fusach" wyjączyć JTAGA ??

Portret użytkownika IMEX2

tak

tak wył - zalezy jakim programem czasami trzeba odznaczyc a czasami zaznaczyc - odczytaj procek fusebity i zrób odwrotnosc na jtag i po zsprawie

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika danioo

Na wszelki wypadek dla mniej

Na wszelki wypadek dla mniej doświadczonych zamieszczam ustawienia "fusów" z wyłączonym JTAG-iem
LOW=0x7F
HIGH=0xD9

Portret użytkownika Kamil

Witam Mam 2 pytania. 1 - Czy

Witam
Mam 2 pytania.
1 - Czy można użyć innych warystorów niż w projekcie?
2 - Gdybym chciał zamiast BUZ1podłączyć syrenę, a te z kolei pracują od 6V, co musiałbym w projekcie zmienić?

-

Są ludzie i parapety, ale żeby klamką się urodzić to jest sztuka.

Portret użytkownika IMEX2

KAMIL

kamil - warystory pomiń - a w miejsce bepera daj przekaźnik 5 Volt - i problem rozwiązany
jesli niemasz tekiego PK to daj znać mam tego sporo

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Warystor

Warystor nie jest konieczny ale możesz dać dowolny na 230VAC. Co do sterowania syreną to lepszym elementem jest tranzystor mosfet, np buz11 lub podobny. Przekaźnik i tak będzie potrzebował tranzystora i diody zabezpieczającej

-

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 Kamil

Czyli, że ten tranzystor

Czyli, że ten tranzystor mosfet (BUZ11) mam dać zamiast T2?

-

Są ludzie i parapety, ale żeby klamką się urodzić to jest sztuka.

Portret użytkownika mirley

Re: Tranzystor

W tym przypadku najprościej jest wylutować buzzer i do kolektora T2 podłaczyc bramkę BUZ11 (może być przez rezystor 10k), źródło BUZZ11 do masy, a między dren i +6V syrena. Można by było zrobić z pominięciem T2 ale trzeba modyfikować program, więc szkoda zachodu, szczególnie że BUZZ11 jest duży i tak się na płytce nie zmieści

-

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

Portret użytkownika gosc

Złożyłem Pana sterownik.

Złożyłem Pana sterownik. Układ ale przede wszystkim program REWELACJA!!!

Chciałbym kiedyś pisać takie programy.

Pozdrawiam serdecznie Mariusz

Portret użytkownika mormi

czy to normalne

Złożyłem sterownik wgrałem hexa na wyświetlaczu pokazuje mi sie STEROWNIK DOMOWY WERSJA 1.05
potem AKTUALNY CZAS same zera cały czas tak stoi w miejscu bo niepodpiołem PCF8583 ponieważ jeszcze go niemam.
Niedziała mi klawiatura nic niereaguje czy to tak ma być??dopuki niewsadze układu czy coś jest nie tak..

Portret użytkownika mirley

Re: Klawiatura

Klawiatura powinna działać, popatrz czy nie masz zwarcia któregoś z przycisków do masy, lub zwarcia między przyciskami. Ewentualnie przytrzymaj dłużej którys klawisz i zobacz czy jest jakakolwiek reakcja

-

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 mormi

żadnej reakcji na przyciski a

żadnej reakcji na przyciski a zwarć niema żadnych inne atmegi tak samo się działajom może coś z tym wsadem co IMEX wrzócił na stronke??

Portret użytkownika IMEX2

mormi

moj wsad działa na 100%

masz hex czy bin jak cos pisz na GG jestem jeszcze - wlasnie zakończylem pisać sterownik na 4xDS wł/wył i alarm na ust temp

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika Kamil

Czy mógłbym prosić o

Czy mógłbym prosić o dopisanie do programu funkcji budzika. Czy jest możliwa również funkcja "wygaszacza"? Chodzi mi o to, żeby układ jak nie jest używany wyświetlał w negatywie aktualną datę i godzinę, a co minutę miałaby się wyświetlać temperatura na dworze i w domu.

P.S. Jakich tranzystorów SMD można użyć zamiast BC556?

-

Są ludzie i parapety, ale żeby klamką się urodzić to jest sztuka.

Portret użytkownika mirley

Re: Sterownik

Budzik to jeszcze może by dało rady zrealizować ale negację wyświetlacza to nie mam pojęcia jak prosto zrobić... Tak czy innaczej narazie nic nie będę dopisywał do układu. I tak miałem zrobić juz obsługę rs232 do odbioru danych z drugiego procesora i nie mam kiedy tego wykonać.... może w przyszłości

Tranzystory BC856; BC857; BC858 lub dowolne inne PNP

-

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

Sprawa klawiatury

Wiec tak doszedłem dlaczego niektórym niedziała

Powód Brak rezystorów podciągających 3,3K do 5V R15 i R16

właśnie sam mialem teraz ten problem - odpaliłem to wszystko na nowej płycie testowej mirka
i właśnie miałem problem z klawiaturą i szukałem problemu co i dlaczego

pozdrawiam

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Sterownik C.O

Klawiatura nie może mieć nic do rezystorów R15 i R16 bo one wpływają na działanie RTC, bez nich nie pójdzie komunikacja I2C

-

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

klawiatura dotyczyła MORMI - niedzialaja klawisze

żadnej reakcji na przyciski a zwarć niema żadnych inne atmegi tak samo się działajom może coś z tym wsadem co IMEX wrzócił na stronke??

ten problem ginie jesli zainstalujemy rezystory - nie pokazuje wtedy zer 00:00:00 tylko 165:165:165 i migają kropki i klawisze zaczynaja dzialac

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika IMEX2

DS3 termo histereza

Mirku - Jak przerobić część temp - tak żeby tam podana histereza dzialała jako zakres załączonego triaka

Czyli ustawiam 25oC - i histereza +-/2oC - i teraz ma działać to od 23 do 27 oC

Obecnie jest tak ża załącza sie na 23 i poniżej a wył na 27 i wyżej

pozdrawiam serdecznie

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

OK po bardzo wielu próbach zastosowania matematyki udalo mi sie to rozwiązać a wygląda to tak

   'termostat
 
  If Term_ena = 1 Then
     Hword(1) = T_ust + T_his                                    'max
     Hword(2) = T_ust - T_his                                    'min
     If T(3) > Hword(1) Then Tr_term = 1                         'poza max zakresen histerezy
     If T(3) <= Hword(1) Or Hword(2) => T(3) Then Tr_term = 0    'w zakresie histerezy
     If T(3) < Hword(2) Then Tr_term = 1                         ' ponizej min histerezy
 End If

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika mirley

Re: Termostat histereza

Warunek który napisałeś:

 If T(3) <= Hword(1) Or Hword(2) => T(3) Then Tr_term = 0    'w zakresie histerezy

Nie jest poprawny, zawsze zwraca 0 na triaku gdy temperatura mniejsza od max lub gdy mniejsza od min. Przypadkiem to dobrze działa bo linijkę niżej jest drugi warunek. Triak jest na chwile właczany po czym odrazu rozwierany na czas jedego cyklu zegarowego. Warunek powinien być:

 If T(3) <= Hword(1) And T(3) >= Hword(2) Then Tr_term = 0    'w zakresie histerezy

Tym sposobem triak się właczy gdy temperatura jest mniejsza od max i (a nie lub) gdy jest większa od min

-

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 Kamil

No dobra, może trochę

No dobra, może trochę przesadziłem z tym "wygaszaczem" :D

Czy dałoby się zamiast, podczas wyświetlania godziny, linijki "Aktualny Czas" wyświetlić aktualną datę??

-

Są ludzie i parapety, ale żeby klamką się urodzić to jest sztuka.

Portret użytkownika mirley

Re: Sterownik domowy

Dzień i miesiąc raczej da się wyświetlić, co do roku to trzeba napisać jakąś procedurkę bo tylko 4 lata pamięta ten układ RTC który jest zastosowany. Dodatkowo trzeba też napisać menu więc trochę pracy jest

-

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

Portret użytkownika gosc

Re: Sterownik C.O.

Mam takie laickie pytanie: czym rożni się zakończenie Vcc od '+5V'? Tak samo pin Reset-jest z czymś dalej połączony?
Pozdrawiam

Portret użytkownika mirley

Re: Sterownik C.O

+5V to nazwa ścieżki na schemacie a VCC to goldpin do którego można podłączyć +5V. Reset wyprowadzony jest tylko na ten pin Rst i tyle

-

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

Portret użytkownika gosc

Wyrazy uznania dla autora

Wyrazy uznania dla autora strony za KAWAŁ DOBREJ ROBOTY .
AVR-ami "bawię" się (z braku czasu) z doskoku.Uruchomiłem Uniwersalną Płytkę Testową dla AVR. Do AVRDunde jakoś zabrakło mi cierpliwości ale zobaczyłem że BASCOM AVR w wersji 1.11.9.8 obsłguje (hura!)programator USBasp. Wygląda że to działa z programatorem na płycie testowej tzn. odczytuje sygnaturę układu(tylko w trybie Slow SCK -ciekawe dlaczego ?) i zawartość AVR-a (zastanawiam się czemu programator nie ma wyprowadzonej zworki Self Programming i co ona daje,ale to chyba nie miejsce na pytania odnośnie płyty testowej).Właśnie chciałbym zobaczyć jak działa powyższy sterownik ale boję się coś pokręcić w ustawieniach fusebitów przy programowaniu bo okno dialogowe wygląda trochę inaczej niż w opisie konstrukcji.Pozdrawiam

Portret użytkownika mirley

Re: Sterownik Domowy

Zrzut w opisie z ustawieniami fusebitów pochodzi z programu Burn-o-Mat a nie z bascoma, dlatego się różni

-

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

Portret użytkownika gosc

Dziękuję za odpowiedź.

Dziękuję za odpowiedź.
To że zrzut pochodzi z Burn-o-Mat a to się domyśliłem.
W niektórych projektach podawane są zrzuty również z Bascoma . Myślę że to dobra praktyka a co dobre to powinno się powielać . Takim przedszkolakom jak ja ułatwiło by to życie . Tym nie mniej mój problem dalej się nie rozwiązał bo nie wiem jak ustawić fusebity w Bascomie . Nawiasem mówiąc gdy się pisze w Bascomie to wygodnie by było również Bascomem programować ( chyba że coś z nim jest nie tak )
Pozdrawiam

Portret użytkownika mirley

Re: Sterownik

Bascomem sie programuje jeśli masz programator który go bezpośrednio obsługuje. Ja używam obecnie programatora USBASP i wersji bascoma którą posiadam nie obsługuje bezpośrednio tego programatora. Takie ładne okienko z fusebitami jest tylko jak używasz STK200 lub zwykłego kabla na LPT (dlatego w nowszych projektach nie ma zrzutów z bascoma dla fusebitów). Poza tym wygodniej ustawia się fusebity jeśli masz dostęp do każdego bitu.

Zamieść na jakim serewisie zrzut z twoich ustawień fusebitów w bascomie to zamieszczę informację jak to ustawić na podstawie twojego zrzutu z ekranu

-

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

Portret użytkownika andrzej34

sterownik

Witam, zrobiłem to urządzenie i mam małe problemy: w momencie wciśnięcia przycisku podświetla się wyświetlacz lekko migoczącym światłem, nie uruchamia się dioda triaka "D3", nigdy nie słyszałem buzzerka i nie mogę wyłączyć zaznaczenia przy programowaniu "JTAGEN" - reszta chyba ok. Jak dalej to pociągnąć?

Portret użytkownika mirley

Re: Sterownik domowy

Bit JTAGEN musi byc odznaczony do poprawnej pracy układu. W burn-o-mat trzeba zmienić tryb pracy na expert (u góry w okienku fusebitów mode:normal, mode:expert czy jakoś podobnie) i wtedy wszystkie bity będą możliwe do kliknięcia

-

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

Portret użytkownika andrzej34

sterownik

Witam, to zadziałało :), pozostał lekko chrypliwy głos buzzerka i migoczące podświetlanie wyświetlacza - reszta chyba ok.
Pozdrawiam.

Portret użytkownika andrzej34

sterownik

Witam, chrypliwy głos buzzerka i migoczące podświetlenie to przeszłość :), wymiana zasilacza była strzałem w "10", ciekawe bo stara nokia na nim chodziła a inny zasilacz daje tylko o 0,6 V więcej a jest ok.
Pozdrawiam.

Portret użytkownika Kamil

A czy zastosowanie ATmegi w

A czy zastosowanie ATmegi w obudowie TQFP nic nie wniesie?

-

Są ludzie i parapety, ale żeby klamką się urodzić to jest sztuka.

Portret użytkownika piotr 20

Czujnik podczerwieni

Witam
Ciekawy pomysł. Mam pytanie, czy jest możliwość zastosowania czujników podczerwieni w tym układzie, których zadaniem było zliczanie osób w pomieszczeniu i załączenie światła, a po wyjściu ostatniej osoby wyłączenie.
Pozdrawiam

Portret użytkownika mirley

Re: Sterownik Domowy

Zastosowanie ATMEGI w dowolnej obudowie nic nie zmieni, poza zrobieniem nowej płytki.

Z czujnikami podczerwieni będzie o tyle problem że nigdy nic takiego nie stosowałem do liczenia osób w pokoju więc wymagało by to trochę pracy, głównie sprzętowej... z zaprogramowaniem nie powinno być problemu jeśli się ma na to czas

-

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

Portret użytkownika andrzej34

sterownik domowy

Witam, czy dużo zachodu będzie by termostat tego sterownika można ustawić w okolicy +2 stopni, układ miał by "pilnować" małego pomieszczenia w okresie zimy gdzie jest hydrofor?
Pozdrawiam.

Portret użytkownika mirley

Re: Sterownik

W obsłudze przycisków trzeba zmienić wartości w których można to ustawić:

 Case 4:
              Select Case Poz_ust
                Case 0:
                  Term_ena = Not Term_ena
                  If Term_ena = 0 Then Tr_term = 1
                Case 1:
                  If T_ust > 10 Then T_ust = T_ust - 10    '<<<<<<<<<<<<<< Zmiana w tej linii żeby do 1 stopnia ustawienie zeszło
                Case 2:
                  If T_his > 5 Then Decr T_his
              End Select
              Autosave = 0

I jeszcze na początku żeby nie było problemów

If T_ust > 1000 Or T_ust < 10 Then T_ust = 450

To powinno zadziałać, przynajmniej tak mi się wydaje

-

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 Michał

Problem z zaprogramowaniem ATMEGI 16

macie jakiś ciekawy programator do atmega 16 bo ja mam z allegro pod USB i nie chce mi działać :(