- konstrukcja zbudowana w oparciu o scalony zegar RTC RV-3028,
- cztery opcje zasilania rezerwowego: bateria CR1220, bateria ładowalna VL1220, superkondensator lub kondensator ceramiczny,
- fabryczna kalibracja z dokładnością ±1 ppm @ 25°C.
Moduł Grove_RTC_RV3028 oparto o układ RV-3028, którego strukturę wewnętrzną pokazano na rysunku 1. Jest to nowoczesny, kalibrowany fabrycznie (±1 ppm, 25°C) zegar czasu rzeczywistego z obsługą podtrzymania bateryjnego oraz wyjątkowo niskim poborem prądu (45 nA, 3 V). Układ oferuje możliwość generowania alarmu na wyjściu przerwania INT i sygnału zegarowego o programowanej częstotliwości na wyjściu CLKOUT, obsługuje także przerwanie zewnętrzne na wejściu EVI. Układ podtrzymania bateryjnego współpracuje z bateriami (także ładowalnymi) oraz super-kondensatorami. Wbudowany obwód Trickle-Charger z czterema ustalanymi programowo wartościami prądu ładowania upraszcza konstrukcję układu. Do dyspozycji projektanta dostępne są 43 bajty pamięci EEPROM, warto też dodać, że rejestry wewnętrzne mogą być zabezpieczone przed zmianą zawartości za pomocą hasła użytkownika. Do RV-3028 oferowane jest wsparcie w postaci bibliotek przeznaczonych min. do Arduino oraz systemu Linux. W porównaniu do popularnych zegarów RTC typu DS1307 itp., układ oferuje znaczącą poprawę parametrów i zwiększoną funkcjonalność, warto więc rozważyć jego zastosowanie w nowych projektach.
Schemat modułu zegara RTC ukazano na rysunku 2. Moduł jest zgodny ze standardem Grove, zasilanie i magistrala danych doprowadzone zostały do złącza I²C. Rezystory R1 i R2 polaryzują szynę I²C i mogą zostać pominięte, jeżeli odpowiednie pull-upy są już wbudowane we współpracujący układ. RV-3028 wyposażony został w obwody podtrzymania zasilania, przełączające automatycznie źródła napięcia podczas zaniku zasilania podstawowego (VCC). Źródło zapasowe podłączone jest do wyprowadzenia VBKP. W zależności od preferencji i wymaganego czasu podtrzymania, można zastosować baterię litową lub akumulatorki. Wbudowany układ backup posiada diodę Schottky’ego blokującą przepływ wsteczny do VCC oraz konfigurowane programowo cztery rezystory o wartościach 3, 5, 9 oraz 15 kΩ, umożliwiające ograniczenie prądu ładowania. Jeżeli podtrzymanie nie jest wymagane, wyprowadzenie VBKP trzeba podłączyć do masy poprzez rezystor 10 kΩ, a obwód ładowania pozostawić wyłączony. Moduł obsługuje podtrzymanie napięcia za pomocą superkondensatora CB1 0,22 F/ 5,5 V, kondensatora ceramicznego CB2 100 μF/ 6,3 V oraz typowej baterii CR1220 montowanej w podstawce SMD (Connfly DS1092-12-N8S). Oczywiście należy wlutować tylko jeden element podtrzymujący. Akceptowalne jest zastosowanie litowych baterii ładowalnych, np. VL1220, ale należy zwrócić szczególną uwagę na dopuszczalne maksymalne napięcie ładowania danego modelu. RV-3028 nie stabilizuje różnicy potencjałów na zaciskach źródła, a jedynie ogranicza prąd poprzez wybór wartości rezystora szeregowego. W przypadku zasilania RTC z napięcia 5 V, po odjęciu spadku na wewnętrznej diodzie Schottky’ego, na wyprowadzeniu VBKP napięcie będzie wynosić ok. 4,5 V, co przekracza maksymalne dopuszczalne dla VL1220 3,55 V. Z kolei przy zasilaniu 2,7 V, napięcie na VBKP wynosić będzie ok. 2,2 V, co nie pozwoli doładować baterii.
Na złącze GPIO wyprowadzone są sygnały wyjścia przerwania INT oraz wejścia przerwania EVI. Linia INT pozwala na sygnalizację alarmów generowanych przez RV-3028 związanych z czasem, zasilaniem lub przerwaniem zewnętrznym. Wyjście jest typu OD i podciągnięte jest przez R5 do VBKP, co zapewnia działanie także podczas braku zasilania VCC i umożliwia – przykładowo – wybudzanie systemu ze stanu uśpienia. Wejście EVI może być używane do rejestracji przerwania zewnętrznego ze znakiem czasowym zapisywanym w rejestrach U1. Na złącze CKO wyprowadzony został sygnał z konfigurowanego generatora zegarowego; w zależności od ustawień układ jest zdolny do generowania przebiegu o częstotliwości 1, 32, 64, 1024, 8192, 32768 Hz, którego można użyć do czasowego wybudzania systemu.
Grove_RTC_RV3028 zmontowany jest na miniaturowej dwustronnej płytce drukowanej, mechanicznie zgodnej z systemem Grove. Rozmieszczenie elementów zaprezentowano na rysunku 3. Zmontowany został pokazany na fotografii otwierającej artykuł.
Montaż jest typowy i nie wymaga opisu, należy tylko określić, czy zastosowane będzie zasilanie rezerwowe. Jeżeli aplikacja nie wymaga podtrzymania RTC, montujemy tylko R3 pomijając C2, CB1, CB2, BAT. Jeżeli podtrzymanie będzie korzystać z baterii, montujemy C2 i podstawkę CR1220 wraz z baterią. Jeżeli stosujemy superkondensator, to montujemy C2 oraz – w zależności od wymaganego czasu podtrzymania – kondensator CB1 (0,22 F) lub ceramiczny CB2 (100 μF).
Sam układ nie wymaga uruchamiania; w celu sprawdzenia jego działania można skorzystać z Arduino i przeznaczonej do niego biblioteki RTC RV-3028-C7 lub Raspberry Pi i biblioteki pimoroni/rv3028-python (dostępne w serwisie github).
Szybkie sprawdzenie poprawności komunikacji da się w prosty sposób wykonać za pomocą Raspberry Pi. RV-3028 powinien być dostępny pod adresem 0x52, co sprawdzimy poleceniem:
0 1 2 3 4 5 6 7 8 9 a b c d e f
50: -- -- 52 -- -- -- -- -- -- -- -- -- -- -- -- --
Zawartość rejestrów oraz odliczanie czasu natomiast da się zweryfikować poprzez wykonanie zrzutu rejestrów z adresu 0x52:
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 25 46 09 01 20 08 23 80 80 80 00 00 00 00 30 00 %F?? ?#???....0.
10: 00 00 00 00 00 00 00 00 00 00 00 84 20 96 49 00 ...........? ?I.
20: 00 00 00 00 00 37 1c 00 33 00 00 0a 7a 12 19 19 .....7?.3..?z???
30: 00 00 00 00 00 c0 01 1c a9 19 00 00 00 00 00 00 .....?????......
Jeżeli wszystko działa, można moduł zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1...R5: 10 kΩ
- C1, C2: 100 nF (SMD 0603, X7R, 10 V)
- CB1: superkondensator 0,22 F/5 V (typ KR-5R5H224-R, patrz opis)
- CB2: 100 μF/6,3 V (SMD 1206, patrz opis)
- U1: RV-3028-C7-TAQC
- BAT: bateria CR1220 z podstawką (patrz opis)
- CKO: złącze SIP2 2,54 mm proste
- GPIO: złącze SIP3 2,54 mm proste