Obsah:
Video: Použitie hodinových modulov v reálnom čase DS1307 a DS3231 s Arduino: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
Stále dostávame žiadosti o to, ako používať moduly hodín v reálnom čase DS1307 a DS3231 s Arduino, z rôznych zdrojov-toto je teda prvý z dvojdielneho tutoriálu, ako ich používať. Pre tento tutoriál k Arduinu máme k dispozícii dva moduly hodín v reálnom čase, jeden založený na modeli Maxim DS1307 (štvorcový modul) a DS3231 (obdĺžnikový modul).
Existujú dva hlavné rozdiely medzi integrovanými obvodmi na moduloch hodín v reálnom čase, čo je presnosť dodržiavania času. DS1307 použitý v prvom module funguje veľmi dobre, ale vonkajšia teplota môže ovplyvniť frekvenciu obvodu oscilátora, ktorý poháňa interné počítadlo DS1307.
Môže to znieť ako problém, ale zvyčajne to bude dôsledkom toho, že hodiny budú vypnuté zhruba o päť minút mesačne. DS3231 je oveľa presnejší, pretože má interný oscilátor, ktorý nie je ovplyvnený vonkajšími faktormi - a je teda presný až na niekoľko minút za rok. Ak máte modul DS1307- necítite sa zle, je to stále cenovo výhodná doska, ktorá vám bude dobre slúžiť. Pri oboch moduloch je potrebná záložná batéria.
Je dobré kúpiť si novú batériu CR2032 a namontovať ju do modulu. Okrem sledovania času a dátumu majú tieto moduly aj malú EEPROM, funkciu alarmu (iba DS3231) a schopnosť generovať štvorcovú vlnu rôznych frekvencií-to všetko bude predmetom druhého tutoriálu.
Krok 1: Pripojenie modulu k Arduinu
Oba moduly používajú zbernicu I2C, čo veľmi uľahčuje pripojenie.
Najprv budete musieť zistiť, ktoré piny na doske Arduino alebo kompatibilných doskách sa používajú pre zbernicu I2C - budú známe ako SDA (alebo údaje) a SCL (alebo hodiny). Na doskách Arduino Uno alebo kompatibilných sú tieto piny A4 a A5 pre dáta a hodiny; Na Arduino Mega sú piny D20 a D21 pre dáta a hodiny; A ak používate kompatibilné s Pro Mini, kolíky sú A4 a A5 pre dáta a hodiny, ktoré sú rovnobežné s hlavnými kolíkmi.
Modul DS1307
Ak máte modul DS1307, budete musieť spájkovať vodiče k doske alebo spájkovať na niektorých vložených kolíkoch záhlavia, aby ste mohli použiť prepojovacie vodiče. Potom pripojte piny SCL a SDA k vášmu Arduinu a kolík Vcc k pinu 5V a GND k GND.
Modul DS3231
Pripojenie tohto modulu je jednoduché, pretože kolíky záhlavia sú na doske nainštalované vo výrobe. Jednoducho môžete znova prepojiť prepojovacie káble z SCL a SDA do Arduina a znova z pinov Vcc a GND modulu na 5 V alebo 3,3 V a GND na vašej doske. Na spájkovanie vlastných drôtov sú však duplikáty na druhej strane. Oba tieto moduly majú požadované výsuvné odpory, takže nemusíte pridávať svoje vlastné. Rovnako ako všetky zariadenia pripojené k zbernici I2C, skúste obmedziť dĺžku vodičov SDA a SCL na minimum.
Krok 2: Čítanie a zapisovanie času z vášho modulu RTC
Akonáhle zapojíte svoj modul RTC. zadajte a nahrajte nasledujúci náčrt. Napriek tomu, že poznámky a funkcie v náčrte sa týkajú iba DS3231, kód funguje aj s DS1307.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Previesť normálne desatinné čísla na binárne kódované desatinné bajty decToBcd (byte val) {return ((val/10*16) + (val%10)); } // Previesť binárne kódované desatinné číslo na normálne desatinné čísla byte bcdToDec (bajtová hodnota) {return ((hodnota/16*10) + (hodnota%16)); } neplatné nastavenie () {Wire.begin (); Serial.begin (9600); // tu nastavte počiatočný čas: // DS3231 sekundy, minúty, hodiny, deň, dátum, mesiac, rok // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (bajt sekunda, bajt minúta, bajt hodina, bajt dayOfWeek, bajt dayOfMonth, bajt mesiac, byte rok) {// nastaví čas a dátum na DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // nastavenie ďalšieho vstupu na začiatok v sekundovom registri Wire.write (decToBcd (druhý)); // nastavenie sekúnd Wire.write (decToBcd (minúta)); // nastavenie minút Wire.write (decToBcd (hodina)); // nastavenie hodín Wire.write (decToBcd (dayOfWeek)); // nastavený deň v týždni (1 = nedeľa, 7 = sobota) Wire.write (decToBcd (dayOfMonth)); // nastavenie dátumu (1 až 31) Wire.write (decToBcd (mesiac)); // nastavenie mesiaca Wire.write (decToBcd (rok)); // nastavenie roku (0 až 99) Wire.endTransmission (); } void readDS3231time (byte *sekunda, byte *minuta, byte *hodina, byte *dayOfWeek, byte *dayOfMonth, byte *mesiac, byte *rok) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // nastavenie ukazovateľa registra DS3231 na 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // požiadavka na sedem bajtov dát z DS3231 počnúc registrom 00h *sekunda = bcdToDec (Wire.read () & 0x7f); *minúta = bcdToDec (Wire.read ()); *hodina = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *mesiac = bcdToDec (Wire.read ()); *rok = bcdToDec (Wire.read ()); } void displayTime () {byte sekunda, minúta, hodina, dayOfWeek, dayOfMonth, mesiac, rok; // načítanie údajov z DS3231 na čítanie DS3231time (& sekundu, & minútu, & hodinu, & dayOfWeek, & dayOfMonth, & mesiac, & rok); // pošlite ho na sériový monitor Serial.print (hodina, DEC); // pri zobrazení Serial.print (":") previesť premennú bytu na desatinné číslo; if (minúta <10) {Serial.print ("0"); } Serial.print (minúta, DEC); Serial.print (":"); if (druhý <10) {Serial.print ("0"); } Serial.print (druhý, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (mesiac, DEC); Serial.print ("/"); Serial.print (rok, DEC); Serial.print („Deň v týždni:“); switch (dayOfWeek) {case 1: Serial.println ("Sunday"); prestávka; prípad 2: Serial.println („pondelok“); prestávka; prípad 3: Serial.println („utorok“); prestávka; prípad 4: Serial.println („streda“); prestávka; prípad 5: Serial.println („štvrtok“); prestávka; prípad 6: Serial.println („piatok“); prestávka; prípad 7: Serial.println („sobota“); prestávka; }} void loop () {displayTime (); // zobrazenie údajov hodín reálneho času na sériovom monitore, oneskorenie (1000); // každú sekundu}
Kódu môže byť veľa, ale dobre sa rozpadá na zvládnuteľné časti.
Najprv obsahuje knižnicu Wire, ktorá sa používa na komunikáciu po zbernici I2C, a potom definuje adresu zbernice pre RTC ako 0x68. Nasledujú dve funkcie, ktoré prevádzajú desatinné čísla na BCD (binárne kódované desatinné miesta) a naopak. Sú potrebné, pretože integrované obvody RTC fungujú v BCD, nie v desatinnom čísle.
Na nastavenie hodín sa používa funkcia setDS3231time (). Jeho použitie je veľmi jednoduché, jednoduché vložte hodnoty z roku na sekundu a od tohto času začne RTC. Ak napríklad chcete nastaviť nasledujúci dátum a čas - streda 26. novembra 2014 a 21:42 a 30 sekúnd - použili by ste:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
Krok 3:
Čas je nastavený pomocou 24-hodinového času a štvrtým parametrom je „deň v týždni“. Čas je od 1 do 7, čo je od nedele do soboty. Tieto parametre sú bajtové hodnoty, ak nahrádzate svoje vlastné premenné.
Keď je funkcia raz spustená, je múdre ju predponovať // a znova nahrať kód, aby sa po cykle napájania alebo resetovaní mikrokontroléra neresetoval čas. Čítanie času z vášho RTC je rovnako jednoduché, v skutočnosti je možné tento proces úhľadne sledovať vo funkcii displayTime (). Na uloženie údajov z RTC budete musieť definovať sedem bajtových premenných, ktoré sa potom vložia do funkcie readDS3231time (). Ak sú vašimi premennými napríklad:
bajt sekunda, minúta, hodina, dayOfWeek, dayOfMonth, mesiac, rok;
… obnovili by ste ich aktuálnymi údajmi z RTC pomocou:
čítaťDS3232time (& sekundu, & minútu, & hodinu, & dayOfWeek, & dayOfMonth, & mesiac, & rok);
Potom môžete použiť premenné podľa vlastného uváženia, od odoslania času a dátumu na sériový monitor ako v prípade príkladu náčrtu - po prevod údajov do vhodnej podoby pre všetky druhy výstupných zariadení.
Aby ste sa presvedčili, že všetko funguje, zadajte do demonštračného náčrtu príslušný čas a dátum, nahrajte ho, okomentujte funkciu setDS3231time () a nahrajte ho znova. Potom otvorte sériový monitor a malo by sa vám zobraziť priebežné zobrazenie aktuálneho času a dátumu.
Od tohto bodu máte teraz softvérové nástroje na nastavenie údajov a ich načítanie z modulu hodín v reálnom čase a dúfame, že rozumiete tomu, ako tieto lacné moduly používať.
Viac informácií o konkrétnych integrovaných obvodoch hodín v reálnom čase nájdete na webových stránkach výrobcu-DS1307 a DS3231.
Tento príspevok vám prináša pmdway.com - všetko pre výrobcov a nadšencov elektroniky s bezplatným doručením do celého sveta.
Odporúča:
Ako používať modul hodín v reálnom čase (DS3231): 5 krokov
Ako používať hodinový modul v reálnom čase (DS3231): DS3231 je nízkonákladový, extrémne presný hodiny v reálnom čase I2C (RTC) s integrovaným kryštálovým oscilátorom (TCXO) s teplotnou kompenzáciou a kryštálom. Zariadenie má vstup na batériu a udržiava presné meranie času pri napájaní
Presné, rýchle a automatické nastavenie DS3231 RTC (hodín v reálnom čase) pomocou Javy (+-1 s): 3 kroky
Presné, rýchle a automatizované nastavenie hodín DS3231 RTC (hodiny v reálnom čase) pomocou Javy (+-1 s): Tento návod vám ukáže, ako nastaviť čas na hodinách reálneho času DS3231 pomocou Arduina a malej aplikácie Java, ktorá používa sériové pripojenie Arduina. Základná logika tohto programu: 1. Arduino odosiela sériovú požiadavku
Hodiny DS1307 v reálnom čase RTC s Arduino: 4 kroky
DS1307 Hodiny v reálnom čase RTC s Arduino: V tomto návode sa dozvieme o hodinách v reálnom čase (RTC) a o tom, ako Arduino & Hodiny v reálnom čase IC DS1307 sú zostavené ako časovacie zariadenie. Hodiny v reálnom čase (RTC) sa používajú na monitorovanie času a údržbu kalendára. Ak chcete používať RTC,
Použitie starších modulov VFD Noritake Itron: 7 krokov
Používanie starších modulov VFD Noritake Itron: Znovu a znovu sa stretávate so zaujímavými časťami na ebay, od priateľov alebo sa len tak preháňate po obchodoch z druhej ruky. Príkladom toho bol obrovský vákuový fluorescenčný displej Noritake Itron 40 x 2 znakov z roku 1994 (alebo skôr), ktorý bol odovzdaný
Ako vytvoriť hodiny v reálnom čase pomocou displeja Arduino a TFT - Arduino Mega RTC s 3,5 palcovým TFT displejom: 4 kroky
Ako vytvoriť hodiny v reálnom čase pomocou Arduino a TFT displeja | Arduino Mega RTC s 3,5 palcovým TFT displejom: Navštívte môj kanál YouTube. Úvod:- V tomto príspevku urobím „Hodiny v reálnom čase“pomocou 3,5 palcového dotykového TFT LCD displeja, Arduino Mega Modul RTC 2560 a DS3231 …. Pred spustením … si pozrite video z môjho kanála YouTube..Poznámka:- Ak používate Arduin