(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) 5x 3,3k 2x 22pF 1x Rezonator Kwarcowy 16MHz 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:
|
|||||||||||||||||||||||||||||||
Podświetlenie
Witam.
Zacząłem też robić ten sterownik. Mam problem z podświetlaniem. Nie jestem tak biegły w bascomie żeby to znaleźć. Która linijka kodu odpowiada za podświetlenie wyświetlacza w chwili naciśnięcia przycisku? Bo u mnie działa to w taki sposób, że pali się cały czas a jak coś nacisnę to podświetlenie gaśnie. :/
Re: Podsw
Nie ma to prawa działać na odwrót, chyba że masz tranzystor NPN i podłączyłeś od strony masy, wtedy zamień miejscami wartości 0 i 1 przy LCD_light
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
O dziękuje. Już działa.
O dziękuje. Już działa.
Wyświetlanie wyników w internecie
Witam. Świetny projekt aczkolwiek byłoby ciekawie gdyby wyniki pracy sterownika można było oglądać w internecie. Ma Pan może jakiś pomysł jak to zrobić w miarę łatwy sposób?
Na to nie ma za bardzo
Na to nie ma za bardzo łatwego sposobu, no chyba że laptop i po rsie wysyłać a na kompie zrobić serwer.
DS 1307
Witam czy zaniast PCF8583 będzie działał DS1307 ,czy coś trzeba będzie pozmieniać w programie ?
Re: PCF
Nie pamiętam dokładnie ale chyba układy mają inny układ rejestrów. Trzeba przestudiować kartę katalogowa i porównać oba układy
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Pobór prądu
Chciałbym się dowiedzieć ile prądu max. pobiera układzik?
Re: Prąd
Oczywiście dokładnego poboru prądu nie mierzyłem..... ale z oglądu schematu to będzie 200mA max. Zależy wszystko od tego czy podswietlanie LCD jest właczone i czy triaki pracują itp.
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Aktualny czas
Układzik zmontowany, ale jest jeden problem. W miejscu gdzie wyświetla się aktualny czas jest godzina 165:165:165, nie mogę tego przestawić w żaden sposób i nie wiem co jest tego powodem.
Doszedłem co było nie tak. Brakowało mi ścieżki zasilającej układzik U2
Mam jeszcze jedno pytanie. Chce napisać w bascomie wyraz garaż zamiast dom, ale jak napisać ,,ż,,?
Ż
Wstaw to na poczatek a potem w wyrazie zamiast "Ż" wstaw ; Chr(7) ;
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Alarm - do Mirka
Cześć Mirku
zdemontowałem wcześniej zamontowany sterownik zainstalowany w domku.
Ale znalazłem kolejny błąd. A mianowicie dotyczy tym razem Alarmu
Urządzenie działa - alarm wł - aktywuję alarm - pokazuje sie godzina i po czasie (jak dział beeper) zanika zasilanie -
sterownik nie pamięta aktywacji
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Litera "ó"
Zmieniłem tak jak Pan napisał, ale jest coś nie tak bo zamiast litery "ó" w wyrazie dwór jest jakiś znak.
Re: Znak "ż"
Linijkę która proponuje IMEX2 wstaw w miejsce:
Zmiana w tym fragmencie powinna pomóc, ale trzeba to wytestowac bo już dawno temu to pisałem:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dopisałem Deflcdchar
Dopisałem Deflcdchar 3,2,32,15,1,6,8,15,32 i teraz wyszystko jest ok, ale również dopisałem Writeeeprom i musze napisać że również działa.
Podziękowania dla kolegi mirleya
brak odczytu z DS18B20
Witam, wykonałem taki sterowniczek jakiś czas temu i pilnuje on obecnie pompy wody przed zamarznięciem na działeczce, wykonałem następny i mam problem bo niema odczytów z termometrów. Przy rejestracji wydaje się ,że jest ok. a wskazania -0,0 st.. Posługuję się kilkoma termometrami i to samo, a mam jeszcze dwa które chodziły na poprzednim sterowniku. Procesor był zaprogramowany jeszcze przy okazji pierwszego sterownika i działał poprawnie, przy niepowodzeniu jakie mnie dopadło z drugim sterownikiem przeprogramowałem procesor i też nic. Pokazują się napisy "DS1" itp. przy rejestracji i nic więcej, przy braku termometru taki napis też się pokazuje. wyjście z termometru pocynowałem aż do procesora i nic.
Jakieś sugestie?
Pozdrawiam.
brak odczytu z DS18B20
Mam!- mój błąd, R-1 i R-14 można łatwo pomylić zerkając na "podgląd montażu", ja tak zrobiłem :(, teraz jest ok. nic nie "uwaliłem" :).
Pozdrawiam.
zmiana wyboru ds-ów
Mirku które dane trzeba pobierać żeby w menu wstawić sobie zmianę DS-ów do poszczególnych odczytów. Chcę wstawić odczyt automatyczny wszystkich podłączonych czujników (i tu niema problemu) tylko zostaną one zapisane nie tak jak trzeba.
własnie jak jest zapisywany ID DS-a i tu nie doszedłem
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Re: Temperatury
Wystarczy że odczytane temperatury przypiszesz do moich zmiennych T(1), T(2) i T(3), więc w programie np automatycznie masz rozpoznawane czujniki i czytasz temperatury A, B, C. W menu napiszesz która tempratura przypisuje się zawsze do której z T(n).
Nie wiem jak się ds'y odczytują, wygląda na to że to trochę losowa sprawa, znaczy po wymianie czujnika na inny trudno stwierdzic na którym miejscu się zapisze
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
niestety nie działa
Witam
Zmontowałem sterownik niestety jak zwykle nie działa a z racji, że nie jestem elektronikiem nie umie sobie z tym dać rady. W związku z tym mam pytanie, jak powinien zachować się ten układ po uruchomieniu.
U mnie na wyświetlaczu świeci tylko pierwsza linia wyświetlacza i wyświetla same kwadraty nie ma nawet podświetlenia. Układ reaguje tylko na przycisk F2 i zaświeca się środkowa dioda dwie pozostałe świeca cały czas. Może macie jakieś sugestie zależy mi na tym układzie miał służyć jako sterownik w wędzarni a zdaje mi się, że wyląduje gdzieś w kącie.
Re: Sterownik domowy
Spróbuj regulacji kontrastu za pomocą potencjometru. Jeśli wgrałeś program poprawnie i ustawiłeś fusy to do pierwszego uruchomienia nie trzeba nic więcej. Sprawdź czy na pewno jest połączenie od LCD do procka
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Re: niestety nie działa
Masz źle podłączony lcd, bo nie został poprawnie zainicjowany. Sprawdź podłączenie lcd.
Moja strona w powijakach
Witam ponownie wyświetlacz
Witam ponownie wyświetlacz jest poprawnie podpięty na piny 1 2 przychodzi napięcie 5.025V pin 2 to + a reszta pinów jest po kolei oprócz pinów, 7 8 9 10 bo nie są podpięte.
Podpiąłem drugi wyświetlacz i dalej to samo procer jeszcze raz sprawdzony i też OK.
Sterownik
Sterownik działa poprostu wgrałem hex z elektrody od IMEX i niestety na nim nie ruszył.
Zrobić ten projekt i jesteśmy
Zrobić ten projekt i jesteśmy pewne funkcje mogą nie działać delajo.Ne podświetlenia ekranu LCD i nie uznaję DS18B20 gdzie byłby problem.
Ervin Slovenia
Re: Sterownik Domowy
Czujniki trzeba zarejestrować żeby działały. Wkładasz czujniki po kolei i włączasz zasilanie. Za każdym razem trzymając inną kombinację przycisków przed włączeniem zasilania (UP+MENu+F2, DOWN+MENU+F2, SET+MENU+F2) jednocześnie może być tylko jeden czujnik włożony podczas rejestracji. Po rejestracji wkłada się do układu 3 czujniki.
Na LCD tylko podświetlanie nie działa czy w ogóle nie pokazuje znaków
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dziękujemy za pomoc DS18B20
Dziękujemy za pomoc DS18B20 pracy, to nie działa, a my pracujemy normalnie lcd.Znaki oświetlenie
Re: Sterownik
Może tranzystor T1 jest uszkodzony albo źle wlutowany. Może LCD nie ma podświetlania? albo wyprowadzenia podświetlania są zamienione miejscami
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Wymieniłem już parę T1
Wymieniłem już parę T1 Sprawdziłem wiele stawów ale nadal nie działa oświetlenie .
Re: LCD
Może twój LCD ma zamienione nóżki podświetlania. Zdarzają się takie wersje. Masz kartę katalogową albo dokładny numer swojego LCD?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
ftp://www.ozdisan.com/KOMPONE
ftp://www.ozdisan.com/KOMPONENT_KLASORU/WINSTAR_CD_V.2.0/Winstar%20Karakter%20LCD_DATA/WH1602B-TMI-ET%23.pdf
Re: LCD
Wyprowadzenia są takie jak u mnie. Próbowałeś zewrzeć kolektor tranzystora T1 do +5V? Może rezystor ograniczający prąd jest zły?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Teraz działa podświetlenie
Teraz działa podświetlenie LCD Zamieszczam nowe ATmega16 i jest zaprogramowany coś jest oczywiście błędne z procesorem
dzięki za pomoc
Allegro
Czy za pomocą np. allegro można sprzedawać układy i programy z Twojej strony??
Przecież programy są Twojego autorstwa, można go wykorzystywać, ale czy sprzedawać??
Rzućcie okiem na link
http://allegro.pl/testowa-mega32-termometr-zegarek-czasowka-alarm-i1486179385.html
Max
Re: sterownik domowy
Jasne że nie można sprzedawać. Projekty tutaj zamieszczone są wynikiem mojej pracy, udostępniam je użytkownikom mojej strony na własny użytek. Dziękuje za informacje
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Sprostowanie - ALLEGRO sterownik
Witam serdecznie
Sprzedaję ten sterownik na allegro bo jest mi poprostu zbędny - jeśli jest ktoś zainteresowany proszę dać znać.
Nie Handluje - służyło mi to przez około 1 rok. Mam kilka podobnych projektów sterowników.
Opracowałem własny rozbudowany projekt sterownika domowego na Atmega 128
Brak na Fotce jeszcze LCD 4x20 Big Znaki -
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Prosty sterownik
Witam
Mam pytanie do wykonawcy tego projektu, czy trudno jest zmodyfikować program pod atmege 8 tyle że tylko z opcją zegarka i wyłącznikiem czasowym takim żeby 2 razy dziennie, albo nawet i 3 razy się wł. i wył.?
Re: Program
O tyle trudno że mało pamiętam z programu i musiał bym go całego analizować. Zdecydowanie prościej będzie napisać ci to samemu prawie od nowa, bazując na tym co jest zrobione. Musisz wywalić część programu odpowiedzialną za temperaturę i zrozumieć działanie całości. Ze względu na brak czasu mogę pomóc w zrozumieniu tylko konkretnych bloków programu
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Sterowanie czasowe zmiana z 2 na 4 - problem
Więc tak Mirku
Zmieniłem sterowanie z 2 na 4 czasy i mam problem ze sterowaniem
Zmianę wykonałem w przyciskach wykonałem - wszystko działa OK
zapis do pamięci i odczyt działa OK
Ale mam problem z tym sterowaniem - nadmienię że ma dotyczyć jednego triaka
U siebie pozmieniałem literki ale wszystko pozostaje w kodzie tak samo prawie
zmienione N na R i M(minuty) na S - miałem takie potrzeby w kodzie
Nadmienię że sterowanie jednym triakiem i 2 czasy było OK ale z 4 lub więcej mam problem
Jak widzę nie tylko mnie ta sprawa interesuje wiec mile widziane konkrety :)
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Re: Sterownik domowy
Jeśli jest For R = 1 To 5 Step 2 to R przyjmuje wartości 1, 3 i 5, więc z twoich 4 ifów 2 się nigdy nie wykonują
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Sterowanie czasowe zmiana z 2 na 4 - problem
hmm, oczywiście zmieniałem wartość if-ów ale niewiele mi to dało
A jak to działa w twoim kodzie - masz 2 odczyty w w jednym przebiegu kodu - włącz i wyłącz
Więc czy u mnie dobrym rozwiązaniem będzie dopisanie kolejnych odczytów 2,3,4 za jednym podejściem czy pozostawić jeden odczyt. Ale robiłem
i nadal miałem problem. Dla rozpoznania stanów na danych przejściach " R " dodałem sobie tylko dla informacji to
Podczas wpisywania danych dla czasówki załączają się " * " dla wartości R = 1 ( to 4) ele nie działa to jak trzeba.
Więc jeśli dasz rade w wolnej chwili to poproszę o pomoc.
PS.
Pytanko - Czy pracowałeś na M128 - mam problem z konfiguracją portów F i G jako input - podłączenie I2C również nie działa.
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Witam! Chciałbym zrobić ten
Witam! Chciałbym zrobić ten sterownik. Mam programator pod USB i zwykle programuję przez program AVRDUDE wbijając plik hex. Czy mógłby mi ktoś powiedzieć jak zmienić kod źródłowy (kod do bascoma) na plik hex. odrazu do wgrania? Jak to zrobić? Jak można zmienić np. w programie nazwy obiektu pomiaru np.(Zamiast dwór-pokój)? Czy można jakoś zmienić w tym programie, aby cały czas wyświetlało datę i temperaturę z dwóch czujników? Czy można zastosować więcej czujników pomiaru temperatury? Sory, za trochę głupie pytania, dopiero zaczynam przygodę z mikroprockami itp. "Prosty termostat z histerezą" to znaczy, że mogę nastawić temeperautę jakiegoś obiektu i będzie ją stale utrzymywać?
Re: Odczyt
Mam dwa odczyty bo potrzebuje czas włączenia i wyłączenia.... nie wiem jak chcesz to zrobićinaczej. Pętla idzie co 2 i nie ma nigdy stanu 4 oraz 2. Jak chcesz to mieć inaczej to sobie musisz cały program napisać od nowa. Step w pętli ma być 2. Czas jest zapisany w tablicy tak że komórka 1 jest włacz, komórka 2 wyłącz, 3 włacz 2 , 4 wyłącz 2, więc stan 5 będzie się odnosił do zmiennej G(5)i G(6)
Na m128 nigdy nic nie robiłem
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Do zmiany nazw i zrobienia
Do zmiany nazw i zrobienia hexa potrzebujesz programu BASCOM-AVR dostępny TU http://www.mcselec.com/index.php?option=com_content&task=view&id=14&Itemid=41
Daty w org sterowniku niema wiec trzeba dopisać do kodu
Czujników możesz podłączyć ile chcesz - potrzebujesz zmieniając jednocześnie kod
pozdrawiam
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Sterowanie czasowe zmiana z 2 na 4 - problem
Jak widać moja tablica jak ja nazywasz ma stan od 1 do 8 (eeprom 10 to 17 dla G)
Stan 5 oznacza odczyt G5 tylko bo G6 = 6, czy zgadza się - jest 8 par.
Masz u siebie wartość 1 to 3 step 2 ?? - a odczyty są 4, tzn 4 pary G+M , już nie kumam
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Re: Sterownik
pętla 1 to 3 step 2 ma dwa stany, odpowiadające kanałom (mam dwa kanały czasowe). Do wyznaczenia stanu logicznego każdego z kanałów trzeba mieć dw czasy, czas wyłączenia i włączenia, czyli G i M włączenia i G i M włączenia.
W jednym kroku dla wartości 1 odczytuje 4 parametry i obliczam czy czas aktualny jest w przedziale i ustawiam stan
W drugim kroku odczytuje kolejne dwa czasy, porównuje z aktualnym i ustawiam drugie wyjście.
To naprawdę nie jest trudne do zrozumienia. Jak czytasz w każdym kroku po jednym czasie to sprawdzanie stanu musi być po dwóch odczytach a to jest niepotrzebna komplikacja..... Nie wiem jak mam to wyjaśniać jeszcze
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Podświetlanie
Witam i gratuluje projektu,badzo udany.
Mam w związku z nim pytanie czy istnieje możliwość podświetlania
wyświetlacza bez wygaszenia po paru sekundach.
Jeśli tak to jak to zrobić.
Pozdrawiam Kuba
Sterowanie czasowe zmiana z 2 na 4 - problem
Problem rozwiązany po rozpisaniu na pojedyncze przebiegi czego wadą jest więcej kodu, a zaleta możliwość niezależnego sterowania wł/wył kolejnych kanałów czasowych
Problem rozwiazany
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
podswietlanie
Wartość odpowiedzialna za podświetlanie w sekundach
a jeżeli chcesz bez kombinacji wogole nie używać auto wygaszania wykasuj ta zawartość lub odznacz
pozdrawiam
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
płytka
Witam Mirku
Mam takie pytanie w jakim programie projektujesz płytki? Wczoraj wydrukowałem mozaikę ścieżek i zobaczyłem, że piny układu układu w tym sterowniku nie pokrywają się. 4 czy 5 pierwszych nóżek pasuje w otwory ale później nie trafia.
elektron1988