Elektroda.pl
Elektroda.pl
X
Relpol
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterownik czasowy PIC16F87 i zegar czasu rzeczywistego

kolgreen 13 Lip 2012 23:19 6172 1
  • Sterownik czasowy PIC16F87 i zegar czasu rzeczywistego
    Przedstawione w tym temacie urządzenie jest sterownikiem czasowym mającym na celu uruchomienie oświetlenia i jego zgaszenie o zaprogramowanej godzinie i minucie. Drugą funkcją jest jednorazowe w ciągu doby (również o zaprogramowanej porze) włączenie innego urządzenia. Sterownik może zostać rozbudowany o czujniki pracujące na I2C (np. termometr, czujnik wilgotności). Można rozbudować go o kolejne przekaźniki sterujące kolejnymi urządzeniami.

    Zastosowanie:
    - sterowanie oświetleniem akwarium i dokarmianiem,
    - sterowanie szklarnią i podlewaniem
    i z pewnością wiele innych...

    Koncepcja rozwiązania

    Urządzenie wykorzystując mikrokontroler PIC16F87 steruje dwoma przekaźnikami odpowiedzialnymi za doświetlanie i podawanie karmy o wyznaczonych godzinach. Czas rzeczywisty pobierany jest z układu DS1307 w którego pamięci nieulotnej przechowywane są ustawienia. Informacje wyświetlane są na ekranie modułu USART-LCD. Sterowanie odbywa się za pomocą trzech przycisków typu reset.

    Konstrukcja urządzenia

    Sterownik zasilany jest z sieci elektrycznej, napięcie 230V przekształcane jest na 5V przez transformator. Napięcie po wyprostowaniu przez mostek graetza (D3) i przejściu przez stabilizator LM7805CT (U3) doprowadzone jest do układów scalonych (IC1,U1) na płycie głównej urządzenia. Kondensatory (C3,C5) pełnią funkcję filtrującą. Ich wartość przyjmuje się minimum 220uF na każdy amper pobieranego prądu. Napięcie 5V dostępne jest na gnieździe (J3) oraz portach umożliwiających podłączenie zewnętrznych układów z transmisją danych I2C (J1), USART (J2).

    Sterownik czasowy PIC16F87 i zegar czasu rzeczywistego

    Rys. 1 Płyta główna sterownika czasowego

    Głównym podzespołem jest mikrokontroler PIC16F87, który steruje pracą urządzenia. Typ mikrokontrolera wybrany został z uwagi na wystarczającą liczbę portów wejścia/wyjścia , dostępność wymaganych w założeniach portów komunikacyjnych, zadowalającą pojemność pamięci (SRAM 368 bytes, EEPROM 256 bytes, FLASH 7168 bytes) . Zastosowano układ w obudowie 18PIN PDIP (Rys. 2). Mikrokontroler wyposażony jest w port I2C (nóżki 7 SDA, 10 SCL) oraz USART (nóżki 11 TX, 8 RX).





    Sterownik czasowy PIC16F87 i zegar czasu rzeczywistego

    Rys. 2 Wyprowadzenia mikrokontrolera PIC16F87

    Układ taktowany jest zewnętrznym oscylatorem kwarcowym o częstotliwości 4 MHz (maksymalnie 20MHz) (nóżki 16 i 15), który można pominąć wykorzystując wbudowany oscylator mogący pracować z częstotliwością (31 kHz, 125 kHz, 250 kHz, 500 kHz, 1 MHz, 2 MHz, 4 MHz, 8 MHz ).

    Przyciski sterujące (gniazdo J5) zostały podłączone do portu RA mikrokontrolera (wykorzystano nóżki 1, 2, 3). Rezystory (R6, R7, R8) pełnią funkcję pomocniczą, mającą na celu ustabilizowanie stanu logicznego. Pozostałe trzy piny (gniazdo J5) mogą zostać użyte do podłączenia dodatkowych przycisków sterujących lub obsługi dodatkowych układów zewnętrznych.

    Komunikacja dźwiękowa jest możliwa za pomocą głośnika z wbudowanym generatorem, sterowanym przez tranzystor (Q3) podłączony do mikrokontrolera (nóżka 9).

    Sterowanie przekaźnikami odbywa się poprzez tranzystory (Q1, Q2) których bramy są podłączone przez rezystory (R5, R4) do mikrokontrolera (nóżki: 12,13). Tranzystory zabezpieczono diodami (D1, D2) przed przepięciami występującymi przy impulsach napięcia podawanych na cewki przekaźników. Zastosowanie przekaźników umożliwia sterowanie urządzeniami pracującymi przy wysokim napięciu i mocy np. lampy, elektrozawory, podajniki.

    Sterownik czasowy PIC16F87 i zegar czasu rzeczywistego

    Rys. 3 Zegar czasu rzeczywistego DS1307

    Zadaniem mikrokontrolera PIC16F87 jest sterowanie przekaźnikami i uruchamianie urządzeń o wyznaczonym czasie. Jako zegar czasu rzeczywistego został użyty układ scalony DS1307 (Rys.3). Komunikacja między nim a mikrokontrolerem przebiega po magistrali I2C. Pracę zegara nawet po wyłączeniu zasilania zapewnia bateria o napięciu 3V podłączona do układu (nóżka 3 plus, 4 GND). Układ scalony sam monitoruje zanik napięcia i przełącza się na zasilanie awaryjne z baterii. DS1307 posiada pamięć nieulotną w której zapisywane są ustawienia pracy urządzenia np. czas wyłączenia i włączenia przekaźników. Do poprawnej pracy zegara niezbędny jest zewnętrzny rezonator kwarcowy o częstotliwości 32,768 kHz (nóżka 1, 2).

    Wcześniejsza wersja

    Pierwsza wersja sterownika (Rys.4) pracowała przez kilkanaście miesięcy w sposób ciągły. Niewykorzystane miejsce na zewnętrzną pamięć procesora zostało w nowej wersji pominięte. Transformator również został zainstalowany poza płytą główną. W starszej wersji był zastosowany PIC16F84A. Programowanie czasu np. włączenia oświetlenia odbywało się poprzez wciśnięcie przycisku "zapisz" a następnie przycisku "światło". Należało to zrobić o porze w której sterownik miał sam realizować to zadanie cyklicznie w przyszłości.

    Sterownik czasowy PIC16F87 i zegar czasu rzeczywistego

    Rys. 4 Pierwsza wersja sterownika

    Obecna wersja

    Aktualne informacje o tym projekcie sterownika czasowego.

    Sterownik czasowy PIC16F87 i zegar czasu rzeczywistego

    Rys. 5 Obecna wersja sterownika czasowego


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Relpol
  • #2 19 Lip 2012 14:06
    derytrus
    Poziom 11  

    Układ fajny, ale moim zdaniem armata na muchy. Sprzętowo i wymiarowo (płytka mogłaby być o 1/3 krótsza).
    Sam oparłbym to o najmniejszą Atmegę i puściłbym to z wbudowanego RTC (wraz kwarcem 32.768k podpiętym do procesora). Dokładność takiego rozwiązania powinna być wystarczająca - zawsze można założyć trymer na kwarc RTC. Kwestia podtrzymania bateryjnego też nie powinna być problemem - zawsze można podpiąć za diodą baterię i wykrywać zmianę napięcia zasilania. Podczas uśpienia generator RTC dalej działa, wystarczy przy przekręceniu wybudzić procesor, inkrementować licznik i uśpić go ponownie.