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

Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi

ghost666 02 Sie 2015 15:12 5388 0
  • Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi
    Gdy moduł Raspberry Pi podłączony jest do sieci, jest w stanie konfigurować swój zegar pobierając czas z pomocą NTP, jednakże bez podłączenia do internetu ustawienia daty i godziny będą niepoprawne. W szeregu projektów potrzebne jest dosyć precyzyjne określanie czasu, na przykład do logowania działania RPi czy monitorowanych wydarzeń.

    Rozwiązaniem tego problemu jest zegar czasu rzeczywistego (RTC). Jest to niewielki moduł, wyposażony we własną baterię, która podtrzymuje działanie układu nawet gdy zasilanie jest odłączone. Moduł ten pracuje nieprzerwanie i odlicza czas, niezależnie czy zewnętrzne zasilanie jest podłączone do układu czy nie. RPi podczas każdego uruchamiania pobierać może aktualny czas z modułu RTC.

    Najprostszą metodą implementacji RTC w systemie jest wykorzystanie gotowego modułu. Na szczęście moduły RTC są niedrogie i łatwodostępne. Niektóre z modułów można łączyć bezpośrednio z pinami GPIO, inne potrzebują do podłączenia kilku kabelków.

    DS1307 czy DS3231?


    Moduły oparte o układu scalone DS1307 i DS3231 są bardzo popularnymi zegarami czasu rzeczywistego i nabyć je można od wielu firm. Autor poradnika zakupił oba rodzaje modułów, ale dopiero po zakupie spostrzegł, że moduł oparty o układ SD1307 jest bezużyteczny w przypadku Raspberry Pi - nie działa on z zasilaniem 3,3 V. Moduł oparty o DS3231 jest dokładniejszy i bez problemu współpracuje z systemem zasilanym napięciem 3,3 V.

    Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi


    Usuwanie rezystorów

    Większość modułów RTC I²C ogólnego zastosowania wyposażona jest w rezystory podciągające na liniach SDA i SCL, ale ponieważ do podłączenia z Raspberry Pi rezystory te nie są potrzebne - RPi ma własne - to można je usunąć, tak aby ich obecność w żaden sposób nie zakłócała działania interfejsu.

    Dodatkowo, wykorzystywany moduł wbudowany ma układ ładowania akumulatora LIR2032, który można wykorzystać do zasilania zegara. Jako że autor pragnął wykorzystać zwykłą baterię, a nie akumulator, konieczne było usunięcie jednego rezystora na PCB, co wyłączyło układ ładowania.





    Do usunięcia rezystorów wystarczyła lutownica z niewielkim grotem i pęseta. Na poniższym zdjęciu zaznaczono lokalizację usuniętych oporników.

    Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi


    Konfiguracja sprzętowa układu

    Gdy Raspberry Pi jest odłączone od zasilania przyłączyć do niego można moduł, Jest to bardzo proste, jednakże warto i tak dwa razy sprawdzić podłączenia, jakie się wykonało. Linie powinny być podłączone następująco:





    DS1307Pin GPIO
    GNDP1-06
    VccP1-01 (3,3 V)
    SDAP1-03 (I²C SDA)
    SCLP1-05 (I²C SCL)


    Na tym etapie także trzeba podłączyć do układu baterię 3 V!

    Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi


    Konfiguracja I²C

    Tak jak w przypadku innych układów na I²C konieczne jest skonfigurowanie tego interfejsu, zanim zacznie się z niego korzystać. Konfiguracja tego portu poprzez raspi-config opisana jest w tym projekcie.

    Konfiguracja modułu DS3231

    Aby upewnić się, że wszystko pójdzie dobrze podczas konfiguracji powinniśmy aktualizować system przed przystąpieniem do działania:

    Code:
    sudo apt-get update
    
    sudo apt-get -y upgrade


    Teraz przystąpić możemy do modyfikacji plików systemowych, wykorzystując:

    Code:
    sudo nano /etc/modules


    Jeśli nie ma tam wpisu “rtc-ds1307″ to dodajemy go na dole, tak że konfiguracja modułów wygląda następująco:

    Code:
    snd-bcm2835
    
    i2c-bcm2835
    i2c-dev
    rtc-ds1307


    Wychodzimy z nano zapisując plik (ctrl+x, potem y i enter).

    Następnie uruchamiamy ponownie Raspberry Pi zatrzymując je z pomocą:

    Code:
    sudo halt


    Odłączamy zasilanie i gotowe.

    Test interfejsu

    Podłączamy układ do zasilania i po załadowaniu się systemu operacyjnego w linii komend piszemy:

    Code:
    sudo i2cdetect -y 1


    Jeśli wykorzystujemy płytkę RPi Rev 1 to zamiast jedynki na końcu wpisujemy 0.

    Wynikiem wpisania powyższej komendy powinno być coś podobnego do tego:

    Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi



    W tym przypadku 68 to heksadecymalny adres zegara czasu rzeczywistego na interfejsie I²C.

    Konfiguracja układu I²C

    Aby upewnić się, że układ działa poprawnie i RPi dobrze synchronizuje czas z modułem RTC musimy zmodyfikować kolejny plik systemowy:

    Code:
    sudo nano /etc/rc.local


    Dodajemy tam dwie linijki przed exit 0:

    Code:
    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    
    hwclock -s


    Tak, że otrzymujemy plik przypominający:

    Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi


    Uwaga - jeśli korzystamy z RPi Rev 1 to zastępujemy “/i2c-1/” “/i2c-0/”.

    Resetujemy Raspberry Pi:

    Code:
    sudo reboot


    Gdy teraz powtórzymy komendę i2cdetect, opisaną powyżej, zamiast 68 pod tym adresem zobaczymy UU:

    Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi


    Strefy czasowe i zmiana czasu na letni/zimowy

    Domyślnie RPi pokazuje czas jako GMT lub UTC. Dla wielu osób nie jest to czas lokalny, więc trzeba odpowiednio skonfigurować system, aby pokazywał czas lokalny. Zmieniamy konfigurację poprzez:

    Code:
    sudo raspi-config


    W programie wybieramy “Internationalisation Options” i dalej “Change Timezone”. Można teraz wybrać lokalną strefę czasową.

    Odczytywanie daty i godziny

    Aby odczytać datę i czas systemowy wystarczy posłużyć się komendą "date", ale jeśli chcemy ją wykorzystać np. do konfiguracji czasu, a nie jego odczytu składnia wygląda:

    Code:
    sudo date -s "29 AUG 1997 13:00:00"


    Po zapisaniu daty i godziny możemy ustawienia te przenieść do RTC korzystając z komendy:

    Code:
    sudo hwclock -w


    Ponowny odczyt danych z modułu zegara czasy rzeczywistego możliwy jest z pomocą:

    Code:
    sudo hwclock -r


    Jeśli oddzielimy komendy odczytu zegara systemowego i czasu rzeczywistego średnikiem to możemy odczytać równocześnie obie wartości, co powinno nam zwrócić coś takiego:
    Podłączenie zegara czasu rzeczywistego na I2C do Raspberry Pi


    Komenda "hwclock -s" dodana do rc.local ustawia czas systemowy na podstawie czasu z zegara sprzętowego.

    Ostatni test

    Ostatnim testem pozwalającym sprawdzić, czy RTC działa poprawnie jest sprawdzenie czy informacje o czasie ładowane są podczas startu systemu operacyjnego Raspberry Pi. Aby przeprowadzić taki test wystarczy po kolei:

    * Wyłączyć RPi
    * Odłaczyć kabel zasilający
    * Odłączyć połączenia sieciowe
    * Przyłączyć RPi do klawiatury i monitora
    * Zostawić układ np. na noc
    * Włączyć system i z pomocą komendy "date" odczytać czas i datę systemową. Jeśli czas się zgadza, to znaczy że wszystko zrobiliśmy dobrze i system korzysta z zegara czasu rzeczywistego podłączonego do interfejsu I²C.

    Źródło: http://www.raspberrypi-spy.co.uk/2015/05/adding-a-ds3231-real-time-clock-to-the-raspberry-pi/


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.