Zegar czasu rzeczywistego (RTC) to wyspecjalizowany układ elektroniczny, który nieprzerwanie odmierza i przechowuje aktualną datę oraz godzinę niezależnie od stanu urządzenia. Dzięki niemu komputery, sterowniki PLC, mikrokontrolery i moduły Arduino zachowują poprawny czas nawet po wyłączeniu zasilania lub ponownym uruchomieniu systemu.
Czym jest RTC? Podstawowa definicja
RTC, czyli Real-Time Clock, to najczęściej niewielki układ scalony lub blok sprzętowy odpowiedzialny za precyzyjne odmierzanie sekund, minut, godzin, dni, miesięcy i lat.
W odróżnieniu od typowych timerów mikrokontrolera RTC przechowuje czas bezwzględny, czyli datę i godzinę kalendarzową, a nie tylko liczbę cykli lub przerwań od ostatniego resetu. Układ działa autonomicznie, korzystając z własnego źródła taktowania oraz zazwyczaj z osobnego zasilania podtrzymującego.
Dzięki temu RTC kontynuuje odmierzanie czasu nawet po odłączeniu głównego zasilania urządzenia. Zegary czasu rzeczywistego są powszechnie stosowane w komputerach osobistych, serwerach, systemach wbudowanych, sterownikach PLC i urządzeniach IoT.
Dlaczego RTC jest potrzebny?
Bez sprzętowego RTC urządzenie po każdym wyłączeniu traciłoby informację o aktualnej dacie i godzinie. Musiałoby pobierać ją ponownie, na przykład z serwera NTP, sieci komórkowej, odbiornika GPS lub bezpośrednio od użytkownika.
RTC przechowuje bieżący czas niezależnie od tego, czy system pracuje, pozostaje w trybie uśpienia, czy został całkowicie wyłączony. Podczas uruchamiania urządzenia system odczytuje rejestry RTC i na ich podstawie ustawia zegar systemowy.
W systemach takich jak Raspberry Pi można użyć polecenia hwclock, aby zapisać czas systemowy w RTC albo ustawić czas systemowy zgodnie ze wskazaniem zegara sprzętowego.
Budowa RTC od strony sprzętowej
Typowy zegar czasu rzeczywistego składa się z następujących elementów:
- Rezonator kwarcowy – sercem większości układów RTC jest rezonator pracujący najczęściej z częstotliwością 32 768 Hz; układ zlicza jego stabilne drgania i na tej podstawie mierzy upływ czasu;
- Liczniki i dzielniki częstotliwości – sygnał oscylatora jest dzielony aż do uzyskania jednego impulsu na sekundę, a kolejne liczniki reprezentują sekundy, minuty, godziny, dni, miesiące i lata;
- Rejestry czasu i kalendarza – aktualna data i godzina są przechowywane w rejestrach dostępnych dla procesora lub mikrokontrolera; w wielu układach wartości zapisuje się w kodzie BCD;
- Zasilanie podtrzymujące – niewielka bateria litowa lub akumulator umożliwia dalszą pracę RTC po zaniku głównego zasilania;
- Interfejs komunikacyjny – układ komunikuje się z procesorem lub mikrokontrolerem przez magistralę I²C, SPI albo dedykowany interfejs, na przykład 3-przewodowy;
- Funkcje dodatkowe – wiele układów RTC obsługuje alarmy, przerwania, kalibrację programową i wyjścia sygnału zegarowego, które mogą służyć między innymi do wybudzania urządzenia z trybu uśpienia.
Popularny układ DS3231 udostępnia rejestry czasu przez magistralę I²C, zwykle pod adresem 0x68. Z kolei DS1302 wykorzystuje prosty interfejs 3-przewodowy z liniami CLK, DAT i RST.
Jak RTC odmierza czas – krok po kroku
Działanie zegara czasu rzeczywistego można przedstawić w kilku etapach:
- Generowanie sygnału – oscylator wytwarza stabilny sygnał o określonej częstotliwości, na przykład 32 768 Hz;
- Dzielenie częstotliwości – układ przetwarza sygnał tak, aby na wyjściu dzielnika pojawiał się jeden impuls na sekundę;
- Zliczanie sekund – licznik zwiększa wartość przy każdym impulsie, a po osiągnięciu 60 zeruje się i zwiększa licznik minut;
- Obsługa kalendarza – po upływie 60 minut zwiększa się licznik godzin, natomiast kolejne liczniki obsługują dni, miesiące i lata zgodnie z regułami kalendarza;
- Udostępnianie danych – wartości liczników są zapisywane w rejestrach, dzięki czemu mikrokontroler może w dowolnym momencie odczytać aktualną datę i godzinę;
- Praca awaryjna – po zaniku głównego zasilania RTC przełącza się na źródło podtrzymujące i nadal odmierza czas.
RTC a zegar systemowy i timery
RTC, zegar systemowy oraz sprzętowe timery pełnią różne funkcje:
- Zegar czasu rzeczywistego – przechowuje datę i godzinę niezależnie od stanu systemu, a jego wskazanie jest zwykle odczytywane podczas uruchamiania urządzenia;
- Zegar systemowy – jest używany przez system operacyjny i aplikacje; może zostać zainicjalizowany na podstawie RTC, a następnie korygowany przez NTP lub inne źródło czasu;
- Timery i liczniki mikrokontrolera – odmierzają czas względem pracy procesora oraz służą do generowania przerwań, sygnałów PWM i opóźnień, lecz nie przechowują daty ani czasu kalendarzowego.
RTC jest sprzętowym źródłem daty i godziny, natomiast zegar systemowy stanowi bieżącą reprezentację czasu wykorzystywaną przez oprogramowanie.
Typowe zastosowania RTC w systemach elektronicznych
RTC znajduje zastosowanie wszędzie tam, gdzie urządzenie musi zachować aktualny czas lub wykonywać zadania zgodnie z harmonogramem:
- Komputery osobiste i serwery – RTC przechowuje datę i godzinę odczytywane podczas uruchamiania systemu operacyjnego;
- Systemy wbudowane i sterowniki PLC – zegar umożliwia harmonogramowanie zadań, oznaczanie zdarzeń czasem oraz wykonywanie operacji zależnych od kalendarza;
- Mikrokontrolery i Arduino – zewnętrzne moduły z układami DS1302, DS1307 lub DS3231 zachowują czas nawet po wyłączeniu głównego mikrokontrolera;
- Raspberry Pi i inne minikomputery – dodatkowy moduł RTC zapewnia prawidłowy czas bez dostępu do internetu i serwerów NTP;
- Rejestratory danych – pomiary temperatury, energii, ruchu i innych wielkości mogą być oznaczane dokładną datą oraz godziną;
- Automatyka domowa, alarmy i oświetlenie – RTC pozwala realizować harmonogramy, sterować urządzeniami według pory dnia oraz czasowo uzbrajać systemy alarmowe.
Przykład – RTC w projekcie Arduino
Moduły RTC są często stosowane w projektach Arduino, ponieważ pozwalają zachować aktualny czas niezależnie od resetu lub odłączenia głównego zasilania.
Typowa konfiguracja i obsługa modułu przebiega następująco:
- Podłączenie modułu – DS3231 lub podobny układ podłącza się do zasilania oraz linii SDA i SCL magistrali I²C;
- Ustawienie czasu – podczas pierwszego uruchomienia aktualna data i godzina są zapisywane w rejestrach RTC za pomocą programu Arduino lub narzędzia konfiguracyjnego;
- Okresowy odczyt – mikrokontroler cyklicznie pobiera datę i godzinę przez magistralę I²C, korzystając z adresu układu i odpowiednich rejestrów;
- Podtrzymanie pracy – po zaniku głównego zasilania moduł przechodzi na zasilanie bateryjne, dzięki czemu po ponownym uruchomieniu Arduino nadal udostępnia aktualny czas.
W układzie DS1302 komunikacja odbywa się przez prosty interfejs 3-przewodowy. Dostępne biblioteki Arduino obsługują odczyt i zapis rejestrów, dlatego nie trzeba samodzielnie implementować całego protokołu komunikacyjnego.
Dokładność, błędy i kompensacja temperatury
Kwarcowe zegary RTC są stabilne, ale nie są całkowicie pozbawione błędów. Częstotliwość oscylatora może nieznacznie odbiegać od wartości nominalnej z powodu tolerancji produkcyjnej, starzenia się elementów i zmian temperatury.
W rezultacie zegar może spieszyć się lub późnić o kilka sekund na dobę. W dłuższym okresie prowadzi to do zauważalnej różnicy między wskazaniem RTC a rzeczywistym czasem.
Układy takie jak DS3231 wykorzystują oscylator z kompensacją temperatury, co znacząco ogranicza dryft częstotliwości w typowych warunkach pracy. Niektóre zegary RTC umożliwiają również programową korektę błędu za pomocą rejestrów kalibracyjnych.
W urządzeniach podłączonych do sieci wskazanie RTC może być okresowo synchronizowane z serwerami NTP. Pozwala to skorygować nagromadzony błąd i zachować dokładny czas przez cały okres eksploatacji.
RTC a aspekty systemowe BIOS i UEFI
W komputerach zegar RTC jest częścią logiki płyty głównej. Bateria podtrzymująca zasila przede wszystkim zegar czasu rzeczywistego, dzięki czemu data i godzina są zachowywane po wyłączeniu komputera.
W starszych systemach bateria podtrzymywała również pamięć CMOS z ustawieniami BIOS-u. W nowoczesnych komputerach konfiguracja UEFI jest zazwyczaj przechowywana w pamięci nieulotnej, dlatego nie wymaga ciągłego zasilania.
Poprawne ustawienie RTC ma znaczenie dla rejestrowania zdarzeń, wykonywania harmonogramów, sprawdzania ważności certyfikatów i bezpiecznej komunikacji sieciowej. Nieprawidłowa data może powodować błędy podczas aktualizacji oprogramowania, uwierzytelniania oraz nawiązywania szyfrowanych połączeń.
Najczęstsze pułapki przy pracy z RTC
Podczas projektowania systemu z zegarem czasu rzeczywistego należy uwzględnić kilka typowych problemów:
- Format danych – wiele układów przechowuje czas w kodzie BCD, dlatego odczyt i zapis wymagają prawidłowej konwersji wartości;
- Strefy czasowe i czas letni – RTC zazwyczaj przechowuje czas UTC albo czas lokalny bez automatycznej obsługi zmiany strefy i czasu letniego, dlatego odpowiednie korekty musi wykonywać oprogramowanie;
- Lata przestępne i długość miesięcy – kalendarz powinien prawidłowo uwzględniać różną liczbę dni w miesiącach oraz reguły dotyczące lat przestępnych;
- Żywotność baterii – po kilku latach bateria podtrzymująca może się rozładować, co prowadzi do utraty prawidłowego czasu po odłączeniu głównego zasilania;
- Stan oscylatora – po wymianie baterii, długim przechowywaniu lub pierwszym uruchomieniu należy sprawdzić, czy oscylator działa, a rejestry zawierają poprawne dane;
- Spójność odczytu – podczas pobierania kilku rejestrów może nastąpić zmiana sekundy, dlatego warto korzystać z mechanizmów zapewniających spójny odczyt całej daty i godziny.


