Zegar czasu rzeczywistego dla Raspberry Pi

Oprócz wielu zalet, Raspberry Pi, co oczywiste, ma wady. Jedną z nich jest brak zegara czasu rzeczywistego. Co z tego wynika? Bez połączenia z internetem Raspberry Pi nie ustawi aktualnej daty po podłączeniu zasilania. Wada? Nie zawsze i nie dla każdego, ale jednak wada. Na szczęście, można ją dość łatwo usunąć i wyposażyć naszą Malinkę w zegar czasu rzeczywistego podłączony za pomocą magistrali I2C, na przykład DS1307.

Oto co będzie potrzebne:

  1. Raspberry Pi (no kto by się domyślił…) z włączoną obsługą magistrali I2C. Instrukcja włączenia I2C dostępna jest w moim wpisie sprzed roku, 
  2. układ scalony DS1307,
  3. rezonator kwarcowy 32,768kHz,
  4. źródło zasilania, na przykład bateria CR2032,
  5. kilka przewodów,
  6. lutownica,
  7. spoiwo lutownicze zwane popularnie cyną,

Jak widać,  lista elementów nie jest długa, a sam schemat elektryczny też nie powala na kolana stopniem skomplikowania:

Raspberry Pi DS1307 RTCA można to jeszcze uprościć kupując, na przykład na Allegro, układ RTC. Gotowy lub do samodzielnego montażu.

Uwaga, ważne: niektóre moduły mogą mieć rezystory pull-up na liniach I2C. My ich nie potrzebujemy. Raspberry Pi posiada już rezystory pull-up na liniach SDA i SCL. Dodatkowe są zbędne, więc albo ich nie montujemy, albo musimy wylutować.

Uwaga, ważne: tak, zasilanie jest brane z linii 5V, choć logika Raspberry Pi pracuje na 3.3V. Tym razem jest to bezpieczne, specyfikacja magistrali I2C na to pozwala („otwarty kolektor” i wbudowane w Malinkę rezystory pull-up).

Lutowanie modułu DS1307

Wracając do tematu. Zlutować, włożyć baterię, podłączyć do Malinki i uruchomić.

DS1307 podłączony do Raspberry Pi

Uwaga, ważne: nie podłączać układu do Raspberry Pi bez zainstalowanej baterii.

Jeśli nasza Malinka potrafi już pogadać z innymi urządzeniami po I2C, przechodzimy do następnego akapitu. Jeśli nie, postępujemy według tej instrukcji.

Czas najwyższy sprawdzić, czy nasz układ działa. Wydajemy polecenie
sudo i2cdetect -y 1
DS1307 powinien zgłosić się na adresie 0x68, a nasz ekran wyglądać tak:

DS1307 na adresie 0x68

Sprzęt działa, czas włączyć obsługę RTC DS1307:  sudo nano /etc/modules i na końcu dodajemy linię rtc-ds1307

/etc/modules i DS1307

Czas na reset: sudo reboot

Dodajemy obsługę RTC na starcie:
sudo nano /etc/rc.local
i przed linią exit 0 dodajemy:
modprobe i2c-bcm2708
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
modprobe rtc-ds1307
hwclock -s

Screenshot from 2014-02-16 15:23:25Sprawdzamy aktualną datę systemową date i datę zapisaną w układzie RTC sudo hwclock -r.

hwclock -r DS1307

Nie pasują? Nic dziwnego. Czas zapisać datę do DS1307:

sudo hwclock -w

I już. To wszystko. Od tego momentu, przy każdym uruchomieniu Raspberry Pi będzie pobierać datę i czas z układu zegara czasu rzeczywistego. Internet nie jest już potrzebny.

3 comments

  1. kiedys mnie takie zabawki fascynowały… a teraz zadaje pytanie: na chuj to komu?

  2. Z innej beczki – co teraz jeszcze można dokupić do malinki, żeby jej możliwości były większe? Mam już wszystkie akcesoria, które mają na ematador.pl, łącznie z dodatkową pamięcią, a co jeszcze warto teraz kupić?

  3. A na pewno sprawdziłeś, że układ po ponownym włączeniu malinki (bez sieci ) pokazuje właściwy czas?. A odistalowałeś fake-hwclock. A co zrobiłeś z ntp. Widać, zabrakło cierpliwości by sprawdzić do końca. A później użytkownicy łapią się za głowę, że nie działa zegar

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

This site uses Akismet to reduce spam. Learn how your comment data is processed.