Obsah:
Video: Použití hodinových modulů v reálném čase DS1307 a DS3231 s Arduino: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Stále dostáváme žádosti o to, jak používat moduly hodin reálného času DS1307 a DS3231 s Arduinem, z různých zdrojů-toto je tedy první ze dvoudílného tutoriálu, jak je používat. Pro tento výukový program Arduino máme k použití dva moduly hodin v reálném čase, jeden založený na modelu Maxim DS1307 (čtvercový modul) a DS3231 (obdélníkový modul).
Existují dva hlavní rozdíly mezi integrovanými obvody na modulech hodin reálného času, což je přesnost udržování času. DS1307 použitý v prvním modulu funguje velmi dobře, ale vnější teplota může ovlivnit frekvenci obvodu oscilátoru, který pohání interní čítač DS1307.
Může to znít jako problém, ale obvykle to bude mít za následek vypnutí hodin zhruba o pět minut za měsíc. DS3231 je mnohem přesnější, protože má interní oscilátor, který není ovlivněn vnějšími faktory - a je tedy přesný až na několik minut za rok. Pokud máte modul DS1307- necítíte se špatně, je to stále deska s vysokou hodnotou a bude vám dobře sloužit. U obou modulů je nutná záložní baterie.
Je vhodné koupit novou baterii CR2032 a namontovat ji do modulu. Spolu se sledováním času a data mají tyto moduly také malou EEPROM, funkci alarmu (pouze DS3231) a schopnost generovat čtvercovou vlnu různých frekvencí-to vše bude předmětem druhého tutoriálu.
Krok 1: Připojení modulu k Arduinu
Oba moduly používají sběrnici I2C, což umožňuje velmi snadné připojení.
Nejprve budete muset určit, které piny na vašich deskách Arduino nebo kompatibilních deskách jsou použity pro sběrnici I2C - ty budou známy jako SDA (nebo data) a SCL (nebo hodiny). Na deskách Arduino Uno nebo kompatibilních jsou tyto piny pro data a hodiny A4 a A5; na Arduino Mega jsou piny pro data a hodiny D20 a D21; A pokud používáte kompatibilní s Pro Mini, piny jsou A4 a A5 pro data a hodiny, které jsou rovnoběžné s hlavními piny.
Modul DS1307
Pokud máte modul DS1307, budete muset připájet vodiče k desce nebo pájet na některé vložené kolíkové kolíky, abyste mohli použít propojovací vodiče. Poté připojte piny SCL a SDA k vašemu Arduinu a pin Vcc ke kolíku 5V a GND k GND.
Modul DS3231
Připojení tohoto modulu je snadné, protože kolíky záhlaví jsou na desce nainstalovány ve výrobě. Jednoduše můžete znovu propojit propojovací kabely z SCL a SDA do Arduina a znovu z pinů Vcc a GND modulu na 5V nebo 3,3V a GND vaší desky. Pro pájení vlastních vodičů jsou však na druhé straně duplikovány. Oba tyto moduly mají požadované výsuvné odpory, takže nemusíte přidávat vlastní. Stejně jako všechna zařízení připojená ke sběrnici I2C zkuste omezit délku vodičů SDA a SCL na minimum.
Krok 2: Čtení a zápis času z vašeho modulu RTC
Jakmile zapojíte modul RTC. zadejte a nahrajte následující skicu. Ačkoli poznámky a funkce v náčrtu se týkají pouze DS3231, kód funguje také s DS1307.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Převod normálních desetinných čísel na binární kódované desetinné bajty decToBcd (byte val) {return ((val/10*16) + (val%10)); } // Převod binárních kódovaných desetinných čísel na normální desetinná čísla byte bcdToDec (byte val) {return ((val/16*10) + (val%16)); } neplatné nastavení () {Wire.begin (); Serial.begin (9600); // zde nastavte počáteční čas: // DS3231 sekundy, minuty, hodiny, den, datum, měsíc, rok // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (bajt sekunda, bajt minuta, bajt hodina, bajt dayOfWeek, bajt dayOfMonth, bajt měsíc, byte rok) {// nastaví čas a datum na DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // nastavení dalšího vstupu na začátek v sekundovém registru Wire.write (decToBcd (druhý)); // nastavení sekund Wire.write (decToBcd (minuta)); // nastavení minut Wire.write (decToBcd (hodina)); // nastavení hodin Wire.write (decToBcd (dayOfWeek)); // nastavený den v týdnu (1 = neděle, 7 = sobota) Wire.write (decToBcd (dayOfMonth)); // nastavení data (1 až 31) Wire.write (decToBcd (měsíc)); // nastavení měsíce Wire.write (decToBcd (rok)); // nastavení roku (0 až 99) Wire.endTransmission (); } void readDS3231time (byte *sekunda, byte *minuta, byte *hodina, byte *dayOfWeek, byte *dayOfMonth, byte *měsíc, byte *rok) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // nastavení ukazatele registru DS3231 na 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // požadavek na sedm bytů dat z DS3231 počínaje registrem 00h *sekunda = bcdToDec (Wire.read () & 0x7f); *minuta = bcdToDec (Wire.read ()); *hodina = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *měsíc = bcdToDec (Wire.read ()); *rok = bcdToDec (Wire.read ()); } void displayTime () {byte sekunda, minuta, hodina, dayOfWeek, dayOfMonth, měsíc, rok; // načíst data z DS3231 čístDS3231time (& sekunda, & minuta, & hodina, & denOfWeek, & denOdMěsíc, & měsíc, & rok); // poslat na sériový monitor Serial.print (hodina, DEC); // při zobrazení Serial.print (":") převede proměnnou bytu na desítkové číslo; if (minuta <10) {Serial.print ("0"); } Serial.print (minuta, DEC); Serial.print (":"); if (druhý <10) {Serial.print ("0"); } Serial.print (druhý, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (měsíc, DEC); Serial.print ("/"); Serial.print (rok, DEC); Serial.print („Den v týdnu:“); switch (dayOfWeek) {case 1: Serial.println ("Sunday"); přestávka; případ 2: Serial.println („pondělí“); přestávka; případ 3: Serial.println („úterý“); přestávka; případ 4: Serial.println („středa“); přestávka; případ 5: Serial.println („čtvrtek“); přestávka; případ 6: Serial.println („pátek“); přestávka; případ 7: Serial.println („sobota“); přestávka; }} void loop () {displayTime (); // zobrazení dat hodin reálného času na sériovém monitoru, zpoždění (1000); // každou sekundu}
Může existovat mnoho kódu, ale dobře se rozděluje na zvládnutelné části.
Nejprve obsahuje knihovnu Wire, která se používá pro komunikaci po sběrnici I2C, a poté definuje adresu sběrnice pro RTC jako 0x68. Následují dvě funkce, které převádějí desetinná čísla na BCD (binárně kódovaná desetinná místa) a naopak. To jsou nezbytné, protože integrované obvody RTC pracují v BCD, nikoli v desítkové soustavě.
K nastavení hodin slouží funkce setDS3231time (). Jeho použití je velmi snadné, jednoduše vložte hodnoty od roku dolů do vteřiny a od té doby začne RTC. Pokud například chcete nastavit následující datum a čas - středa 26. listopadu 2014 a 21:42 a 30 sekund - použili byste:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
Krok 3:
Všimněte si, že čas je nastaven pomocí 24hodinového času a čtvrtým parametrem je „den v týdnu“. To se pohybuje mezi 1 a 7, což je neděle až sobota. Tyto parametry jsou bajtovými hodnotami, pokud zadáváte vlastní proměnné.
Jakmile funkci jednou spustíte, je rozumné ji předponovat // a znovu nahrát kód, takže po cyklování napájení nebo resetování mikrokontroléru neresetuje čas. Čtení času z vašeho RTC je stejně jednoduché, ve skutečnosti lze proces úhledně sledovat uvnitř funkce displayTime (). K uložení dat z RTC budete muset definovat sedm bajtových proměnných, které se poté vloží do funkce readDS3231time (). Například pokud jsou vaše proměnné:
bajt sekunda, minuta, hodina, dayOfWeek, dayOfMonth, měsíc, rok;
… obnovili byste je aktuálními daty z RTC pomocí:
čístDS3232time (& sekundu, & minutu, & hodinu, & dayOfWeek, & dayOfMonth, & měsíc, & rok);
Pak můžete použít proměnné, jak uznáte za vhodné, od odeslání času a data na sériový monitor jako v příkladu skici - po převod dat do vhodné podoby pro všechny druhy výstupních zařízení.
Chcete -li zkontrolovat, zda vše funguje, zadejte do ukázkového náčrtu příslušný čas a datum, nahrajte jej, okomentujte funkci setDS3231time () a nahrajte jej znovu. Poté otevřete sériový monitor a mělo by vám být poskytnuto běžící zobrazení aktuálního času a data.
Od tohoto okamžiku máte nyní softwarové nástroje pro nastavení dat a jejich načítání z modulu hodin reálného času a doufáme, že rozumíte tomu, jak tyto levné moduly používat.
Další informace o konkrétních integrovaných obvodech hodin v reálném čase naleznete na webových stránkách výrobce-DS1307 a DS3231.
Tento příspěvek vám přinesl web pmdway.com - vše pro výrobce a nadšence do elektroniky s doručením zdarma po celém světě.
Doporučuje:
Jak používat modul hodin v reálném čase (DS3231): 5 kroků
Jak používat modul hodin v reálném čase (DS3231): DS3231 je levný, extrémně přesný hodiny reálného času I2C (RTC) s integrovaným teplotně kompenzovaným krystalovým oscilátorem (TCXO) a krystalem. Zařízení obsahuje bateriový vstup a udržuje přesné měření času, když je hlavní napájení
Hodiny v reálném čase s Arduino: 3 kroky
Hodiny reálného času s Arduino: V tomto projektu vyrobíme hodiny pomocí modulu Arduino a RTC. Jak víme, Arduino nemůže zobrazovat skutečný čas, takže použijeme modul RTC k zobrazení správného času na LCD. Přečtěte si pozorně všechny kroky, které vám pomohou
Nastavení DS3231 RTC (hodiny v reálném čase) přesně, rychle a automatizovaně pomocí Javy (+-1 s): 3 kroky
Přesné, rychlé a automatické nastavení DS3231 RTC (hodiny v reálném čase) pomocí Javy (+-1 s): Tento návod vám ukáže, jak nastavit čas na hodinách reálného času DS3231 pomocí Arduina a malé Java aplikace, která používá sériové připojení Arduina. Základní logika tohoto programu: 1. Arduino odesílá sériový požadavek
Výroba hodin pomocí M5stick C pomocí Arduino IDE - Hodiny RTC v reálném čase s M5stack M5stick-C: 4 kroky
Výroba hodin pomocí M5stick C pomocí Arduino IDE | Hodiny RTC v reálném čase s M5stack M5stick-C: Ahoj, v tomto návodu se naučíme, jak vyrobit hodiny s vývojovou deskou m5stick-C z m5stack pomocí Arduino IDE. Takže m5stick zobrazí datum, čas & týden v měsíci na displeji
Jak vytvořit hodiny v reálném čase pomocí Arduino a TFT displeje - Arduino Mega RTC s 3,5 palcovým TFT displejem: 4 kroky
Jak vyrobit hodiny v reálném čase pomocí Arduino a TFT displeje | Arduino Mega RTC s 3,5 palcovým TFT displejem: Navštivte můj kanál YouTube. Úvod:- V tomto příspěvku vyrobím „Hodiny v reálném čase“pomocí 3,5palcového dotykového displeje TFT LCD, Arduino Mega Modul RTC 2560 a DS3231 …. Před spuštěním … zkontrolujte video z mého kanálu YouTube..Poznámka:- Pokud používáte Arduin