ds1307

AleksandrM
Offline
Зарегистрирован: 20.07.2017

Взял пример из библиотеки. По идее он должен записать системное время .Но получаеться что время записанное в 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);

}


 

kalapanga
Offline
Зарегистрирован: 23.10.2016

А что, строка "RTC is NOT running!" выводится?

AleksandrM
Offline
Зарегистрирован: 20.07.2017

нет

b707
Offline
Зарегистрирован: 26.05.2017

AleksandrM пишет:

Взял пример из библиотеки. По идее он должен записать системное время .Но получаеться что время записанное в ds1307 на 16 минут меньше системного. В чем может быть проблема?

В том, что в строке 23 RTC инициализирует не текущим временем, а временем последней компиляции скетча.  Видимо ты 16 минут тупил между компиляцией и загрузкой - и вот результат :)

AleksandrM
Offline
Зарегистрирован: 20.07.2017

нет  прошивка сразу после компиляции и не один раз пробовал....

b707
Offline
Зарегистрирован: 26.05.2017

Тогда проверь время на том компе, на котором писал скетч - может оно на 16 минут отстает?

Если нет - строку 23 перемести в строку 16, скомпилируй и сразу загрузи. И посмотри результат.

see_watson
Offline
Зарегистрирован: 03.11.2016

У  меня вообще время выставлятся не хотело

if (! RTC.isrunning()) {

Serial.println("RTC is NOT running!");

// строка ниже используется для настройки даты и времени часов

RTC.adjust(DateTime(__DATE__, __TIME__));

}

переместил строчку в

void setup

после

rtc.begin();

 

sadman41
Offline
Зарегистрирован: 19.10.2016

А мне кажется, что зря вы пытаетесь делать RTC.adjust() внутри условия  if (! RTC.isrunning())

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

sadman41 пишет:

А мне кажется, что зря вы пытаетесь делать RTC.adjust() внутри условия  if (! RTC.isrunning())

Очевидно, раз у него строка выше ничего в сериал не выводит. Я уже одному товарищу на аналогичный косяк указывал. Но они это не сами придумывают, это реально пример из библиотеки, которая среди первых поиском находится. То ли это просто опечатка, теперь широко расползшаяся, то ли этот isrunning() когда-то что-то другое имел ввиду.

see_watson
Offline
Зарегистрирован: 03.11.2016

Опечатки нет.

if (! rtc.isrunning()) {
    Serial.print("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    //rtc.adjust(DateTime(2017, 5, 1, 25, 41, 0));
  } 

если модуль не работает то выводит в сериал

"RTC is NOT running!"

но время при этом не выставить.

 

AleksandrM
Offline
Зарегистрирован: 20.07.2017

b707 пишет:

Если нет - строку 23 перемести в строку 16, скомпилируй и сразу загрузи. И посмотри результат.

Спасибо помогло.

sadman41
Offline
Зарегистрирован: 19.10.2016

kalapanga пишет:

То ли это просто опечатка, теперь широко расползшаяся, то ли этот 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.

Если я правильно понимаю, что логика такая: если не тикают, то ставим время, которое будет всегда отдаваться по запросу, ибо:

Please note that the initial power-on state of all registers is not defined.
 
Хотя, с другой стороны:
 
Therefore, it is important to enable the oscillator (CH bit = 0) during initial configuration.
 
А вот установки этого бита я в библиотеке не вижу. Как часы стартуют с этой либой - никак не пойму.
AleksandrM
Offline
Зарегистрирован: 20.07.2017

А как поотдельности скоректировать минуты и часы?

b707
Offline
Зарегистрирован: 26.05.2017

AleksandrM пишет:

А как поотдельности скоректировать минуты и часы?

Сначала прочитать время с RTC. потом скорректировать то, что нужно - и записать новое время обратно.

com
Offline
Зарегистрирован: 06.09.2013
 

читать не обязательно

AleksandrM
Offline
Зарегистрирован: 20.07.2017

Пример можно?

b707
Offline
Зарегистрирован: 26.05.2017

com пишет:

 

читать не обязательно

интересно... Допустим, вам надо скорректировать время на час назад (перевод на летнее время) -  откуда вы без чтения узнаете текущую дату, часы. минуты и секунды?