Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Budowa modułu DS3231

Moduł DS3231 to bardzo precyzyjny w odmierzaniu czasu rzeczywistego zegar RTCmoduł RTCRTC, który komunikuje się po szynie I2CI2CI2C. Wyposażony jest w układ kompensacji temperaturowej oscylatora (TCX0) i w zintegrowany kwarc, dzięki czemu nie ma już konieczności podpięcia zewnętrznego generatora kwarcowego. Do tego posiada większy zakres napięcia (2.3 V - 5.5 V) oraz baterię podtrzymującą pamięć.

R1duW5MgAGaeN
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Na płytce mieści się także pamięć EEPROMpamięć EEPROMpamięć EEPROM AT24C32, która daje 32K pamięci, a zapisane w niej dane nie są usuwane w przypadku braku zasilania. Pozwala to na stworzenie np. prostego rejestratora zdarzeń.

Jeśli nie chcemy ingerować w strukturę modułu, najlepiej zastosować akumulator LIR2032. Możemy też użyć zwykłej baterii CR2032, ale w takiej sytuacji musimy pamiętać o kwestii jej ładowania. W przypadku, gdy moduł ma być zasilany napięciem 5V, należy odlutować diodę przy układzie DS3231 lub przeciąć ścieżkę pomiędzy diodą a rezystorem (chodzi o ścieżkę biegnącą na lewo od litery S w oznaczeniu SCL). Natomiast przy zasilaniu modułu napięciem 3.3V nie ma takiej potrzeby. Spadek napięcia na diodzie sprawia, że dopóki napięcie ładowania nie jest większe od napięcia baterii – ta nie będzie ładowana, a dioda zapobiegnie rozładowywaniu baterii.

Specyfikacja modułu DS3231

  • Zasilanie: 3,3 V - 5,5 V

  • Interfejs komunikacji: I2C

  • Układ zegara: DS3231

    • dokładność:

      • ±2 ppm od 0°C to +40°C

      • ±3.5 ppm od -40°C to +85°C

    • pomiar temperatury z dokładnością ±3°C

    • adres I2C: 0 x 68

    • podtrzymanie pamięci (wymienialną) baterią 2032

  • Pamięć EEPROM

    • pojemność: 32 kb

    • adres I2C: 0 x 57

  • Dodatkowe wyjścia: SDA, SCL, VCC i GND do kaskadowego podłączenia kolejnego modułu pracującego na magistrali I2C

  • Wymiary: 38 x 22 mm

Piny

  • VCC, GND – zasilanie

  • SCL, SDA – piny magistrali I2C

  • SQW – wyjście sygnału prostokątnego lub źródło przerwań dla alarmów

  • 32K – sygnał prostokątny o częstotliwości 32 kHz

Funkcje

  • Zegar RTC z podtrzymaniem pamięci (wbudowana bateria):

    • odmierza sekundy, minuty, godziny, dni miesiąca, miesiące, dni tygodnia, lata,

    • zawiera dwa alarmy do ustawienia (z wieloma możliwymi interwałami do wyboru),

    • wyznacza lata przestępne do roku 2100,

    • dokonuje pomiary temperatury.

  • Pamięć EEPROM (konfigurowalny adres na magistrali I2C za pomocą zworek A0, A1 i A2)

Przykłady pracy z modułem DS3231

Wyświetlanie daty i czasu

Co nam będzie potrzebne:

  • moduł DS3231,

  • płytka Arduino Uno,

  • przewody połączeniowe męsko‑żeńskie.

Do poprawnego działania moduł DS3231 potrzebuje zainstalowanej biblioteki DS3231.h. Można ją pobrać, klikając w odnośnik:

RjNf3CsD74RBV

Przycisk z plikiem biblioteki DS3231 wykorzystanej w projekcie

Plik ZIP o rozmiarze 380.03 KB w języku polskim

Po pobraniu bibliotekę należy zainstalować w Arduino IDE.

Podłączamy moduł DS3231 według następującego schematu:

R2TDLnXlrEdwP
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Teraz przechodzimy do programowania.

Najpierw dołączamy bibliotekę.

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny.

Następnie inicjujemy DS3231 za pomocą interfejsu sprzętowego.

Linia 1. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik.

W pętli setup() ustawiamy prędkość połączenia z monitorem portu szeregowego na 115200 bodów.

Linia 1. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik.

Ustawiamy ręcznie datę i godzinę.

Czas i datę wpisujemy według poniższego kodu. Ustawiamy dzień tygodnia, czas (HH:MM:SS) oraz datę (DD:MM:YYYY).

Linia 1. rtc kropka setDOW otwórz nawias okrągły WEDNESDAY zamknij nawias okrągły średnik. Linia 2. rtc kropka setTime otwórz nawias okrągły 11 przecinek 05 przecinek 0 zamknij nawias okrągły średnik. Linia 3. rtc kropka setDate otwórz nawias okrągły 25 przecinek 1 przecinek 2021 zamknij nawias okrągły średnik.

W pętli loop() deklarujemy, jakie informacje będą wyświetlane w monitorze portu szeregowego.

Linia 1. Serial kropka print otwórz nawias okrągły rtc kropka getDOWStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 2. Serial kropka print otwórz nawias okrągły cudzysłów cudzysłów zamknij nawias okrągły średnik. Linia 4. Serial kropka print otwórz nawias okrągły rtc kropka getDateStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 5. Serial kropka print otwórz nawias okrągły cudzysłów minus minus cudzysłów zamknij nawias okrągły średnik. Linia 7. Serial kropka println otwórz nawias okrągły rtc kropka getTimeStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik.

Kod

Całość kodu wygląda następująco:

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny. Linia 3. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik. Linia 5. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik. Linia 9. rtc kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. prawy ukośnik prawy ukośnik rtc kropka setDOW otwórz nawias okrągły WEDNESDAY zamknij nawias okrągły średnik. Linia 12. prawy ukośnik prawy ukośnik rtc kropka setTime otwórz nawias okrągły 11 przecinek 20 przecinek 00 zamknij nawias okrągły średnik. Linia 13. prawy ukośnik prawy ukośnik rtc kropka setDate otwórz nawias okrągły 25 przecinek 01 przecinek 2021 zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy. Linia 16. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. Serial kropka print otwórz nawias okrągły rtc kropka getDOWStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 18. Serial kropka print otwórz nawias okrągły cudzysłów cudzysłów zamknij nawias okrągły średnik. Linia 20. Serial kropka print otwórz nawias okrągły rtc kropka getDateStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 21. Serial kropka print otwórz nawias okrągły cudzysłów minus minus cudzysłów zamknij nawias okrągły średnik. Linia 23. Serial kropka println otwórz nawias okrągły rtc kropka getTimeStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 25. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik. Linia 26. zamknij nawias klamrowy.

Teraz wgrajmy kod do Arduino Uno i sprawdźmy, co pojawi nam się w monitorze portu szeregowego.

R1A2UwkOAOxK4

Wyświetlanie temperatury

Co nam będzie potrzebne:

  • moduł DS3231,

  • płytka Arduino Uno,

  • przewody połączeniowe męsko‑żeńskie.

Połączenie jest identyczne jak w przypadku wyświetlania daty i czasu, więc nie musimy niczego przepinać.

Przejdźmy zatem do pisania programu.

Najpierw dołączamy bibliotekę.

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny.

Następnie inicjujemy DS3231 za pomocą interfejsu sprzętowego.

Linia 1. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik.

W pętli setup() ustawiamy prędkość połączenia z monitorem portu szeregowego na 115200 bodów.

Linia 1. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik.

Inicjujemy obiekt RTC.

Linia 1. rtc kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik.

W pętli loop() deklarujemy wyświetlanie temperatury.

Linia 1. Serial kropka print otwórz nawias okrągły cudzysłów Temperatura wynosi dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 2. Serial kropka print otwórz nawias okrągły rtc kropka getTemp otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 3. Serial kropka println otwórz nawias okrągły cudzysłów st kropka C cudzysłów zamknij nawias okrągły średnik.

Kod

Całość kodu wygląda następująco:

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny. Linia 3. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik. Linia 5. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik. Linia 8. rtc kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 9. zamknij nawias klamrowy. Linia 11. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. Serial kropka print otwórz nawias okrągły cudzysłów Temperatura wynosi dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 13. Serial kropka print otwórz nawias okrągły rtc kropka getTemp otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 14. Serial kropka println otwórz nawias okrągły cudzysłów st kropka C cudzysłów zamknij nawias okrągły średnik. Linia 15. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik. Linia 16. zamknij nawias klamrowy.

Teraz wgrajmy kod do Arduino Uno i sprawdźmy, co pojawi się w monitorze portu szeregowego.

R1RaQTMwG7cGX

„Podgrzejmy” trochę moduł i sprawdźmy, jakie teraz będą odczyty.

R25s6OXuldeY7
Polecenie 1

Zmodyfikuj kod tak, by w monitorze portu szeregowego pokazywane były następujące informacje:

  • data,

  • czas,

  • temperatura.

R1Qp17pQPXMNy
Arduino
Polecenie 2

Podłącz wyświetlacz LCD i wyświetl na nim następujące informacje:

  • Ekran 1:

    • wiersz 1: data

    • wiersz 2: czas

Czas wyświetlania ekranu 1 wynosi 5 sekund.

  • Ekran 2:

    • wiersz 1: wyświetla napis TEMPERATURA:

    • wiersz 2: wyświetla aktualną temperaturę.

Czas wyświetlania ekranu 2 wynosi 5 sekund.

RWeQzfKVchlzX
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
RWOtEOwWP9FxA
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Polecenie 3

Zmodyfikuj kod tak, by w jednej kratce wyświetlany był znak Indeks górny oC.

R19lnSsFDiIuh
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Rs4oTujuDuSwE
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

moduł RTC
moduł RTC

inaczej zegar czasu rzeczywistego

I2C
I2C

szeregowa, dwukierunkowa magistrala służąca do przesyłania danych w urządzeniach elektronicznych

pamięć EEPROM
pamięć EEPROM

(ang. electrically erasable programmable read‑only memory) rodzaj nieulotnej pamięci komputerowej; pamięć EEPROM w odróżnieniu od pamięci EPROM może być kasowana tylko przy użyciu prądu elektrycznego