Я хочу, чтобы мои часы реального времени устанавливали время на моем ПК. Однако, когда я запускаю следующий эскиз, часы реального времени сообщают, что время на 32-33 секунды раньше, чем мой компьютер говорит, что время.
#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();
}
Я также пытался вручную установить время на RTC, но в итоге я столкнулся с той же проблемой: время на RTC всегда на 32-33 секунды меньше того, что я установил. Лаг случается, как только я запускаю эскиз. Мне кажется очень странным, что независимо от того, как я пытаюсь установить время, я получаю точно такую же ошибку. Я могу сказать Arduino сообщить, что время составляет 33 секунды после того, что говорит RTC, но это решение кажется отрывочным, и я обеспокоен тем, что что-то не так с моим RTC или тем, как я его использую.
Я использую Arduino Uno с собранным щитом регистрации данных от Adafruit. Экран регистрации данных использует RTC DS1307. Кто-нибудь имел эту проблему раньше, или есть какие-либо идеи о том, что может быть причиной? Любая помощь приветствуется.
источник
Ответы:
Символы
__DATE__
и__TIME__
устанавливаются, когда код компилируется, поэтому они, естественно, будут отставать, поскольку код все еще должен завершить компиляцию и затем быть передан в чип.Посмотрите Arduino Playground для примера того, как синхронизировать его с вашим компьютером через последовательный порт.
источник
Вы можете исправить смещение, вызвав один раз следующий код в
setup()
функции:источник
У меня похожая проблема с Arduino UNO и Nano. Оба с одного компьютера. Действительно, похоже, что время, которое требуется от времени компиляции до загрузки + запуска MCU, отражается.
Предполагая, что RTC имеет хорошую батарею и время компиляции + загрузки одинаково, тогда добавление компенсации дрейфа к коду, похоже, поможет. Вот как я это сделал (в моем случае 7 секунд сделал «трюк» - извините за хардокод, но это только для целей описания):
С уважением, Уго Бертини
источник
Arduino отнимает у компьютера время и отправляет его на DS1307. Время, которое требуется для копирования, - это то, что вы видите неправильно. Я бы решил проблему, увеличив время компьютера на те секунды, которые, как вы говорите, задерживаются, и при программировании у вас должно быть точное время.
источник