Sisukord:

DS1307 ja DS3231 reaalajas kellamoodulite kasutamine Arduinoga: 3 sammu
DS1307 ja DS3231 reaalajas kellamoodulite kasutamine Arduinoga: 3 sammu

Video: DS1307 ja DS3231 reaalajas kellamoodulite kasutamine Arduinoga: 3 sammu

Video: DS1307 ja DS3231 reaalajas kellamoodulite kasutamine Arduinoga: 3 sammu
Video: DS1307 Real Time Clock RTC, Arduino Nano and the Recycled DVD 7 Segment LED Display 2024, Juuli
Anonim
DS1307 ja DS3231 reaalajas kellamoodulite kasutamine koos Arduinoga
DS1307 ja DS3231 reaalajas kellamoodulite kasutamine koos Arduinoga
DS1307 ja DS3231 reaalajas kellamoodulite kasutamine koos Arduinoga
DS1307 ja DS3231 reaalajas kellamoodulite kasutamine koos Arduinoga

Me saame pidevalt erinevatest allikatest päringuid DS1307 ja DS3231 reaalajas kellamoodulite kasutamiseks koos Arduinoga-seega on see esimene kaheosalisest õpetusest nende kasutamise kohta. Selle Arduino õpetuse jaoks on meil kasutada kahte reaalajas kella moodulit, millest üks põhineb Maxim DS1307 (ruudukujuline moodul) ja DS3231 (ristkülikukujuline moodul).

Reaalajas kella moodulite IC-de vahel on kaks peamist erinevust, mis on aja arvestamise täpsus. Esimeses moodulis kasutatud DS1307 töötab väga hästi, kuid välistemperatuur võib mõjutada DS1307 sisemist loendurit juhtiva ostsillaatoriahela sagedust.

See võib tunduda probleemina, kuid tavaliselt toob kell välja umbes viis minutit kuus. DS3231 on palju täpsem, kuna sellel on sisemine ostsillaator, mida välised tegurid ei mõjuta - ja seega on see täpne kuni paar minutit aastas. Kui teil on DS1307 moodul- ärge tundke end halvasti, on see endiselt väärtuslik tahvel ja teenib teid hästi. Mõlema mooduli puhul on vaja varupatareid.

Hea on osta uus CR2032 aku ja see moodulile sobitada. Lisaks kellaaja ja kuupäeva jälgimisele on nendel moodulitel ka väike EEPROM, häirefunktsioon (ainult DS3231) ja võimalus genereerida erineva sagedusega ruutlainet-seda kõike käsitletakse teises õpetuses.

Samm: ühendage moodul Arduinoga

Mõlemad moodulid kasutavad I2C -bussi, mis teeb ühenduse väga lihtsaks.

Kõigepealt peate tuvastama, milliseid teie Arduino või ühilduvate tahvlite tihvte kasutatakse I2C siini jaoks - need on tuntud kui SDA (või andmed) ja SCL (või kell). Arduino Uno või ühilduvatel tahvlitel on need tihvtid andmete ja kella jaoks A4 ja A5; Arduino Mega puhul on tihvtid D20 ja D21 andmete ja kella jaoks; ja kui kasutate Pro Mini-ühilduvat, on tihvtid A4 ja A5 andmete ja kella jaoks, mis on paralleelsed peamiste tihvtidega.

DS1307 moodul

Kui teil on DS1307 moodul, peate jootma juhtmed plaadile või jootma mõne sisemise päise tihvti, et saaksite kasutada hüppajajuhtmeid. Seejärel ühendage SCL- ja SDA -tihvtid oma Arduinoga ning Vcc -tihvt 5 -voldise ja GND -ga GND -ga.

DS3231 moodul

Selle mooduli ühendamine on lihtne, kuna päisepoldid on tehasesse plaadile paigaldatud. Saate lihtsalt hüppajajuhtmeid uuesti juhtida SCL -st ja SDA -st Arduino juurde ning uuesti mooduli Vcc- ja GND -tihvtidest oma plaadi 5V või 3.3. V ja GND -le. Kuid need on teie juhtmete jootmiseks teisel pool dubleeritud. Mõlemal moodulil on nõutavad tõmbetakistid, nii et te ei pea oma lisama. Nagu kõik I2C siiniga ühendatud seadmed, proovige SDA- ja SCL -juhtmete pikkus minimaalseks hoida.

2. samm: RTC -moodulist aja lugemine ja kirjutamine

Kui olete oma RTC mooduli ühendanud. sisestage ja laadige üles järgmine visand. Kuigi visandi märkmed ja funktsioonid viitavad ainult DS3231 -le, töötab kood ka DS1307 -ga.

#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Teisenda tavalised kümnendnumbrid kahekomponentseteks kümnendbaitideks decToBcd (bait val) {return ((val/10*16) + (val%10)); } // Teisenda binaarselt kodeeritud kümnendarv tavalisteks kümnendarvudeks baitideks bcdToDec (bait val) {return ((val/16*10) + (val%16)); } void setup () {Wire.begin (); Seriaalne algus (9600); // määrake siin esialgne aeg: // DS3231 sekundit, minutit, tundi, päeva, kuupäeva, kuud, aastat // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (bait sekund, bait minut, bait tund, bait dayOfWeek, bait dayOfMonth, bait kuu, bait aasta) {// määrab kellaaja ja kuupäeva andmed DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // määrake järgmine sisend sekundite registrist alustamiseks Wire.write (decToBcd (teine)); // set sekundit Wire.write (decToBcd (minut)); // määra minutid Wire.write (decToBcd (tund)); // määrake tunnid Wire.write (decToBcd (dayOfWeek)); // määratud nädalapäev (1 = pühapäev, 7 = laupäev) Wire.write (decToBcd (dayOfMonth)); // määra kuupäev (1 kuni 31) Wire.write (decToBcd (kuu)); // määrake kuu Wire.write (decToBcd (aasta)); // seada aasta (0 kuni 99) Wire.endTransmission (); } tühine lugemineDS3231time (bait *sekund, bait *minut, bait *tund, bait *dayOfWeek, bait *dayOfMonth, bait *kuu, bait *aasta) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // määrake DS3231 registri osuti 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // taotlege seitse baiti andmeid DS3231 -lt alates registrist 00h *second = bcdToDec (Wire.read () & 0x7f); *minut = bcdToDec (Wire.read ()); *tund = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *kuu = bcdToDec (Wire.read ()); *aasta = bcdToDec (Wire.read ()); } void displayTime () {bait sekund, minut, tund, dayOfWeek, dayOfMonth, kuu, aasta; // andmete toomine DS3231 lugemisest DS3231time (& sekund, & minut, & tund, & dayOfWeek, & dayOfMonth, & month, & year); // saatke see jadamonitorile Serial.print (tund, DEC); // teisendada baitmuutuja kümnendarvuks, kui kuvatakse Serial.print (":"); if (minut <10) {Serial.print ("0"); } Seerianumber (minut, DEC); Serial.print (":"); kui (teine <10) {Serial.print ("0"); } Serial.print (teine, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (kuu, DEC); Serial.print ("/"); Serial.print (aasta, DEC); Serial.print ("Nädalapäev:"); switch (dayOfWeek) {juhtum 1: Serial.println ("pühapäev"); murda; juhtum 2: Serial.println ("esmaspäev"); murda; juhtum 3: Serial.println ("teisipäev"); murda; juhtum 4: Serial.println ("kolmapäev"); murda; juhtum 5: Serial.println ("neljapäev"); murda; juhtum 6: Serial.println ("reede"); murda; juhtum 7: Serial.println ("laupäev"); murda; }} void loop () {displayTime (); // kuvab reaalajas kellaandmeid jadamonitoril, delay (1000); // iga sekund }

Koode võib olla palju, kuid see laguneb hästi hallatavateks osadeks.

See sisaldab esmalt Wire raamatukogu, mida kasutatakse I2C siinisideks, millele järgneb RTC siiniaadressi määramine 0x68. Neile järgnevad kaks funktsiooni, mis teisendavad kümnendarvud BCD-ks (binaarkodeeritud kümnendkohaks) ja vastupidi. Need on vajalikud, kuna RTC IC -d töötavad BCD -s, mitte kümnendkohas.

Kella seadistamiseks kasutatakse funktsiooni setDS3231time (). Selle kasutamine on väga lihtne, lihtne sisestada väärtused aastast aastasse sekundisse ja RTC alustab sellest ajast. Näiteks kui soovite määrata järgmise kuupäeva ja kellaaja - kolmapäev, 26. november 2014 ning kell 21:42 ja 30 sekundit -, kasutage järgmist:

setDS3231time (30, 42, 21, 4, 26, 11, 14);

3. samm:

Pange tähele, et kellaaeg määratakse 24-tunnise aja järgi ja neljas parameeter on „nädalapäev”. See jääb vahemikku 1 kuni 7, mis on vastavalt pühapäevast laupäevani. Need parameetrid on baitväärtused, kui asendate oma muutujad.

Kui olete funktsiooni käivitanud, on mõistlik lisada sellele eesmärk // ja laadida kood uuesti üles, nii et see ei nullita aega pärast toite lõppemist ega mikrokontrolleri lähtestamist. RTC -st kellaaja lugemine on sama lihtne, tegelikult saab protsessi korralikult jälgida funktsiooni displayTime () sees. RTC andmete salvestamiseks peate määratlema seitse baitmuutujat ja need sisestatakse seejärel funktsiooni readDS3231time (). Näiteks kui teie muutujad on järgmised:

bait sekund, minut, tund, dayOfWeek, dayOfMonth, kuu, aasta;

… värskendaksite neid RTC praeguste andmetega, kasutades järgmist:

readDS3232time (& sekund, & minut, & tund, & dayOfWeek, & dayOfMonth, & kuu ja aasta);

Seejärel saate muutujaid kasutada oma äranägemise järgi, alates kellaaja ja kuupäeva saatmisest jadamonitorile, nagu näidisvisandil näidatakse - kuni andmete teisendamiseni kõikvõimalike väljundseadmete jaoks sobivasse vormi.

Lihtsalt, et kontrollida, kas kõik töötab, sisestage näidisvisandisse sobiv kellaaeg ja kuupäev, laadige see üles, kommenteerige funktsiooni setDS3231time () ja laadige see uuesti üles. Seejärel avage jadamonitor ja teile peaks kuvama jooksva kellaaja ja kuupäeva.

Sellest hetkest alates on teil olemas tarkvarariistad andmete seadistamiseks ja reaalajas kella moodulist toomiseks ning loodame, et teil on arusaam nende odavate moodulite kasutamisest.

Reaalajas kella IC-de kohta saate lisateavet tootja veebisaidilt-DS1307 ja DS3231.

Selle postituse tõi teile pmdway.com - kõik tegijatele ja elektroonikahuvilistele, tasuta kohaletoimetamine kogu maailmas.

Soovitan: