ds1307
- Войдите на сайт для отправки комментариев
Ср, 10/01/2018 - 18:23
Взял пример из библиотеки. По идее он должен записать системное время .Но получаеться что время записанное в ds1307 на 16 минут меньше системного. В чем может быть проблема?
#include "RTClib.h" RTC_DS1307 RTC; void setup () { Serial.begin(9600); Wire.begin(); RTC.begin(); //Wire.beginTransmission(0x68); //Wire.write(0x7); //Wire.write(0x10); //Wire.endTransmission(); if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // строка ниже используется для настройки даты и времени часов 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(); delay(3000); }
А что, строка "RTC is NOT running!" выводится?
нет
Взял пример из библиотеки. По идее он должен записать системное время .Но получаеться что время записанное в ds1307 на 16 минут меньше системного. В чем может быть проблема?
В том, что в строке 23 RTC инициализирует не текущим временем, а временем последней компиляции скетча. Видимо ты 16 минут тупил между компиляцией и загрузкой - и вот результат :)
нет прошивка сразу после компиляции и не один раз пробовал....
Тогда проверь время на том компе, на котором писал скетч - может оно на 16 минут отстает?
Если нет - строку 23 перемести в строку 16, скомпилируй и сразу загрузи. И посмотри результат.
У меня вообще время выставлятся не хотело
переместил строчку в
после
А мне кажется, что зря вы пытаетесь делать RTC.adjust() внутри условия
if
(! RTC.isrunning())
А мне кажется, что зря вы пытаетесь делать RTC.adjust() внутри условия
if
(! RTC.isrunning())
Очевидно, раз у него строка выше ничего в сериал не выводит. Я уже одному товарищу на аналогичный косяк указывал. Но они это не сами придумывают, это реально пример из библиотеки, которая среди первых поиском находится. То ли это просто опечатка, теперь широко расползшаяся, то ли этот isrunning() когда-то что-то другое имел ввиду.
Опечатки нет.
если модуль не работает то выводит в сериал
но время при этом не выставить.
Если нет - строку 23 перемести в строку 16, скомпилируй и сразу загрузи. И посмотри результат.
Спасибо помогло.
То ли это просто опечатка, теперь широко расползшаяся, то ли этот isrunning() когда-то что-то другое имел ввиду.
Там, унутре isRunning, проверяется тикают ли часы:
Bit 7 of register 0 is the clock halt (CH) bit. When this bit is set to a 1, the oscillator is disabled. When cleared to a 0, the oscillator is enabled.
Если я правильно понимаю, что логика такая: если не тикают, то ставим время, которое будет всегда отдаваться по запросу, ибо:
А как поотдельности скоректировать минуты и часы?
А как поотдельности скоректировать минуты и часы?
Сначала прочитать время с RTC. потом скорректировать то, что нужно - и записать новое время обратно.
читать не обязательно
Пример можно?
читать не обязательно
интересно... Допустим, вам надо скорректировать время на час назад (перевод на летнее время) - откуда вы без чтения узнаете текущую дату, часы. минуты и секунды?