Tartalomjegyzék:
- Lépés: Csatlakoztassa a modult egy Arduino -hoz
- 2. lépés: Az idő olvasása és írása az RTC modulból
- 3. lépés:
Videó: A DS1307 és DS3231 valós idejű óramodulok használata Arduino-val: 3 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Folyamatosan kapunk kéréseket a DS1307 és DS3231 valós idejű óra modulok használatáról az Arduino-val különböző forrásokból-így ez az első két részből álló oktatóanyag a használatukról. Ehhez az Arduino oktatóanyaghoz két valós idejű óramodult használunk, az egyik a Maxim DS1307 (négyzet alakú modul) és a DS3231 (a téglalap alakú modul) alapján készült.
A valós idejű óra modulok IC-k között két fő különbség van, ez az időmérés pontossága. Az első modulban használt DS1307 nagyon jól működik, azonban a külső hőmérséklet befolyásolhatja a DS1307 belső számlálóját vezérlő oszcillátor áramkör frekvenciáját.
Ez problémának tűnhet, de általában azt eredményezi, hogy az óra havonta körülbelül öt percet áll le. A DS3231 sokkal pontosabb, mivel rendelkezik egy belső oszcillátorral, amelyet külső tényezők nem befolyásolnak - és így legfeljebb évente néhány percre pontos. Ha rendelkezik DS1307 modullal- ne érezze magát rosszul, ez még mindig nagy értékű tábla, és jól fog szolgálni. Mindkét modulhoz tartalék akkumulátorra van szükség.
Érdemes új CR2032 akkumulátort vásárolni és a modulhoz illeszteni. Az idő és a dátum nyomon követése mellett ezek a modulok kis EEPROM, riasztási funkcióval (csak DS3231) és különböző frekvenciájú négyzethullám generálásával is rendelkeznek-mindez egy második oktatóanyag tárgya lesz.
Lépés: Csatlakoztassa a modult egy Arduino -hoz
Mindkét modul az I2C buszt használja, ami nagyon megkönnyíti a csatlakoztatást.
Először meg kell határoznia, hogy az Arduino vagy a kompatibilis táblák mely csapjait használják az I2C buszhoz - ezeket SDA (vagy adat) és SCL (vagy óra) néven ismerik. Az Arduino Uno vagy kompatibilis táblákon ezek a tűk A4 és A5 az adatok és az óra számára; Az Arduino Mega esetében a tűk D20 és D21 az adatok és az óra számára; Ha pedig Pro Mini-kompatibilis, akkor az A4 és A5 méretű tűk adatokhoz és órához, amelyek párhuzamosak a fő csapokkal.
DS1307 modul
Ha rendelkezik DS1307 modullal, forrasztania kell a vezetékeket a táblához, vagy forrasztania kell néhány soros fejléc csapját, így használhatja az áthidaló vezetékeket. Ezután csatlakoztassa az SCL és SDA csapokat az Arduino -hoz, és a Vcc -tűt az 5 V -os, a GND pedig a GND -hez.
DS3231 modul
Ennek a modulnak a csatlakoztatása egyszerű, mivel a fejlécek a gyárilag a táblára vannak felszerelve. Egyszerűen újra futtathatja a jumper vezetékeket az SCL -ből és az SDA -ból az Arduino -ba, és ismét a modul Vcc és GND csapjaiból az alaplap 5V vagy 3.3. V és GND -jébe. Ezek azonban másolva vannak a másik oldalon a saját vezetékek forrasztásához. Mindkét modul rendelkezik a szükséges felhúzó ellenállásokkal, így nem kell hozzáadnia a sajátját. Mint minden I2C buszhoz csatlakoztatott eszköz, próbálja meg minimálisra csökkenteni az SDA és SCL vezetékek hosszát.
2. lépés: Az idő olvasása és írása az RTC modulból
Miután csatlakoztatta az RTC modult. írja be és töltse fel az alábbi vázlatot. Bár a vázlat megjegyzései és funkciói csak a DS3231 -re vonatkoznak, a kód a DS1307 -el is működik.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // A normál tizedes számok konvertálása binárisan kódolt decimális bájtra decToBcd (byte val) {return ((val/10*16) + (val%10)); } // Konvertálja a binárisan kódolt tizedest normál tizedes számokká bájtba bcdToDec (byte val) {return ((val/16*10) + (val%16)); } void setup () {Wire.begin (); Sorozat.kezdet (9600); // itt állítsa be a kezdő időt: // DS3231 másodperc, perc, óra, nap, dátum, hónap, év // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (bájt másodperc, bájt perc, bájt óra, byte dayOfWeek, byte dayOfMonth, bájt hónap, bájt év) {// az idő- és dátumadatokat a DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS) értékre állítja; Wire.write (0); // állítsa be a következő bemenetet a másodperc regisztrációnál Wire.write (decToBcd (second)); // másodpercek beállítása Wire.write (decToBcd (perc)); // perc beállítása Wire.write (decToBcd (óra)); // órák beállítása Wire.write (decToBcd (dayOfWeek)); // a hét napjának beállítása (1 = vasárnap, 7 = szombat) Wire.write (decToBcd (dayOfMonth)); // dátum beállítása (1-31) Wire.write (decToBcd (hónap)); // a hónap beállítása Wire.write (decToBcd (év)); // set year (0 to 99) Wire.endTransmission (); } void readDS3231time (byte *másodperc, byte *perc, byte *óra, byte *dayOfWeek, byte *dayOfMonth, byte *hónap, byte *év) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Vezeték.írás (0); // állítsa a DS3231 regisztermutatót 00h Wire.endTransmission () értékre; Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // hét bájt adat kérése a DS3231 -től a 00h *second = bcdToDec (Wire.read () & 0x7f) regiszterből kiindulva; *perc = bcdToDec (Wire.read ()); *óra = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *hónap = bcdToDec (Wire.read ()); *év = bcdToDec (Wire.read ()); } void displayTime () {bájt másodperc, perc, óra, dayOfWeek, dayOfMonth, hónap, év; // adatok lekérése a DS3231 olvasásból DS3231time (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year); // küldje el a soros monitorra Serial.print (óra, DEC); // konvertálja a bájtváltozót tizedes számmá, ha megjelenik Serial.print (":"); if (perc <10) {Serial.print ("0"); } Soros.nyomtatás (perc, DEC); Serial.print (":"); if (második <10) {Soros.nyomtatás ("0"); } Serial.print (második, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Soros.nyomtatás ("/"); Sorozatnyomat (hónap, DEC); Soros.nyomtatás ("/"); Sorozatnyomat (év, DEC); Serial.print ("A hét napja:"); switch (dayOfWeek) {1. eset: Serial.println ("vasárnap"); szünet; 2. eset: Serial.println ("hétfő"); szünet; 3. eset: Serial.println ("kedd"); szünet; 4. eset: Serial.println ("szerda"); szünet; 5. eset: Serial.println ("csütörtök"); szünet; 6. eset: Serial.println ("péntek"); szünet; 7. eset: Serial.println ("szombat"); szünet; }} void loop () {displayTime (); // a valós idejű óra adatainak megjelenítése a soros monitoron, delay (1000); // minden másodperc }
Lehet, hogy sok kód van, de jól bontható kezelhető részekre.
Először tartalmazza a Wire könyvtárat, amelyet az I2C busz kommunikációjára használnak, majd az RTC buszcímét 0x68 -ban határozza meg. Ezeket két függvény követi, amelyek a tizedes számokat BCD-vé (binárisan kódolt decimálissá) alakítják át, és fordítva. Ezekre szükség van, mivel az RTC IC -k BCD -ben működnek, nem tizedes.
A setDS3231time () funkcióval állítható be az óra. Használata nagyon egyszerű, egyszerűen illessze be az értékeket évről másodpercre, és az RTC ettől az időponttól indul. Ha például a következő dátumot és időt szeretné beállítani - 2014. november 26., szerda és 21:42 és 30 másodperc -, akkor ezt használja:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
3. lépés:
Vegye figyelembe, hogy az időt 24 órás időbeállítással állítják be, és a negyedik paraméter a „hét napja”. Ez 1 és 7 közé esik, azaz vasárnaptól szombatig. Ezek a paraméterek bájtértékek, ha saját változóit helyettesíti.
Ha egyszer futtatta a funkciót, akkor bölcs dolog előtaggal ellátni a // karakterrel, és újra feltölteni a kódot, így nem állítja vissza az időt, amikor a tápfeszültség ciklus vagy a mikrovezérlő visszaállítása megtörtént. Az idő leolvasása az RTC -ből ugyanolyan egyszerű, valójában a folyamat szépen követhető a displayTime () függvényben. Hét bájtos változót kell definiálnia az RTC -ből származó adatok tárolásához, majd ezeket beszúrja a readDS3231time () függvénybe. Például, ha a változók a következők:
bájt másodperc, perc, óra, dayOfWeek, dayOfMonth, hónap, év;
… Frissítené őket az RTC aktuális adataival a következők használatával:
readDS3232time (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year);
Ezután használhatja a változókat, ahogy jónak látja, az idő és a dátum elküldésétől a soros monitorhoz, mint a példa vázlata - egészen az adatok megfelelő formába való átalakításáig mindenféle kimeneti eszköz számára.
Csak annak ellenőrzéséhez, hogy minden működik -e, írja be a megfelelő időt és dátumot a bemutató vázlatba, töltse fel, kommentálja a setDS3231time () függvényt, és töltse fel újra. Ezután nyissa meg a soros monitort, és el kell látnia az aktuális időt és dátumot.
Innentől kezdve már rendelkezésére állnak a szoftvereszközök az adatok beállításához és lekéréséhez a valós idejű óramodulból, és reméljük, hogy megérti ezeket az olcsó modulokat.
A gyártó valós idejű valós idejű órajeleit a DS1307 és a DS3231 webhelyről ismerheti meg.
Ezt a bejegyzést a pmdway.com hozta neked - mindent a gyártóknak és az elektronika rajongóinak, ingyenes szállítással világszerte.
Ajánlott:
Valós idejű óra modul használata (DS3231): 5 lépés
Valós idejű óramodul (DS3231) használata: A DS3231 egy olcsó, rendkívül pontos I2C valós idejű óra (RTC), beépített hőmérséklet-kompenzált kristályoszcillátorral (TCXO) és kristállyal. A készülék akkumulátor -bemenettel rendelkezik, és pontos időmérést tart fenn, amikor a fő áramellátás
Valós idejű grafikon rajzolása Androidon az Arduino-tól a HC-05-ig: 3 lépés
Valós idejű grafikon ábrázolása Androidon Arduino-tól HC-05-ig: Üdv, itt van egy oktatóanyag arról, hogyan lehet valós idejű grafikonot ábrázolni egy mikrovezérlőről, például egy Arduino-ról az alkalmazásra. Bluetooth-modult, például a HC-05-t használ üzenetküldő eszközként az adatok továbbítására és fogadására az Ar
A DS3231 RTC (valós idejű óra) pontos beállítása, gyors és automatizált Java használatával (+-1 másodperc): 3 lépés
A DS3231 RTC (valós idejű óra) pontos, gyors és automatikus beállítása Java használatával (+-1 másodperc): Ez az utasítás megmutatja, hogyan kell beállítani az időt egy DS3231 valós idejű órán egy Arduino és egy kis Java-alkalmazás segítségével, amely az Arduino soros kapcsolata. A program alapvető logikája: 1. Az Arduino soros kérést küld
Arduino alapú óra a DS1307 valós idejű óra (RTC) modul használatával és 0.96: 5 lépés
Arduino alapú óra a DS1307 valós idejű óra (RTC) modul használatával és 0.96: Sziasztok, srácok, ebben az oktatóanyagban látni fogjuk, hogyan lehet működő órát készíteni egy DS1307 valós idejű óramodul segítségével. OLED kijelzők. Tehát kiolvassuk az időt a DS1307 óra modulból. És nyomtassa ki az OLED képernyőn
Valós idejű óra készítése Arduino és TFT kijelző használatával - Arduino Mega RTC 3,5 hüvelykes TFT kijelzővel: 4 lépés
Hogyan készítsünk valós idejű órát Arduino és TFT kijelző használatával | Arduino Mega RTC 3,5 hüvelykes TFT kijelzővel: Látogasson el a Youtube csatornámra. 2560 és DS3231 RTC modul… .Mielőtt elkezdené… ellenőrizze a videót a YouTube-csatornámról. Megjegyzés:- Ha Arduin-t használ