Почему мои часовые пояса в реальном времени получают неправильное время с моего ПК?

Я хочу, чтобы часы в реальном времени устанавливали время как время на моем ПК. Однако, когда я запускаю следующий эскиз, часы реального времени сообщают о времени как 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 со сборщиком Data Logging Shield от Adafruit. Экран регистрации данных использует DS1307 RTC. У кого-нибудь была эта проблема раньше или какие-либо идеи о том, что может вызвать ее? Любая помощь приветствуется.

9 голосов | спросил lunafish 19 J000000Saturday14 2014, 01:24:19

4 ответа


17

__DATE__ и __TIME__ устанавливаются, когда код компилируется, поэтому они, естественно, будут отставать, так как код еще должен закончить компиляцию, а затем высветится на чипе.

См. Arduino Playground для примера того, как синхронизировать его с компьютером по серийному номеру.

  

TimeSerial.pde показывает Arduino как часы без внешнего оборудования.

     

Он синхронизируется сообщениями времени, отправленными через последовательный порт.   companion Обработка эскиза автоматически предоставит эти сообщения   если он запущен и подключен к последовательному порту Arduino.

ответил sachleen 19 J000000Saturday14 2014, 02:02:44
0

Вы можете исправить смещение, вызвав один раз следующий код в функции setup():

RTC_DS3231 rtc;

DateTime now = rtc.now();
rtc.adjust(DateTime(now.unixtime() + 10)); // add 10s to current time for fixing the offset
ответил Oli 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 21 Sep 2017 21:59:33 +0300 2017, 21:59:33
0

Я испытываю аналогичную проблему с Arduino UNO и Nano. Оба с того же ПК.  Действительно, похоже, что время, затрачиваемое на компиляцию, на загрузку + начало MCU отражается.

Предполагая, что у RTC есть хорошая батарея, а время компиляции + выгрузки согласованы, добавление компенсации дрейфа в код, похоже, делает трюк. Вот как я это сделал (в моем случае 7 секунд сделал «трюк» - извините за hardocode, но это для простых целей описания):

RTC.adjust(DateTime(__DATE__, __TIME__));
DateTime t = DateTime(RTC.now().unixtime()+7);
RTC.adjust(t);

С уважением, Хьюго Бертини

ответил Hugo Bertini 30 Mayam18 2018, 01:50:09
-1

Arduino берет компьютерное время и отправляет его на DS1307. Время, которое требуется для копирования, - это тот, который вы видите неправильно. Я бы решил проблему, продвигая компьютерное время на необходимые секунды, которые, как вы говорите, задерживаются, и при программировании вы должны иметь точное время.

ответил antonio 22 AMpSat, 22 Apr 2017 03:48:35 +030048Saturday 2017, 03:48:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132