Chcę, aby mój zegar czasu rzeczywistego ustawiał czas jako czas na moim komputerze. Jednak po uruchomieniu poniższego szkicu zegar czasu rzeczywistego zgłasza, że jest o 32-33 sekundy wcześniej niż mówi mój komputer.
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
// uncomment it & upload to set the time, date and start run the RTC!
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
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(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
Próbowałem też ręcznie ustawić czas w RTC, ale mam ten sam problem: RTC jest zawsze o 32-33 sekund opóźniony. Opóźnienie ma miejsce, gdy tylko uruchomię szkic. Wydaje mi się bardzo dziwne, że bez względu na to, jak próbuję ustawić czas, mam dokładnie ten sam błąd. Mogę powiedzieć Arduino, aby zgłosiło czas jako 33 sekundy po tym, co mówi RTC, ale to rozwiązanie wydaje się dość szkicowe i martwię się, że coś jest zasadniczo nie tak z moim RTC lub sposobem, w jaki go używam.
Używam Arduino Uno ze złożoną tarczą do rejestrowania danych od Adafruit. Tarcza rejestrowania danych wykorzystuje DS1307 RTC. Czy ktoś miał wcześniej ten problem lub miał jakieś pomysły na to, co może być przyczyną? Każda pomoc będzie mile widziana.
źródło
Odpowiedzi:
__DATE__
I__TIME__
są ustawione, gdy kod kompiluje więc będą naturalnie być za ponieważ kod musi jeszcze zakończyć kompilacji i następnie błysnął na chipie.Zobacz Arduino Playground, gdzie znajduje się przykład synchronizacji z komputerem przez port szeregowy.
źródło
Możesz naprawić przesunięcie, wywołując raz następujący kod w
setup()
funkcji:źródło
Mam podobny problem z Arduino UNO i Nano. Oba z tego samego komputera. Rzeczywiście wygląda na to, że czas potrzebny na przesłanie + kompilacja startu MCU jest odzwierciedlony.
Zakładając, że RTC ma dobrą baterię i czasy kompilacji + wysyłania są spójne, to dodanie kompensacji znoszenia do kodu wydaje się załatwić sprawę. Oto jak to zrobiłem (w moim przypadku 7 sekund zrobiłem „trick” - przepraszam za hardocode, ale to tylko w celach opisowych):
Pozdrawiam, Hugo Bertini
źródło
Arduino zabiera czas komputera i wysyła go do DS1307. Czas potrzebny na skopiowanie jest tym, który widzisz źle. Rozwiązałbym ten problem, przyspieszając czas w komputerze, o kilka sekund, o których mówisz, że są opóźnione, a podczas programowania powinieneś mieć dokładny czas.
źródło