Küsimus:
Miks saab minu reaalajas kell arvutist vale aja?
lunafish
2014-07-19 02:24:19 UTC
view on stackexchange narkive permalink

Ma tahan, et minu reaalajas olev kell määraks kellaaja minu arvutis. Järgmise visandi käivitamisel teatab reaalajas kell aga 32-33 sekundit varem, kui minu arvuti ütleb.

  #include <Wire.h> # include "RTClib.h" RTC_DS1307 RTC; void setup () {Serial.begin (57600); Traat.alusta (); RTC algus (); if (! RTC.isrunning ()) {Serial.println ("RTC ei tööta!"); // järgmine rida määrab RTC kuupäevaks, millal & see visand koostati // kommenteerige & üleslaadimist, et kellaaega määrata, kuupäev ja alustage RTC käivitamist! RTC.adjust (DateTime (__ DATE__, __TIME__)); }} void loop () {DateTime now = RTC.now (); Seeriaprint (nüüd.aasta (), DEC); Serial.print ('/'); Seeriaprint (nüüd.kuu (), DEC); Serial.print ('/'); Serial.print (nüüd.päev (), DEC); Serial.print (''); Serial.print (nüüd.tund (), DEC); Serial.print (':'); Serial.print (nüüd.minut (), DEC); Serial.print (':'); Seeriaprint (nüüdsekund (), DEC); Serial.println ();}  

Olen proovinud ka RTC-d kellaaega käsitsi seadistada, kuid mul on lõpuks sama probleem: RTC on alati 32-33 sekundit maast madalam seadke see. Viivitus juhtub kohe, kui visandi käivitan. Mulle tundub väga veider, et olenemata sellest, kuidas ma aega tahan määrata, satun lõpuks täpselt sama vea juurde. Võin öelda Arduinole, et ta teataks, et kellaaeg on 33 sekundit pärast seda, kui RTC seda ütleb, kuid see lahendus näib kuidagi visandlik ja ma olen mures, et minu RTC-s või minu kasutamisviisis on midagi põhimõtteliselt valesti.

Kasutan Arafino Unot koos Adafruit'i kokkupandud andmete logimise kilbiga. Andmete logimise kilp kasutab DS1307 RTC-d. Kas kellelgi on seda probleemi varem olnud või on ideid selle kohta, mis selle võib põhjustada? Igasugune abi oleks väga teretulnud.

Olen kasutanud Hugo Bertini ja Oli selgitust oma projektides kasutamiseks ja see töötab! Aitäh (: aga see läheb 26 sekundi võrra kiiremini ....
Viis vastused:
sachleen
2014-07-19 03:02:45 UTC
view on stackexchange narkive permalink

__DATE__ ja __TIME__ määratakse koodi koostamise ajal, nii et need jäävad loomulikult maha, kuna kood peab ikkagi kompileerimise lõpetama ja seejärel kiibile vilkuma.

Vaadake Arduino mänguväljaku näidet selle kohta, kuidas sünkroonida seda arvutisse jada kaudu.

TimeSerial.pde näitab Arduino kella ilma välise riistvarata.

Selle sünkroonib jadapordi kaudu saadetud ajasõnumid. Kaaslane, kes töötab visandit, edastab need sõnumid automaatselt, kui see töötab ja on ühendatud Arduino jadapordiga.

Oli
2017-09-21 23:59:34 UTC
view on stackexchange narkive permalink

Nihke saate parandada, kutsudes funktsioonis setup () ühe korra järgmise koodi:

  RTC_DS3231 rtc; DateTime now = rtc.now (); rtc.adjust (DateTime (now.unixtime () + 10)); // lisage nihke parandamiseks praegusele kellaajale 10s  
Hugo Bertini
2018-05-30 03:50:09 UTC
view on stackexchange narkive permalink

Mul on Arduino UNO ja Nano puhul sarnane probleem. Mõlemad samast arvutist. Tõepoolest, tundub, et kajastub kompileerimisaja ja MCU käivitamise aeg.

Eeldades, et RTC-l on hea aku ja kompileerimise + üleslaadimise ajad on järjepidevad, lisades siis koodile triivikompensatsiooni tundub, et teeb seda trikki. Siin on, kuidas ma seda tegin (minu puhul tegi "trikki" 7 sekundit - vabandust hardocode'i pärast, kuid see on lihtsalt kirjeldamise eesmärgil):

  RTC.adjust ( DateTime (__ DATE__, __TIME __)); DateTime t = DateTime (RTC.now (). Unixtime () + 7); RTC.adjust (t);  

Lugupidamisega, Hugo Bertini

user3306881
2020-06-26 19:06:51 UTC
view on stackexchange narkive permalink

<DS1307RTC.h>i teegi abil saab DS1307 aja seadistamise ajal reguleerida, kasutades globaalset muutujat ja lisades selle funktsiooni getTime () Sec-i lugemisele, näiteks järgmiselt:

  #hõlmab <DS1307RTC.h>tmElements_t tm; bait reguleeri = 8; // sekunditega viivitamine, võimaldades kompilaatori allalaadimise aega / ********************** bool getTime (const char * str) {int Hour, Min, Sec; kui (sscanf (str, "% d:% d:% d", &Hour, &Min, &Sec)! = 3) tagastab vale; tm.Tund = tund; tm Minut = Min; tm.Teine = Sec + korrigeeritud; return true;}  
antonio
2017-04-22 05:48:36 UTC
view on stackexchange narkive permalink

Arduino võtab arvuti tööaja ja saadab selle DS1307-le. Kopeerimiseks kuluv aeg on see, mida näete valesti. Lahendaksin probleemi, pikendades arvutiaega vajalikes sekundites, mis teie arvates on hilinenud, ja programmeerimisel peaks teil olema täpne aeg.



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...