Komputer jednopłytkowy Raspberry Pi nie jest fabrycznie wyposażony w układ czasu rzeczywistego. Oznacza to, że za każdym razem, gdy wyłączamy ten minikomputer i odłączamy od niego zasilanie 'zapomina' on jaka jest godzina. Po ponownym uruchomieniu system operacyjny musi bazować na czasie, który uzyska z innych źródeł, na przykład z sieci etc. Co jednak w przypadku urządzeń, które nie są podłączone w czasie pracy do żadnej sieci czy Internetu? Tutaj w sukurs przychodzi zegar czasu rzeczywistego - RTC.
Zegar czasu rzeczywistego to zazwyczaj układ scalony, wyposażony we własne zasilanie, który podłączony jest do komputera interfejsem cyfrowym. Własne, niezależne zasilanie - najczęściej w postaci baterii - pozwala na ciągłą pracę, nawet gdy sam komputer jest wyłączony. Interfejs cyfrowy, którym RTC połączony jest z komputerem, pozwala na przesyłanie do systemu operacyjnego informacji na temat aktualnego czasu i daty w dowolnym momencie.
W poniższym artykule zapiszemy w jaki sposób podłączyć zegar czasu rzeczywistego poprzez interfejs szeregowy I2C i w jaki sposób skonfigurować system operacyjny, aby mógł z nim współpracować. Wykorzystać możemy wiele układów scalonych, takich jak chociażby DS1307 czy DS3231 firmy Dallas-Maxim lub PCF8523, produkowany przez NXP semiconductors.
Podłączenie układu do minikomputera
Scalony zegar czasu rzeczywistego wymaga podłączenia zaledwie kilku dodatkowych elementów, aby móc poprawnie działać. Najważniejsze to oscylator kwarcowy o częstotliwości oscylacji równej 32,768 Hz (to dokładnie 215 Hz) oraz bateria, która podtrzymywać będzie pracę zegara w czasie, gdy odłączone od modułu jest zasilanie. Schemat przykładowego modułu pokazany jest na rysunku 1. Linie SDA, SCL oraz zasilanie (+5 V) i masę podłączamy do 40-pinowego złącza rozszerzeń Raspberry Pi, zgodnie z odpowiednimi sygnałami, jak opisano w tabeli 1.
Jeśli nie chcemy samodzielnie montować takiego modułu, na rynku dostępnych jest wiele modułów ze scalonymi zegarami czasu rzeczywistego. Większość z nich wyposażona jest w złącza kompatybilne ze złączem rozszerzeń Raspberry Pi. Moduły te wyposażone są w różne układy RTC, takie jak wymienione we wcześniejszej części artykułu.
Włączenie interfejsu I2C w Raspberry Pi
Aby móc korzystać z zegara czasu rzeczywistego, podłączonego do magistrali I2C, musimy ten interfejs aktywować. Domyślnie interfejs jest dezaktywowany w systemie operacyjnym. Na szczęście można łatwo uruchomić go, nie zagłębiając się w pliki systemowe - wystarczy skorzystać z wbudowanego w Raspbiana konfiguratora systemu. W pierwszej kolejności uruchamiamy wspomniany konfigurator z uprawnieniami roota:
Wyświetli to tabelę z różnymi adresami I2C. Jeżeli pod jakimś adresem Raspberry Pi wykryje urządzenie, w pozycji tej znajdziemy rzeczony adres, inaczej system wypełni to pole dwoma myślnikami „--”. Typowym adresem, pod jakim powinniśmy zobaczyć nasz moduł jest 0x68 - w kolumnie „8” i wierszu „60” wpisana będzie liczba 68. Oczywiście, jeżeli korzystamy z innego układu RTC, niż wymienione tutaj, adres może być inny. Informacje o tym, pod jakim adresem znaleźć możemy dany układ znajdują się w jego karcie katalogowej. W ten sposób znajdować możemy także inne urządzenia I2C, dołączone do naszego Raspberry Pi.
Jeśli poprawnie wykryliśmy obecność zegara czasu rzeczywistego w naszym systemie, możemy poinformować o nim system operacyjny. Aby to zrobić, należy wpisać odpowiednią komendę w pliku konfiguracyjnym config.txt. W tym celu otwieramy ten plik w edytorze nano, wpisując w terminalu:
sudo hwclock -s
Teraz możemy cieszyć się zawsze aktualną godziną i datą w naszym komputerze jednopłytkowym, niezależnie czy jest podłączony do sieci, czy nie.
Nikodem Czechowski