RTC Hodiny reálného času DS3231 + AT24C32 paměťový modul

Modul s DS3231 a AT24C32 má dvě funkce. První obvod DS3231 je označovaný jako RTC – Hodiny reálného času. A druhý obvod AT24C32 je paměťový modul typu EEPROM.
Tento návod se věnuje hlavně obvodu RTC DS3231, který vyniká oproti svým konkurentům ve své vysoké přesnosti. Té je dosaženo integrovaným teplotně kompenzovaným krystalem, který má v rozsahu teplot 0-40 °C přesnost 2 ppm.
Komunikace s celým modulem probíhá po sběrnici I2C a napájecí napětí je možné použít 3,3 nebo 5 Voltu. Pro paměťový obvod pak také můžeme nastavit až 8 různých adres díky propojkám A0-A2 na modulu. A pro zálohování uložených informací v obvodech můžeme využít slot na baterii typu 2032, která není součástí balení.

Pro úspěšné propojení modulu DS3231 a Arduino desky stačí zapojit celkem 4 vodiče. Propojíme SCL s pinem A5, SDA s pinem A4, VCC s 5V Arduina a GND se zemí Arduina. Pro piny SDA a SCL musíme vybrat vždy vyhrazené I2C piny na námi vybrané desce, u Arduino UNO jsou to právě piny A4 a A5.

Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu DS3231, návod, jak na to, je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven, inicializaci modulu z knihovny a vytvoření proměnné pro práci s časem.
V podprogramu setup provedeme zahájení komunikace po sériové lince a komunikace s RTC obvodem. V dalším kroku můžeme nahrát do RTC aktuální čas, který při použití prvního způsobu bude brán z času kompilace programu. Zde je nutné podotknout, že se může objevit cca 10-15 sekundové zpoždění mezi kompilací a samotným nahráním programu. Pokud byste tedy chtěli nahrát čas ručně, můžete využít druhý uvedený způsob v komentáři.
Nekonečná smyčka loop začíná načtením času do proměnné. Poté už můžeme ze zmíněné proměnné postupně vytisknout všechny údaje odděleně – rok, měsíc atd. A po celém vytištění už následuje jen pauza před novým během smyčky loop.

// RTC Hodiny reálného času DS3231

// připojení potřebných knihoven
#include <Wire.h>
#include <DS3231.h>
// inicializace RTC z knihovny
DS3231 rtc;
// vytvoření proměnné pro práci s časem
RTCDateTime datumCas;

void setup() {
  // zahájení komunikace po sériové lince
  // rychlostí 9600 baud
  Serial.begin(9600);
  // zahájení komunikace s RTC obvodem
  rtc.begin();
  // nastavení času v RTC podle času kompilace programu,
  // stačí nahrát jednou
  rtc.setDateTime(__DATE__, __TIME__);
  // přímé nastavení času pro RTC
  //rtc.setDateTime(__DATE__, "12:34:56");
}
void loop() {
  // načtení času z RTC do proměnné
  datumCas = rtc.getDateTime();
  // postupný tisk informací po sériové lince
  Serial.print("Datum a cas DS3231: ");
  Serial.print(datumCas.year);   Serial.print("-");
  Serial.print(datumCas.month);  Serial.print("-");
  Serial.print(datumCas.day);    Serial.print(" ");
  Serial.print(datumCas.hour);   Serial.print(":");
  Serial.print(datumCas.minute); Serial.print(":");
  Serial.print(datumCas.second); Serial.println("");
  // pauza na konci smyčky loop
  delay(1000);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným modulem DS3231 dostaneme například tento výsledek:

Datum a cas DS3231: 2018-3-13 19:15:41
Datum a cas DS3231: 2018-3-13 19:15:42
Datum a cas DS3231: 2018-3-13 19:15:43
Datum a cas DS3231: 2018-3-13 19:15:44

Kombinace RTC typu DS3231 a paměťového obvodu AT24C32 je šikovný rozšiřovací modul pro Arduino. Díky kombinaci obvodu reálného času a paměťového obvodu může najít mnoho uplatnění v projektech, kde potřebujeme pracovat s časem a zároveň ukládat nějaké údaje. Typicky se tedy jedná například o různé dataloggery, meteostanice a jiné.
Pro využití paměťového obvodu můžete použít program z tohoto staršího článku, přičemž jediná změna je u adresy na B01010111, kde poslední tři číslice odpovídají zmíněným propojkám A0-A2.

 

Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1261-rtc-hodiny-realneho-casu-ds3231-at24c32-iic-pametovy-modul-pro-arduino-1459971336.html

Další podobné články