Darba sākšana ar reāllaika pulksteņiem - 💡 Fix My Ideas

Darba sākšana ar reāllaika pulksteņiem

Darba sākšana ar reāllaika pulksteņiem


Autors: Ethan Holmes, 2019

Reāllaika (RTC) mikroshēma ir gluži tāpat kā pulkstenis - tā darbojas uz akumulatora un patur jums laiku pat tad, ja ir strāvas padeves pārtraukums. Izmantojot savu projektu RTC, varat sekot gariem laika grafikiem, pat ja pārprogrammējiet mikrokontrolleru vai atvienojiet to no USB vai tā strāvas kontaktligzdas.

Lielākajai daļai mikrokontrolleru, tostarp Arduino, ir iebūvēts laika kontrolieris, ko sauc par milis (), un mikroshēmā ir iebūvēti taimeri, kas var sekot ilgākiem laika periodiem, piemēram, minūtēm vai dienām. Tātad, kāpēc jūs vēlaties, lai būtu atsevišķa RTC mikroshēma? Nu, lielākais iemesls ir tas, ka milis () seko līdzi laikam, kad Arduino pēdējo reizi darbojās. Tas nozīmē, ka tad, kad jauda ir ieslēgta, milisekundes taimeris tiek iestatīts atpakaļ uz 0. Arduino nezina, ka tas ir „otrdien” vai “8. marts”, tas viss var pateikt, ir “14 000 milisekundes kopš pēdējās ieslēgts. ”

Labi, tad ko tad, ja jūs gribējāt iestatīt laiku Arduino? Jums vajadzētu ieprogrammēt datumu un laiku, un jūs to varētu skaitīt no šī brīža. Bet, ja tas zaudē spēku, jums jāatjauno laiks kā lēts modinātājs: katru reizi, kad viņi zaudē jaudu, viņi mirgo 12:00.

Lai gan dažiem projektiem šāda veida pamatdarbība ir OK, citiem projektiem, piemēram, datu reģistrētājiem, pulksteņiem utt., Ir jābūt konsekventai laika kontrolei, kas netiek atiestatīta, kad Arduino akumulators nomirst vai tas ir pārprogrammēts. Tātad, mēs ietveram atsevišķu RTC! RTC ir specializēta mikroshēma, kas tikai seko laikam. Tas var rēķināties ar lēcieniem, un zina, cik dienas ir katru mēnesi. Vienkārši ņemiet vērā, ka tas neuztraucas par vasaras laiku - jo tas mainās no vietas uz citu, jums būs jānorāda to konkrētajam reģionam vai preferencēm.

Šeit ir vecāka datora mātesplate ar Dallas Semiconductor reālā laika pulksteni (RTC), ko sauc par DS1387. Tur ir litija akumulators, tāpēc tas ir tik liels. ; KREDĪTS: Wikimedia Commons

RTC izvēle

Trīs reālā laika pulksteņus parasti izmanto veidotāji: PCF8523, DS1307 un DS32231. Tie ir lieliski akumulatori ar RTC, kas ir piemēroti datu reģistrēšanai, pulksteņu veidošanai, laika zīmogošanai, taimeri un trauksmes signāli. Katrs sazinās, izmantojot divu vadu I2C protokolu. Kamēr tai ir monētu šūna, lai to palaistu, jūsu RTC ar prieku atzīmēs jau vairākus gadus.

»PCF8523 nav augstas precizitātes - tas var zaudēt vai iegūt līdz 2 sekundēm dienā - bet tas ir vislētākais no trim. Un tas darbojas ar 3.3V vai 5V jaudu un loģiku.

»DS1307 ir visizplatītākais; tas nav arī precīzs, bet tas ir lēts un viegli lodējams. Tas vislabāk darbojas ar 5V balstītiem mikrokontrolleriem, piemēram, Arduino; tas prasa 5 V jaudu, lai gan tas var strādāt ar 3.3V loģiku.

Datu lapa DS3231 izskaidro, ka šī temperatūras kompensētā mikroshēma ir „ļoti precīza I²C integrēta RTC / TCXO / Crystal”. Un, hei, tas dara tieši to, ko tā saka uz alvas! Šis RTC ir visprecīzākais, ko var iegūt mazā, mazjaudas komplektā, un tas darbojas ar 3.3V vai 5V plāksnēm.

Izmantojot DS3231

Lielākā daļa RTC izmanto ārējo 32kHz laika kristālu, lai saglabātu laiku ar zemu strāvu. Tas viss ir labi un labi, bet šiem kristāliem ir neliela novirze, īpaši tad, kad mainās temperatūra - temperatūra ļoti, ļoti nedaudz ietekmē temperatūras svārstību biežumu, bet tas palielinās. DS3231 ir smalkā iepakojumā, jo kristāls ir mikroshēmas iekšpusē! Un tieši blakus integrētajam kristālam ir temperatūras sensors. Šis sensors kompensē frekvenču izmaiņas, pievienojot vai noņemot pulksteņu ērces, lai laika skaitīšana paliktu grafikā.

Adafruit DS3231 piedāvā kompaktu, galdiņiem draudzīgu izlidošanas dēļu. Ar CR1220 monētas šūnu, kas pievienota aizmugurē, jūs varat iegūt daudzu gadu precizitātes laiku, pat ja tiek zaudēta galvenā jauda. Jūs varat lodēt pievienoto galveni, lai to pievienotu maizes dēlam, vai vienkārši lodējiet vadus tieši uz spilventiņiem.

DS3231 Pinout

Strāvas tapas • Vin - jauda. Tā kā RTC var darbināt no 2.3V līdz 5.5V jaudai, nav nepieciešams regulators vai līmeņa pārslēgs, lai izmantotu 3,3 V vai 5 V loģiku / jaudu. Vienkārši dodiet šai padomei tādu pašu jaudu kā jūsu mikrokontrollera loģiskais līmenis - piemēram, 5V mikroprocesoram, piemēram, Arduino, izmantojiet 5V. • GND - kopīgs spēks un loģika. I2C loģikas tapas • SCL - I2C pulksteņa tapas savienojums ar mikrokontrollera I2C pulksteņa līniju. Šis taps ir 10K pullup rezistors uz Vin. • SDA - I2C datu kontakts, izveidojiet savienojumu ar mikrokontrollera I2C datu līniju. Arī 10K pullup rezistors uz Vin. Citi tapas • BAT - tas ir tāds pats savienojums kā akumulatora pozitīvajam spilventiņam. Izmantojiet to, ja vēlaties, lai no monētas šūnas darbinātu kaut ko citu, vai arī nodrošiniet akumulatora dublējumu no atsevišķa akumulatora. VBat var būt no 2.3V līdz 5.5V un DS3231 pārslēgsies, kad tiek zaudēta galvenā Vin jauda. • 32K - 32 kHz oscilatora izeja. Atveriet drenāžu, tāpēc jums ir nepieciešams pievienot pullup, lai lasītu šo signālu tieši no mikrokontrollera tapas. • SQW - izvēles kvadrātveida viļņu vai pārtraukuma izeja. Atkal atveriet drenāžu, pievienojiet pullup, lai nolasītu šo signālu no mikrokontrollera tapas. • RST - tas ir nedaudz atšķirīgs nekā vairums RST tapu; tā nav tikai ievade, tā ir paredzēta izmantošanai, lai atiestatītu ārējo ierīci vai norādītu, kad galvenā jauda ir pazaudēta. Atveriet drenāžu, bet tam ir iekšējais 50K pullup. Pievilkšana patur šo tapu spriegumu tik ilgi, kamēr Vin ir klāt. Kad Vin krīt un mikroshēma pārslēdzas uz akumulatora dublējumu, šis taps ir zems.

Ja jūs izvietosiet savu RTC kaut kur vēsāku nekā atdzist, pārbaudiet Chris Fastie salīdzinājumu par to, kā četri DS3221 mikroshēmas varianti (un to baterijas) darbojas ļoti zemā temperatūrā.

Arduino izmantošana

Šo izlaušanos var viegli stiept jebkuram mikrokontrollerim; šeit mēs izmantosim Arduino (TK attēls). Citiem mikrokontrolleriem tikai pārliecinieties, vai tā ir I2C, un pēc tam pārnes kodu - tas ir diezgan vienkārši!

Hmm, pirms šī attēla izņemšanas no Arduino 5V kontaktspraudņa uz maizes dēļa Vin sliedes, neaizmirsīšu to!

Pieslēdziet Vin elektroapgādei, 3V – 5V ir labi. Izmantojiet tādu pašu spriegumu kā jūsu mikrokontrollera loģikai; vairumam Arduinos, tas ir 5V. Savienojiet GND ar kopējo jaudu / datu zemi. Pievienojiet SCL tapu savam Arduino I2C pulkstenim SCL. Uno un citos Armugainas Atmega328 modeļos tas ir pazīstams arī kā A5; uz Mega digitālā 21; un par Leonardo vai Micro, digitālo 3. Pievienojiet SDA pin uz I2C datu SDA pin jūsu Arduino. Uno un citos 328 gados tas ir arī pazīstams kā A4; uz Mega digitālā 20; un par Leonardo / Micro, digitālo 2. SVARĪGI: DS3231 ir noklusējuma I2C adrese 0x68 un to nevar mainīt.

Lejupielādēt RTClib Lai sāktu izmantot savu DS3231, jums būs nepieciešama Arduino bibliotēka, lai iegūtu laiku un iestatītu laiku no RTC. Mēs izmantojam JeeLab lieliskā RTClib dakšiņu - mūsu versija ir nedaudz atšķirīga, tāpēc, lūdzu, izmantojiet tikai mūsu DS3231 izlaušanos, lai pārliecinātos, ka tas ir saderīgs!

Lejupielādējiet Adafruit RTClib no mūsu Github krātuves vietnē github.com/adafruit/RTClib.

Pārdēvējiet nesaspiestu mapi RTClib un pārbaudiet, vai mapē RTClib ir RTClib.cpp un RTClib.h.

Ievietojiet RTClib bibliotēkas mapi [arduinosketchfolder] / bibliotēkās / mapē. (Iespējams, būs jāizveido bibliotēkas apakšmapes, ja tā ir jūsu pirmā bibliotēka.)

Restartējiet IDE.

Mums ir arī lieliska apmācība par Arduino bibliotēkas instalāciju Adafruit.com

Jūsu pirmais RTC tests Pirmā lieta, ko mēs parādīsim, ir testa skice, kas lasīs laiku no RTC reizi sekundē. Mēs arī parādīsim, kas notiks, ja izņemat akumulatoru un nomainīsit to, jo tas pārtrauc RTC darbību. Lai sāktu, noņemiet akumulatoru no turētāja (attēls TK), kamēr Arduino nav barots vai pievienots USB. Pagaidiet 3 sekundes un pēc tam nomainiet akumulatoru. Tas atiestata RTC mikroshēmu.

Ielādēt demo skici Arduino IDE atveriet failu → Piemēri → RTClib → ds3231 un augšupielādējiet to savā Arduino, pieslēdzot pie RTC.

Tagad pārbaudiet Serial Monitor konsoli ar 9600 bitu. Pēc dažām sekundēm jūs redzēsiet ziņojumu, ka Arduino pamanīja, ka šī ir pirmā reize, kad DS3231 ir ieslēgts, un iestatīs laiku, pamatojoties uz Arduino skici.

Atvienojiet Arduino plus RTC uz dažām sekundēm (vai minūtēm vai stundām vai nedēļām) un pievienojiet atpakaļ.

Nākamajā reizē, kad palaižat to, jūs nesaņemsiet to pašu “RTC zaudēto jaudu”, bet tas tūlīt nāks un ļauj jums uzzināt pareizo laiku!

No šī brīža jums vēlreiz nav jāiestata laiks. Akumulators ilgs 5 vai vairāk gadus.

Laika lasīšana Tagad, kad RTC labprāt atzīmē prom, mēs vēlamies vaicāt to laiku. Apskatīsim skici vēlreiz, lai redzētu, kā tas tiek darīts.

void loop () {DateTime now = rtc.now (); Serial.print (now.year (), DEC); Serial.print ('/'); Serial.print (now.month (), DEC); Serial.print ('/'); Serial.print (now.day (), DEC); Serial.print ("("); Serial.print (daysOfTheWeek [now.dayOfTheWeek ()]); Serial.print (")"); Serial.print (now.hour (), DEC); Serial.print (':'); Serial.print (now.minute (), DEC); Serial.print (':'); Serial.print (now.second (), DEC); Serial.println ();

Ir diezgan daudz tikai viens veids, kā iegūt laiku, izmantojot RTClib, kas ir jāzvana tagad (), funkcija, kas atgriež datuma laika objektu, kas apraksta gadu, mēnesi, dienu, stundu, minūti un otro, kad jūs zvanāt tagad () .

Ir dažas RTC bibliotēkas, kuras vietā jūs kaut ko sauc par RTC.year () un RTC.hour (), lai iegūtu pašreizējo gadu un stundu. Tomēr ir viena problēma, ja, ja jūs notiks, lai pieprasītu minūti pa labi no plkst. 3:14:59 tieši pirms nākamās minūtes apgriešanās, tad otrais pa labi pēc minūtes rullis (tā 3:15:00) jums. Es redzēšu laiku kā 3:14:00, kas ir minūte. Ja jūs to izdarītu otrādi, jūs varētu saņemt 3:15:59 - tik vienu minūti no otras puses.

Tā kā tas nav īpaši maz ticams gadījums - it īpaši, ja jūs bieži uzdodat laiku - mēs uzreiz paņemam laiku no RTC, un tad mēs varam to atdalīt dienā () vai otrajā () kā redzams iepriekš. Tas ir mazliet vairāk pūļu, bet mēs domājam, ka ir vērts izvairīties no kļūdām!

No Datuma laika objekta mēs varam arī saņemt “laika zīmogu”, zvanot uz unixtime (), kas skaitās sekundes (neskaitot lēciena sekundes) kopš 1970. gada 1. janvāra pusnakts:

Serial.print ("kopš pusnakts 1/1/1970 ="); Serial.print (now.unixtime ()); Serial.print ("s ="); Serial.print (now.unixtime () / 86400L); Serial.println ("d");

Tā kā dienā ir 60 * 60 * 24 = 86,400 sekundes, tad kopš tā laika varam viegli aprēķināt dienas. Tas var būt noderīgi, ja vēlaties izsekot, cik daudz laika ir pagājis kopš pēdējā vaicājuma, padarot kādu matemātiku daudz vieglāku. Lai pārbaudītu, vai tā ir bijusi 5 minūtes vēlāk, vienkārši pārbaudiet, vai unixtime () ir palielinājies par 300, un jums nav jāuztraucas par stundu izmaiņām.


Turpinot

CircuitPython - DS3231 RTC ir viegli izmantot arī ar CircuitPython! Github ir ērts modulis, kuru varat ielādēt uz kuģa un sākt iestatīt un lasīt laiku ar Python kodu. Vienkārši importējiet DS3231 moduli, izveidojiet klases gadījumu un mijiedarbieties ar datetime īpašumu, lai iestatītu un iegūtu laiku (attēls TK)! Uzziniet vairāk šeit.

Raspberry Pi - ultra-zemo cenu Pi trūkst RTC; tā ielādē laiku no interneta NTP (tīkla laika protokola) serveriem. Atsevišķiem projektiem ir viegli pieslēgt RTC. Pārliecinieties, vai izmantojat atjauninātu kodolu ar RTC draiveriem, iespējojiet I2C un pievienojiet savu RTC uz /boot/config.txt, piem. dtoverlay = i2c-rtc, ds3231. Pēc tam noņemiet viltoto hwclock paketi un rediģējiet reālo aparatūras pulksteņa skriptu / lib / udev / hwclock-set, lai izmantotu savu RTC. Uzziniet vairāk šeit.



Jums Var Būt Interesē

Mājas automatizācijas rīki

Mājas automatizācijas rīki


CRAFT projekts - pārveidotais pirkums

CRAFT projekts - pārveidotais pirkums


Flashback: hidroponiskais dārzeņu dārzs

Flashback: hidroponiskais dārzeņu dārzs


Zudušās zināšanas: tiešsaistes resursi

Zudušās zināšanas: tiešsaistes resursi