Hodiny na mikrokontroléru DS3231 a AVR. Synchronizace času na modulu DS3231 s počítačem Komponenty pro připojení

V mnoha projektech Arduino je nutné sledovat a zaznamenávat čas výskytu určitých událostí. Modul hodin reálného času vybavený extra baterie, umožňuje uložit aktuální datum bez závislosti na dostupnosti napájení na samotném zařízení. V tomto článku budeme hovořit o nejběžnějších RTC modulech DS1307, DS1302, DS3231, které lze použít s deskou Arduino.

Hodinový modul je malá deska obsahující zpravidla jeden z mikroobvodů DS1307, DS1302, DS3231 Kromě toho na desce prakticky najdete mechanismus pro instalaci baterie. Takové tabule se často používají ke sledování času, data, dne v týdnu a dalších chronometrických parametrů. Moduly fungují na autonomní napájení – baterie, akumulátory a pokračují v počítání, i když je napájení Arduina vypnuto. Nejběžnější modely hodinek jsou DS1302, DS1307, DS3231. Jsou založeny na modulu RTC (real time clock) připojeném k Arduinu.

Hodiny se počítají v jednotkách, které jsou vhodné pro průměrného člověka – minuty, hodiny, dny v týdnu a další, na rozdíl od běžných čítačů a generátorů hodin, které čtou „ticky“. Arduino má speciální funkci millis(), která také umí číst různé časové intervaly. Hlavní nevýhodou této funkce je ale to, že se po zapnutí časovače vynuluje. S jeho pomocí můžete pouze číst čas, není možné nastavit datum nebo den v týdnu. K vyřešení tohoto problému se používají moduly hodin reálného času.

Elektronický obvod obsahuje mikroobvod, napájecí zdroj, křemenný rezonátor a odpory. Křemenný rezonátor pracuje na frekvenci 32768 Hz, což je vhodné pro běžný binární čítač. Obvod DS3231 má vestavěnou quartzovou a tepelnou stabilizaci, která umožňuje vysoce přesné hodnoty.

Porovnání oblíbených RTC modulů DS1302, DS1307, DS3231

V této tabulce jsme poskytli seznam nejoblíbenějších modulů a jejich hlavních charakteristik.

Jméno Frekvence Přesnost Podporované protokoly
DS1307 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz Závisí na křemeni - obvykle hodnota dosahuje 2,5 sekundy za den, nelze dosáhnout přesnosti vyšší než 1 sekunda za den. Přesnost také závisí na teplotě. I2C
DS1302 32,768 kHz 5 sekund denně I2C, SPI
DS3231 Dva výstupy - první na 32,768 kHz, druhý programovatelný od 1 Hz do 8,192 kHz ±2 ppm při teplotách od 0C do 40C.

±3,5 ppm při teplotách od -40C do 85C.

Přesnost měření teploty – ±3С

I2C

Modul DS1307

DS1307 je modul, který se používá pro časování. Je sestaven na základě čipu DS1307ZN, napájení pochází z lithiová baterie pro realizaci výdrž baterie po dlouhou dobu. Baterie na desce je namontována na zadní straně. Modul má čip AT24C32 - jedná se o 32 KB energeticky nezávislou paměť EEPROM. Oba mikroobvody jsou propojeny sběrnicí I2C. DS1307 má nízká spotřeba energie a obsahuje hodiny a kalendář až do roku 2100.

Modul má následující parametry:

  • Napájení – 5V;
  • Rozsah provozních teplot od -40C do 85C;
  • 56 bajtů paměti;
  • lithiová baterie LIR2032;
  • Implementuje 12 a 24 hodinový režim;
  • Podpora rozhraní I2C.

Modul má své opodstatnění v případech, kdy jsou data odečítána poměrně zřídka, v týdenních a více intervalech. To vám umožní ušetřit energii, protože nepřerušované používání bude vyžadovat vyšší napětí, a to i s baterií. Přítomnost paměti umožňuje registraci různé parametry(například měření teploty) a číst přijaté informace z modulu.

Interakce s ostatními zařízeními a výměna informací s nimi probíhá pomocí I2C rozhraní z pinů SCL a SDA. Obvod obsahuje odpory, které umožňují poskytnout požadovanou úroveň signálu. Na desce je také speciální místo pro montáž teplotního čidla DS18B20 Kontakty jsou rozděleny do 2 skupin, rozteč 2,54 mm. První skupina kontaktů obsahuje následující piny:

  • DS – výstup pro snímač DS18B20;
  • SCL – hodinová linka;
  • SDA – datová linka;
  • VCC – 5V;

Druhá skupina kontaktů obsahuje:

  • SQ – 1 MHz;
  • BAT – vstup pro lithiovou baterii.

Pro připojení k desce Arduino potřebujete samotnou desku (v tomto případě uvažujeme Arduino Uno), modul hodin reálného času RTC DS1307, vodiče a USB kabel.

Pro připojení ovladače k ​​Arduinu slouží 4 piny - VCC, zem, SCL, SDA.. VCC z hodin je připojeno na 5V na Arduinu, zem z hodin je připojena k zemi z Arduina, SDA - A4, SCL - A5.

Chcete-li začít pracovat s hodinovým modulem, musíte nainstalovat knihovny DS1307RTC, TimeLib a Wire. Pro práci můžete také použít RTCLib.

Kontrola modulu RTC

Když spustíte první kód, program načte data z modulu jednou za sekundu. Nejprve můžete vidět, jak se program chová, pokud vyjmete baterii z modulu a vyměníte ji za jinou, zatímco deska Arduino není připojena k počítači. Musíte počkat několik sekund a vyjmout baterii, případně se hodinky restartují. Poté musíte vybrat příklad z nabídky Příklady→RTClib→ds1307. Důležité je správně nastavit přenosovou rychlost na 57600 bps.

Když otevřete okno Serial Monitor, měly by se objevit následující řádky:

Čas ukáže 0:0:0. Hodinky totiž ztrácejí energii a přestanou počítat čas. Z tohoto důvodu nesmí být baterie vyjímána, když je modul v provozu.

Chcete-li nastavit čas na modulu, musíte najít čáru ve skice

RTC.adjust(DateTime(__DATE__, __TIME__));

Tento řádek bude obsahovat data z počítače, který se používá k flashování modulu hodin reálného času. Pro správnou funkci musíte nejprve zkontrolovat, zda je v počítači správné datum a čas, a teprve poté začít blikat hodinovým modulem. Po nastavení se na monitoru zobrazí následující údaje:

Nastavení je provedeno správně a není třeba dodatečně překonfigurovat hodiny reálného času.

Čtení času. Jakmile je modul nakonfigurován, lze odesílat časové požadavky. To se provádí pomocí funkce now(), která vrací objekt DateTime, který obsahuje informace o čase a datu. Existuje řada knihoven, které se používají ke čtení času. Například RTC.year() a RTC.hour() - samostatně získávají informace o roce a hodině. Při práci s nimi může nastat problém: například požadavek na zobrazení času bude v 1:19:59. Před zobrazením času 1:20:00 hodiny zobrazí čas 1:19:00, což znamená, že v podstatě dojde ke ztrátě jedné minuty. Proto je vhodné tyto knihovny používat v případech, kdy ke čtení nedochází často – jednou za pár dní. Existují další funkce pro čas volání, ale pokud potřebujete snížit chyby nebo se jim vyhnout, je lepší použít now() a extrahovat z ní potřebné údaje.

Příklad projektu s hodinovým modulem a displejem i2C

Projekt jsou běžné hodiny; přesný čas a dvojtečka mezi čísly bude blikat v intervalech jedné sekundy. K realizaci projektu budete potřebovat desku Arduino Uno, digitální indikátor, hodiny reálného času (v tomto případě výše popsaný modul ds1307), štít pro připojení (v tomto případě je použit Troyka Shield), baterie pro hodiny a dráty.

Projekt využívá jednoduchý čtyřmístný indikátor na čipu TM1637. Zařízení má dvoudrátové rozhraní a poskytuje 8 úrovní jasu monitoru. Používá se pouze pro zobrazení času ve formátu hodiny:minuty. Indikátor se snadno používá a snadno se připojuje. Je výhodné použít pro projekty, kde není vyžadováno minutové nebo hodinové ověřování dat. Chcete-li získat více kompletní informace LCD monitory se používají k zobrazení času a data.

Modul hodin je připojen na piny SCL/SDA, které patří ke sběrnici I2C. Musíte také připojit zem a napájení. K Arduinu se připojuje stejným způsobem, jak je popsáno výše: SDA – A4, SCL – A5, zem z modulu na zem z Arduina, VCC -5V.

Indikátor se zapojuje jednoduše - jeho piny CLK a DIO jsou připojeny k libovolným digitálním pinům na desce.

Skica. Pro zápis kódu použijte funkci setup, která vám umožní inicializovat hodiny a indikátor a zaznamenat čas kompilace. Tisk času na obrazovku bude proveden pomocí smyčky.

#zahrnout #include "TM1637.h" #include "DS1307.h" //musíte zahrnout všechny potřebné knihovny pro práci s hodinami a displejem. char čas kompilace = __TIME__; //čas kompilace. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 //čísla z výstupů Arduina, ke kterým je obrazovka připojena; void setup() ( display.set(); display.init(); //připojení a konfigurace obrazovky. clock.begin(); //zapnutí hodin. byte hour = getInt(compileTime, 0); byte minute = getInt( kompilovaný čas, 2 bajt sekunda = getInt(compileTime, 4); //získání času přijato v vnitřní paměti, začátek čtení času. ) void loop() ( int8_t timeDisp; //zobrazení na každé ze čtyř číslic. clock.getTime(); //dotaz na získání času. timeDisp = clock.hour / 10; timeDisp = clock.hour % 10; timeDisp = clock .minute / 10; timeDisp = clock.minute % 10; //různé operace pro získání desítek, jednotek hodin, minut atd. display.display(timeDisp //zobrazení času na ukazateli display.point); (hodina.sekunda %) 2 ? POINT_ON: POINT_OFF);//zapnutí a vypnutí dvojtečky po sekundě ) char getInt(const char* řetězec, int startIndex) ( return int(string - "0") * 10. + int(string) - "0"; //akce pro správný zápis času do dvoumístného celého čísla. Jinak se na obrazovce zobrazí pouze několik znaků.

Poté je třeba náčrt načíst a čas se zobrazí na monitoru.

Program by mohl být mírně modernizován. Když je napájení vypnuto, náčrt napsaný výše způsobí, že se na displeji po zapnutí zobrazí čas, který byl nastaven při kompilaci. Ve funkci nastavení se vždy vypočítá čas, který uplynul od 00:00:00 do začátku kompilace. Tento hash bude porovnán s tím, co je uloženo v EEPROM, která zůstane zachována po odpojení napájení.

Chcete-li čas zápisu a čtení do nebo z energeticky nezávislé paměti, musíte přidat funkce EEPROMWriteInt a EEPROMReadInt. Jsou potřeba ke kontrole, zda se hash shoduje/neshoduje s hashem zaznamenaným v EEPROM.

Projekt lze vylepšit. Pokud používáte LCD monitor, můžete vytvořit projekt, který zobrazuje datum a čas na obrazovce. Zapojení všech prvků je znázorněno na obrázku.

V důsledku toho bude kód muset zadat novou knihovnu (pro obrazovky z tekutých krystalů je to LiquidCrystal) a přidat řádky do funkce loop(), aby získal datum.

Operační algoritmus je následující:

  • Připojení všech komponentů;
  • Zkontrolujte – čas a datum na obrazovce monitoru by se měly měnit každou sekundu. Pokud obrazovka říká špatný čas, musíte do skici přidat funkci RTC.write (tmElements_t tm). Problémy s nesprávným časem jsou způsobeny tím, že hodinový modul po vypnutí resetuje datum a čas na 00:00:00 01.01.2000.
  • Funkce zápisu umožňuje získat datum a čas z počítače, po kterém se na obrazovce zobrazí správné parametry.

Závěr

Hodinové moduly se používají v mnoha projektech. Jsou potřebné pro systémy záznamu dat, při vytváření časovačů a ovládacích zařízení, která fungují podle daného plánu, v domácích spotřebičích. S široce dostupnými a levnými moduly můžete vytvářet projekty, jako je budík nebo záznamník dat ze senzorů, záznam informací na SD kartu nebo zobrazení času na displeji. V tomto článku jsme se podívali na typické scénáře použití a možnosti připojení pro nejoblíbenější typy modulů.

Charakteristické rysy:

  • Přesnost ±2 ppm v teplotním rozsahu 0°C až +40°C
  • Přesnost ±3,5 ppm v teplotním rozsahu -40°C až +85°C
  • Vstup pro připojení autonomního zdroje energie pro zajištění nepřetržitého provozu
  • Rozsah provozních teplot komerční: od 0 °C do +70 °C průmyslový: -40 °C až +85 °C
  • Nízká spotřeba
  • Hodiny reálného času počítající sekundy, minuty, hodiny, dny v týdnu, dny v měsíci, měsíci a roce s opravou na přestupný rok až do 2100
  • Dva denní alarmy
  • Obdélníkový výstup s programovatelnou frekvencí
  • Rychlé (400 kHz) rozhraní I 2 C
  • napájení 3,3V
  • Digitální teplotní senzor s přesností měření ±3°C
  • Registr obsahující údaje o požadované úpravě
  • nonRST reset vstupu/výstupu

Aplikace:

  • servery
  • Elektronické elektroměry
  • Telematické zařízení
  • GPS systémy

Typické schéma zapojení pro DS3231:

Obecný popis:

DS3231 jsou vysoce přesné hodiny reálného času (RTC) s vestavěným rozhraním I 2 C, teplotně kompenzovaným krystalovým oscilátorem (TCXO) a quartzovým rezonátorem. Zařízení má vstup pro připojení záložního autonomního zdroje, který umožňuje měření času a teploty i při vypnutém hlavním napájecím napětí. Vestavěný quartzový rezonátor zvyšuje životnost zařízení a snižuje potřebné množství vnější prvky. DS3231 je k dispozici v komerčních a průmyslových teplotních verzích a je zabalen v 300 mil 16pinovém SO pouzdru.

RTC poskytuje počítání sekund, minut, hodin, dnů v týdnu, dnů v měsíci a roku. Koncové datum měsíce je určeno automaticky s ohledem na přestupné roky. Hodiny reálného času pracují ve 24 nebo 12 hodinovém formátu s indikací aktuální poloviny dne (AM/PM). Zařízení má dva denní alarmy a obdélníkový výstup s programovatelnou frekvencí. Výměna dat s přístrojem probíhá přes vestavěné sériové I 2 C kompatibilní rozhraní.

Modul DS3231 (RTC, ZS-042) je levná deska s extrémně přesnými hodinami reálného času (RTC), s teplotní kompenzací krystalového oscilátoru a krystalu. Modul obsahuje lithiová baterie, který zachovává nepřetržitý provoz i při vypnutém napájení. Integrovaný generátor zlepšuje přesnost zařízení a snižuje počet součástí.

Technické parametry

Napájecí napětí: 3,3V a 5V
Paměťový čip: AT24C32 (32 KB)
Přesnost: ±0,432 s za den
Frekvence Quartz: 32,768 kHz
Podporovaný protokol: I2C
Rozměry: 38 mm x 22 mm x 15 mm

Obecné informace

Většina mikroobvodů, jako je DS1307, používá externí křemenný oscilátor s frekvencí 32 kHz, ale mají významnou nevýhodu: při změně teploty se mění frekvence křemene, což vede k chybě v časování. Tento problém je eliminován v čipu DS3231, který obsahuje krystalový oscilátor a teplotní čidlo, které kompenzuje změny teploty tak, aby čas zůstal přesný (v případě potřeby lze číst údaje o teplotě). Čip DS3231 také podporuje informace o sekundách, minutách, hodinách, dnu v týdnu, datu, měsíci a roce a také sleduje počet dní v měsíci a opravuje přestupné roky. Podporuje hodiny ve dvou formátech: 24 a 12 a je možné naprogramovat i dva budíky. Modul pracuje na dvouvodičové I2C sběrnici.


Nyní něco o samotném modulu je postaven na čipu DS3231N. Pro vytažení linek 32K, SQW, SCL a SDA je nutná sestava rezistoru RP1 (4,7 kOhm) (mimochodem, pokud je použito více modulů s I2C sběrnicí, je nutné rozpájet pull-up rezistory na jiných modulech) . Druhá sestava odporů je nutná pro dotažení linek A0, A1 a A2, které jsou potřeba pro změnu adresování paměťového čipu AT24C32N. Rezistor R5 a dioda D1 slouží k dobití baterie v zásadě lze vyjmout, protože běžná baterie SR2032 vydrží roky. Osazen je také paměťový čip AT24C32N, který není potřeba pro provoz hodin RTC DS3231N. Rezistor R1 a kontrolka napájení signalizují, že modul je zapnutý. Jak již bylo zmíněno, modul pracuje na sběrnici I2C, tyto sběrnice byly vyvedeny na dva konektory J1 a J2, viz níže. Účel J1
32K: výstup, frekvence 32 kHz
SQW: výstup
SDA: datová linka (Serial Dфta)
VCC: Napájení modulu „+“.
GND: Napájení modulu „-“. Účel J2
SCL: Sériové hodiny
SDA: Sériová datová linka
VCC: Napájení modulu „+“.
GND: Napájení modulu „-“.


Řeknu vám něco málo o čipu AT24C32N, jedná se o čip s 32k pamětí (EEPROM) od výrobce Atmel, sestavený v pouzdře SOIC8, pracující na dvouvodičové I2C sběrnici. Adresa mikroobvodu je 0x57, v případě potřeby ji lze snadno změnit pomocí propojek A0, A1 a A2 (to umožňuje zvýšit počet připojených mikroobvodů AT24C32/64). Protože čip AT24C32N má tři adresové vstupy (A0, A1 a A2), které mohou být ve dvou stavech, buď log „1“ nebo log „0“, má čip k dispozici osm adres. od 0x50 do 0x57.

Připojení DS3231 k Arduinu

Požadované díly:
Arduino UNO R3 x 1 ks.
Hodiny reálného času na DS3231, RTC, SPI, AT24C32 x 1 ks.
DuPont drát, 2,54 mm, 20 cm, F-M (samice - samec) x 1 ks.
USB 2.0 A-B kabel x 1 ks.

Spojení:
V v tomto příkladu Budu používat pouze modul DS3231 a Arduino UNO R3, všechna data se přenesou do “Port Monitoring”. Obvod není složitý, jsou potřeba pouze čtyři vodiče, nejprve připojíme sběrnici I2C, SCL v A4 (Arduino UNO) a SDA v A5 (Arduino UNO), zbývá pouze připojit napájení GND na GND a VCC na 5V (lze zapisovat od 3,3V), obvod sestaven, nyní musíme připravit softwarovou část.

V Arduino IDE není žádná knihovna, která by fungovala s DS3231, musíte si stáhnout „DS3231“ a přidat jej do vývojového prostředí Arduino.

Nastavení času DS3231
Při prvním zapnutí je třeba naprogramovat čas, otevřít příklad z knihovny DS3231 „File“ -> „Examples“ -> „DS3231“ -> „Arduino“ -> „DS3231_Serial_Easy“ nebo zkopírovat kód zespodu

/* Testování bylo provedeno na Arduino IDE 1.8.0 Datum testu 08/31/2018. */ #zahrnout // Připojení knihovny Wire DS3231 rtc(SDA, SCL); // Inicializace DS3231 void setup() ( Serial.begin(115200); // Nastavení sériového připojení rtc.begin(); // Inicializace rtc // Nastavení času rtc.setDOW(FRIDAY); // Nastavení dne -of-week rtc. setTime(16, 29, 0) // Nastavte čas na 16:29:00 (24hodinový formát) rtc.setDate(31, 8, 2018); , 2018) void loop() ( Serial. print(rtc.getDOWStr()); // Odeslání dne a týdne Serial.print(" "); Serial.print(rtc.getDateStr()); // Odeslání data Serial.print(" -- "); println(rtc.getTimeStr() // Časová prodleva odeslání (1000));

Testování probíhalo na Arduino IDE 1.8.0

Datum testu: 31.08.2018

#zahrnout // Zahrnout knihovnu Wire

DS3231 rtc (SDA, SCL); // Inicializujte DS3231

void setup()

Seriál. začít(115200); // Vytvořte sériové připojení

rtc. začít(); // Inicializace rtc

// Nastavte čas

rtc. setDOW(PÁTEK); // Nastavit den v týdnu

rtc. setTime(16, 29, 0); // Nastavte čas na 16:29:00 (24hodinový formát)

void loop()

Seriál. print (rtc . getDOWStr () ) ; // Odeslat den-týden

Seriál. tisknout (" ");

Seriál. print (rtc . getDateStr () ) ; // Odešlete datum

Seriál. tisknout ("-");

Seriál. println(rtc. getTimeStr()); // Čas odeslání

zpoždění(1000); // Jednosekundové zpoždění

Nahrajte skicu do řadiče Arduino a otevřete „Port Monitoring“

". Pojďme se seznámit s modulem hodin reálného času DS3231. Článek obsahuje video návody, výpisy programů, účel a způsoby připojení modulů z rodiny DS k Arduinu.

Modul hodin reálného času DS3231

Co je modul hodin reálného času DS3231?

Modul hodin reálného času- jedná se o elektronický obvod určený k záznamu chronometrických údajů (aktuální čas, datum, den v týdnu atd.) a je to systém skládající se z autonomního zdroje energie a záznamového zařízení.

modul DS3231 Jsou to v podstatě obyčejné hodinky. Desky Arduino již mají vestavěný časový senzor Millis, ale funguje pouze při napájení desky. Pokud Arduino vypnete a poté zapnete, Millis čas se vynuluje. A DS3231 má na desce baterii, která, i když je deska Arduino odpojena, nadále „napájí“ modul, což mu umožňuje měřit čas.

Modul lze použít jako hodiny nebo budík na bázi desek Arduino. Nebo jako upozornění pro různé systémy, například v „chytré domácnosti“.

Specifikace DS3231:

  • modul počítá hodiny, minuty, sekundy, data, měsíce, roky (přestupné roky se berou v úvahu do roku 2100);
  • připojit se k různá zařízení, hodiny jsou připojeny přes rozhraní I2C.

32 tis— Výstup určený pro napájení externí napájení>12V.

S.Q.W.— Programovatelný výstup signálu Square-Wave.

SCL– Prostřednictvím tohoto pinu dochází k výměně dat s hodinami přes rozhraní I2C.

S.D.A.– Přes tento pin se přenášejí data z hodinek.

VCC– Napájení hodin reálného času, je vyžadováno 5 voltů. Pokud na tento pin není přivedeno žádné napětí, hodinky přejdou do režimu spánku.

GND- Země.

Schéma zapojení pro hodiny reálného času DS3231 a jednoduchý program

Piny SDA a SCL na různých deskách Arduino:

S.D.A. SCL
OSN A4 A5
Mini A4 A5
Nano A4 A5
Mega2560 20 21
Leonardo 2 3

Pojďme připojit modul hodin reálného času k Arduino UNO. SDA - pin A4, SCL - pin A5.

Následující program je vhodný pro fungování modelu (program můžete jednoduše zkopírovat do Arduino IDE):

#zahrnout

void setup() (
zpoždění(300);
Serial.begin(9600);
time.begin();
}
void loop()



}
}

V tomto náčrtu se čas jednoduše odpočítává.

Nejprve ve sktech propojte knihovnu iarduino_RTC.h.

Tam uveďte přesný název vašeho modulu, abyste s ním správně pracovali.

V důsledku toho získáme výstup času z modulu DS3231 na monitor portu. Zobrazí se hodiny, minuty, sekundy.

V dalším náčrtu přidáme funkci settime, který umožňuje nastavit počáteční čas odpočítávání.

#zahrnout
iarduino_RTC time(RTC_DS3231);
void setup() (
zpoždění(300);
Serial.begin(9600);
time.begin();
time.settime(0,0,18,24,04,17,1); // 0 s, 0 min, 18 hodin, 24. dubna 2017, pondělí
}
void loop()
if(millis()%1000==0)( // pokud uplynula 1 sekunda
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // čas zobrazení
zpoždění(1); // pauza na 1 ms, aby se čas nezobrazoval několikrát za 1 ms
}
}

V příkladu se čas začíná počítat od 0 s, 0 min, 18 hodin, 24. dubna 2017, pondělí.

Příspěvky z lekce:

  1. První lekce: .
  2. Druhá lekce: .
  3. Třetí lekce: .
  4. Čtvrtá lekce: .
  5. Pátá lekce: .
  6. Lekce šest: .
  7. Sedmá lekce: .
  8. Osmá lekce: .
  9. Devátá lekce:

Mnoho zařízení vyžaduje neustálé zaznamenávání chronometrických údajů (datum, čas tuto funkci provádí speciální); elektronické obvody, kterému se říká hodiny reálného času. V současné době jsou hodiny reálného času implementovány ve formě samostatného mikroobvodu, ke kterému je třeba přidat křemenný rezonátor a autonomní zdroj energie. V některých mikroobvodech je uvnitř zabudován křemenný rezonátor. Jedny z těchto hodin na čipu DS3231SN Koupil jsem to za svůj projekty . V příkladu připojím hodiny reálného času k čínskému analogu Arduino UNO.

Jedná se o kompletní modul ZS-042, který lze připojit k různým zařízením, nejen k platformě Arduino.


Modul je postaven na mikroobvodu DS3231SN což jsou v podstatě hodiny reálného času. Na rozdíl od starý model hodinky např. na čipu DS1307 tyto hodinky obsahují vnitřní quartzový rezonátor, díky kterému mají hodinky přesný čas.

Na Arduinu můžete implementovat hodiny bez DS3231SN, ale pokud dojde ke ztrátě napájení, hodnoty časovače se resetují.Tyto stejné hodiny mají záložní napájení, takže pokud vypadne proud, pokračují v práci.

Hodinky umí počítat hodiny, minuty, sekundy, data, měsíce, roky (přestupné roky se berou v úvahu do roku 2100). Fungují ve 12 nebo 24 hodinovém režimu, obsahují dva budíky, dále mají vnitřní teploměr s rozsahem od -40 ° C do + 85 ° C. Pro připojení k různým zařízením se hodiny připojují přes I2C rozhraní.


Umístění a účel pinů na modulu ZS-042:

S.Q.W.- Programovatelný výstup signálu Square-Wave.

SCLProstřednictvím tohoto pinu dochází k výměně dat s hodinami přes rozhraní I2C.

S.D.A.Přes tento pin se přenášejí data z hodinek.

VCCNapájecí zdroj pro hodiny reálného času, vyžaduje 5 voltů. Pokud na tento pin není přivedeno žádné napětí, hodinky přejdou do režimu spánku.

GND- Země.

Chcete-li se připojit k Arduino UNO, Pin SDA hodin připojíme na pin A4 a pin SCL na A5. Pro napájení jsou použity piny GND(-) a VCC(+5v).

Piny SDA a SCL na různých deskách Arduino:

S.D.A. SCL
OSN A4 A5
Mini A4 A5
Nano A4 A5
Mega2560 20 21
Leonardo 2 3

Nainstalujme do hodinek baterii CR2032 takové prvky slouží k napájení BIOSu v počítačích.

Na USB připojení kabelu k Arduinu, LED na hodinách by se měla rozsvítit " MOC"(červená LED).

Abyste mohli naprogramovat hodiny přes Arduino IDE, musíte nainstalovat knihovny.

Stáhněte si knihovnu Čas a DS1307RTC.

Poslední knihovna byla napsána pro hodiny na čipu DS1307, ale její interakční protokoly jsou kompatibilní s DS3231, takže knihovna bude pasovat na naše hodiny.

Knihovny je třeba stáhnout, rozbalit a umístit do složky "knihovny" Při spuštění Arduino IDE, s příklady by se měly objevit v " Vzorky».

Nastavte datum a čas.

Chcete-li to provést, zkopírujte tento kód v Arduino IDE.

Pro správné nastavení je potřeba změnit údaje v řádku

setTime(13,35,0,22,12,2016);



V závorce, oddělené čárkami, uveďte ty správné: hodiny, minuty, sekundy, datum, měsíc, rok. V mém příkladu je nastaveno na 13 hodin 35 minut 0 sekund, 22. prosince 2016. Nahrajte skicu do Arduina.

Nyní, abyste mohli číst údaje z hodin, můžete použít příklad: „ Soubor» - « Vzorky» - « DS1307RTC» - « ReadTest"A pro nahrajte jej do Arduina.

V okně, které se otevře, se zobrazí aktuální datum a čas. Pokud vypnete napájení hodinového modulu z Arduina, Arduino nebude schopno sledovat hodnoty a po nějaké době se zobrazí zpráva " ...chyba čtení!"(zvýrazněno červeně). Po obnovení napájení bude datum a čas pokračovat v odpočítávání. Datum a čas nebyly resetovány, protože hodinky byly napájeny baterií CR2032.