Почему модуль RTC не возвращает правильную дату/время?

У меня есть модуль RTC DS1307 (MR005-001.2) на Arduino Uno. Я использую библиотеки Wire.h / Time.h / DS1307RTC.h.

Возвращенная дата и время совершенно неверны ("17:18:9 2 4 2036") ... Что я делаю не так ??

Спасибо !

Вот мой частичный код для настройки() :

    setSyncProvider(RTC.get);
  if(timeStatus()!= timeSet) 
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");

Здесь написано "RTC установил системное время", так что я думаю, что-то происходит правильно...

Вот мой частичный код для loop() :

    Serial.print(hour());
  Serial.print(":");
  Serial.print(minute());
  Serial.print(":");
  Serial.print(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year()); 
  Serial.println();

Точно так же, как в приведенном примере ... и возвращенная дата/время "17:18:9 2 4 2036"

, 👍0

Обсуждение

Вы когда-нибудь [устанавливали time](https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code#setting-the-time)?, @Gerben

Я думаю, если функция TimeStatus() возвращает набор времени, это потому, что время было установлено ? В документации для "Набора времени" в качестве возвращаемого значения указано : "Время установлено и синхронизировано. Значения времени и даты недопустимы, если статус установлен по времени. В противном случае можно использовать значения, но возвращенное время может измениться, если статус TimeNeedsSync. ". Я что-то неправильно понимаю ? Я думал, что смысл часов RTC заключается в синхронизации с часами компьютера, так зачем устанавливать время ?, @Mcrae

Это не синхронизируется с помощью магии. Для этого вам нужно добавить код (хотя бы один раз). `Набор времени " используется только в том случае, если библиотека не может получить доступ к модулю RTC. Модуль RTC считает, что сейчас 2036 год, и просто продолжает увеличивать время каждую секунду., @Gerben

Можете ли вы, по крайней мере, подтвердить, что часы работают так, как ожидалось, т. е. текущее время увеличивается так, как ожидалось?, @jfpoilpret


1 ответ


1

Вы настраиваете интерпретацию, которая должна быть больше похожа на:

 setSyncProvider(RTC.get);
 if(timeStatus()!= timeSet) 
   Serial.println("RTC has never been set");
 else
    Serial.println("RTC has a time");

Чтобы условно синхронизировать часы со временем компиляции, если часы не запущены:

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__));
}
// following line unconditionally resets 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__));

Чтобы безоговорочно синхронизировать его со временем компиляции, раскомментируйте последнюю строку и перезагрузите в течение одного цикла, затем повторно прокомментируйте ее и перезагрузите, чтобы часы работали сами по себе.

,