DS1307 to chyba jeden z najpopularniejszych układów RTC służących do odmierzania czasu w projektach Arduino, wykorzystywany podczas tworzenia różnego rodzaju zegarków. Niestety sprawia on często wiele kłopotów z dokładnością odmierzania czasu. Czy należy się martwić, jeśli zegarek śpieszy się o minutę na miesiąc? A pięć minut na miesiąc? Z czego to wynika? Jak sobie z nią poradzić i czy w ogóle mamy na to wpływ? Czy wiesz, że ten malutki układzik posiada generator przebiegu prostokątnego i pozwala na zapisanie w pamięci 56 bajtów?
Zegar czasu rzeczywistego RTC DS1307
DS1307 to chyba jeden z najpopularniejszych układów RTC służących do odmierzania czasu w projektach Arduino podczas tworzenia różnego rodzaju zegarków. Układ ten możemy swobodnie kupić już za około 3 zł, dlatego też jest bardzo chętnie wykorzystywany w ogromnej ilości gotowych modułów.
Ma tu wpływ nie tylko jego cena, ale zdolność komunikacji z naszym mikrokontrolerem za pośrednictwem magistrali I2C.
DS1307 posiada możliwość zasilania bateryjnego z zakresu 2V ÷ 3.5V, które ma na zadanie podtrzymanie pracy zegara po zaniku głównego zasilania układu. Napięcie zasilania może mieścić się w zakresie od 4.5V ÷ 5.5V przy poborze prądu na poziomie 1mA. Do poprawnego działania wymagany jest zewnętrzny kwarc 32.768Hz o pojemności obciążenia CL=12.5pF.
Warto tutaj wspomnieć o dodatkowych właściwościach układu, takich jak generator przebiegu prostokątnego, o częstotliwościach 1Hz, 4096Hz, 8192Hz lub 32768Hz. DS1307 oferuje również podtrzymywaną bateryjne pamięć o rozmiarze 56 bajtów. Te dwie cechy są sukcesywnie pomijane przez twórców bibliotek oraz producentów gotowych modułów, poprzez nie umieszczanie wyprowadzenia do odpowiedniego pinu SQW/OUT.
A szkoda – sygnał 1Hz możemy wykorzystać do obsługi przerwania aktualizacji wyświetlania czasu na ekranie LCD lub podłączenia mrugającego dwukropka pomiędzy godziną a minutą, oszczędzając tym samym pin cyfrowy Arduino i miejsce w pamięci na zbędny fragment programu.
Schemat połączeń
Połączenie DS1307 jest bardzo proste. Podłączamy zasilanie 5V (nóżka 8), masę GND (nóżka 4) orazkwarc zegarkowy 32768Hz pomiędzy nóżki 1 i 2 . Jak wspomniałem wcześniej, układ ten komunikuje się z Arduino za pomocą magistrali I2C, a więc SCL (nóżka 6) do pinu A5, a SDA (nóżka 5) do pinu A4. Nie zapomnijmy podciągnąć linii sygnałowych rezystorami o wartości 10kΩ do zasilania5V.
Należy zwrócić tutaj szczególną uwagę na wyjście SQW/OUT, które również podciągamy rezystorem o wartości 10kΩ do zasilania 5V. Jest to element wymagany ponieważ wyjście SQW/OUT działa w układzie otwartego drenu. Dodatkowo jeśli chcemy podłączyć do niego diodę LED, należy podłączyć tutaj katodę, anodę zaś – do masy. Jeśli nie planujemy korzystać z SQW/OUT, możemy pozostawić je „w powietrzu”.