logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zegar czasu rzeczywistego z komunikacją I2C

Shaka_sama 07 Wrz 2011 10:44 3104 0
REKLAMA
  • 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:
    Zegar czasu rzeczywistego z komunikacją I2C

    -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:
    Zegar czasu rzeczywistego z komunikacją I2C Zegar czasu rzeczywistego z komunikacją I2C

    Fajne? Ranking DIY
    O autorze
    Shaka_sama
    Poziom 1  
    Offline 
    Shaka_sama napisał 1 postów o ocenie 3. Mieszka w mieście Łódź. Jest z nami od 2011 roku.
  • REKLAMA
REKLAMA