Tematem mojego artykułu jest zegar czasu rzeczywistego z dołączoną możliwością pomiaru temperatury. Urządzenie opiera się na mikrokontrolerze PIC12F683, module zegara czasu rzeczywistego DS1307, module wyświetlacza LED, a także module termometru cyfrowego DS1624. Wszystkim steruje procesor z jądrem PIC poprzez interfejs szeregowy I2C.
Pokrótce opiszę poszczególne bloki funkcjonalne wchodzące w skład urządzenia:
-w skład bloku zasilacza wchodzi:
transformator sieciowy TS1. Na jego wyjściu otrzymujemy przemienne napięcie 8.5V, które podawane jest na mostek Greatza D1, oraz kondensatory filtrujące C1 i C2. Tak uzyskane napięcie ok. 12V jest następnie obniżane i stabilizowane w układzie U1 do wartości 5V. Na wyjściu stabilizatora pracują kondensatory zwierające składową zmienną do masy.
-blok mikrokontrolera PIC12F683 zbiera dane z innych bloków funkcjonalnych omówionych poniżej i steruje blokiem wyświetlacza w celu wyprowadzenia aktualnego czasu. Zastosowany procesor PIC charakteryzuje się niską ceną, minimalną liczbą wyprowadzeń (8 pinów) i duża pamięcią programu (2k słów). Dzięki temu mogłem napisać złożony funkcjonalnie program sterujący pracą zegara, a wysoka częstotliwość taktowania mikoprocesora (8MHz) zapobiega występowaniu widocznych opóźnień w realizacji poleceń wybieranych przyciskami. W skład bloku procesora wchodzi dioda LED, którą wykorzystałem w celu ułatwienia tworzenia kodu programu, ponadto znajdują się 3 przyciski umożliwiające operacje ustawiania czasu zegara, czasów budzeń i testowania temperatury.
-blok zegara czasu rzeczywistego RTC został zrealizowany z wykorzystaniem obwodu scalonego DS1307. Scalak ten jest widoczny na magistrali I2C jako pamięć RAM z bateryjnym podtrzymywaniem zawartości, gdzie pierwsze 8 bajtów to bajty sterujące pracą zegara RTC. Generator wewnętrzny obwodu scalonego jest stabilizowany kwarcem X1, a ustalenie dokładniej częstotliwości jego pracy było możliwe dzięki zastosowaniu trymera C9. Ponieważ nie dysponowałem miernikiem częstotliwości o wysokiej dokładności, ustalenie optymalnych warunków pracy zajęło mi trochę czasu.
-blok termometru zawiera obwód scalony DS1624. Jest to termometr cyfrowy pozwalający na pomiar temperatury, z 12 bitową dokładnością w zakresie od ok. -50 do 120 °C. Ponadto układ wyposażono w 256B nieulotnej pamięci EEPROM2.
-blok wyświetlacza wykorzystuje kupiony na aukcji internetowej wyświetlacz Philips-a, który zawiera 4 cyfry LED z rozdzielającą parą kropek, 2 LED, które wykorzystałem do informowania o załączonych budzeniach, oraz obecności termometru DS1624, a także buzer budzika. Wyświetlacz obecnie nie jest już dostępny, ale w zegarze można wykorzystać wyświetlacz AVT5147 dostępny w sklepie internetowym.
Poniżej przedstawiam kompletną listę elementów, wraz ze schematem:
-B1 SN2032
-BT1 B3F-1052
-BT2 B3F-1052
-BT3 B3F-1052
-C1 1000uF/16V
-C2 100nF
-C3 470uF/16V
-C4 100nF
-C5 10nF
-C6 10nF
-C7 3.3pF
-C8 12pF
-C9 4-14pF
-D1 B1000D
-D2 LED3 G-LC
-R1 330R
-R2 10k
-R3 10k
-R4 10k
-R5 3.3k
-R6 3.3k
-TS1 TS2/14
-U1 7805
-U2 PIC12F683
-U3 DS1624
-U4 DS1307
-X1 32768Hz
-Obudowa KM-42N
Wszystkie elementy użyte w projekcie są dostępne w sklepie internetowym TME.
Na zakończenie proponuje następujący scenariusz wykorzystania przycisków zegara:
1.Ustawianie czasu zegara:
-naciskamy przycisk SW1, zegar przechodzi do trybu ustawienia czasu za pomocą przycisku SW2 ustawiamy najpierw dzień, wciskamy przycisk SW3 i wybieramy miesiąc, wciskamy przycisk SW3 i wybieramy rok daty, wciskamy SW3 i wybieramy godzinę, wciskamy SW3 i wybieramy minutę, na zakończenie zatwierdzamy przyciskiem SW3.
2.Wyświetlenie wartości temperatury:
-wciskamy przycisk SW2, na wyświetlaczu, przez około 1.5s, wyświetla się aktualna temperatura.
3.Ustawienie godziny i minuty budzenia:
Wciskamy przycisk SW3 i za pomocą przycisku SW2 wybieramy numer budzenia od 0 do 4 (5 możliwych budzeń), wciskamy SW3 i wybieramy godzinę budzenia, wciskamy SW3 i wybieramy minutę budzenia, zatwierdzamy za pomocą SW3.
Wybieranie wartości jednego z parametrów realizowane jest za pomocą kolejnych naciśnięć przycisku SW2. Można także przycisnąć na dłużej przycisk SW2 i wtedy program sam zwiększa automatycznie wartość parametru.
Po spełnieniu warunków budzenia moduł wyświetlacza rozpocznie miarowe pikanie, które można przerwać dowolnym przyciskiem. Jednak jeśli przerwiemy budzenie klawiszem SW1, w ciągu 10 minut zegar wznowi alarm (drzemka). Czynność można powtarzać w nieskończoność.
Poniżej przedstawiam zdjęcia gotowego zegara bez obudowy:
Pokrótce opiszę poszczególne bloki funkcjonalne wchodzące w skład urządzenia:
-w skład bloku zasilacza wchodzi:
transformator sieciowy TS1. Na jego wyjściu otrzymujemy przemienne napięcie 8.5V, które podawane jest na mostek Greatza D1, oraz kondensatory filtrujące C1 i C2. Tak uzyskane napięcie ok. 12V jest następnie obniżane i stabilizowane w układzie U1 do wartości 5V. Na wyjściu stabilizatora pracują kondensatory zwierające składową zmienną do masy.
-blok mikrokontrolera PIC12F683 zbiera dane z innych bloków funkcjonalnych omówionych poniżej i steruje blokiem wyświetlacza w celu wyprowadzenia aktualnego czasu. Zastosowany procesor PIC charakteryzuje się niską ceną, minimalną liczbą wyprowadzeń (8 pinów) i duża pamięcią programu (2k słów). Dzięki temu mogłem napisać złożony funkcjonalnie program sterujący pracą zegara, a wysoka częstotliwość taktowania mikoprocesora (8MHz) zapobiega występowaniu widocznych opóźnień w realizacji poleceń wybieranych przyciskami. W skład bloku procesora wchodzi dioda LED, którą wykorzystałem w celu ułatwienia tworzenia kodu programu, ponadto znajdują się 3 przyciski umożliwiające operacje ustawiania czasu zegara, czasów budzeń i testowania temperatury.
-blok zegara czasu rzeczywistego RTC został zrealizowany z wykorzystaniem obwodu scalonego DS1307. Scalak ten jest widoczny na magistrali I2C jako pamięć RAM z bateryjnym podtrzymywaniem zawartości, gdzie pierwsze 8 bajtów to bajty sterujące pracą zegara RTC. Generator wewnętrzny obwodu scalonego jest stabilizowany kwarcem X1, a ustalenie dokładniej częstotliwości jego pracy było możliwe dzięki zastosowaniu trymera C9. Ponieważ nie dysponowałem miernikiem częstotliwości o wysokiej dokładności, ustalenie optymalnych warunków pracy zajęło mi trochę czasu.
-blok termometru zawiera obwód scalony DS1624. Jest to termometr cyfrowy pozwalający na pomiar temperatury, z 12 bitową dokładnością w zakresie od ok. -50 do 120 °C. Ponadto układ wyposażono w 256B nieulotnej pamięci EEPROM2.
-blok wyświetlacza wykorzystuje kupiony na aukcji internetowej wyświetlacz Philips-a, który zawiera 4 cyfry LED z rozdzielającą parą kropek, 2 LED, które wykorzystałem do informowania o załączonych budzeniach, oraz obecności termometru DS1624, a także buzer budzika. Wyświetlacz obecnie nie jest już dostępny, ale w zegarze można wykorzystać wyświetlacz AVT5147 dostępny w sklepie internetowym.
Poniżej przedstawiam kompletną listę elementów, wraz ze schematem:
-B1 SN2032
-BT1 B3F-1052
-BT2 B3F-1052
-BT3 B3F-1052
-C1 1000uF/16V
-C2 100nF
-C3 470uF/16V
-C4 100nF
-C5 10nF
-C6 10nF
-C7 3.3pF
-C8 12pF
-C9 4-14pF
-D1 B1000D
-D2 LED3 G-LC
-R1 330R
-R2 10k
-R3 10k
-R4 10k
-R5 3.3k
-R6 3.3k
-TS1 TS2/14
-U1 7805
-U2 PIC12F683
-U3 DS1624
-U4 DS1307
-X1 32768Hz
-Obudowa KM-42N
Wszystkie elementy użyte w projekcie są dostępne w sklepie internetowym TME.
Na zakończenie proponuje następujący scenariusz wykorzystania przycisków zegara:
1.Ustawianie czasu zegara:
-naciskamy przycisk SW1, zegar przechodzi do trybu ustawienia czasu za pomocą przycisku SW2 ustawiamy najpierw dzień, wciskamy przycisk SW3 i wybieramy miesiąc, wciskamy przycisk SW3 i wybieramy rok daty, wciskamy SW3 i wybieramy godzinę, wciskamy SW3 i wybieramy minutę, na zakończenie zatwierdzamy przyciskiem SW3.
2.Wyświetlenie wartości temperatury:
-wciskamy przycisk SW2, na wyświetlaczu, przez około 1.5s, wyświetla się aktualna temperatura.
3.Ustawienie godziny i minuty budzenia:
Wciskamy przycisk SW3 i za pomocą przycisku SW2 wybieramy numer budzenia od 0 do 4 (5 możliwych budzeń), wciskamy SW3 i wybieramy godzinę budzenia, wciskamy SW3 i wybieramy minutę budzenia, zatwierdzamy za pomocą SW3.
Wybieranie wartości jednego z parametrów realizowane jest za pomocą kolejnych naciśnięć przycisku SW2. Można także przycisnąć na dłużej przycisk SW2 i wtedy program sam zwiększa automatycznie wartość parametru.
Po spełnieniu warunków budzenia moduł wyświetlacza rozpocznie miarowe pikanie, które można przerwać dowolnym przyciskiem. Jednak jeśli przerwiemy budzenie klawiszem SW1, w ciągu 10 minut zegar wznowi alarm (drzemka). Czynność można powtarzać w nieskończoność.
Poniżej przedstawiam zdjęcia gotowego zegara bez obudowy:
Fajne? Ranking DIY