Подскажите в каком виде хранится время в DS1302

o_key
Offline
Зарегистрирован: 06.04.2017

Добрый день!

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

сталкнулся с ситуацией когда после перезапуска почему то время в датчике сбилось и решил прикрутить на старт синхронизацию с NTP сервером в инете, начал разбираться и нашел что время с NTP приходит в виде количества секунд с 1900 года, теперь у меня возникает вопрос - зачем мне конвертировать эти секунды в дату и назад если я могу просто почитать кол-во секунд когда таймер завершится и хранить это значение в файле (так на много проще) при старте ардуина запросит это количество секунд у датчика времени (если конечно это возможно) и я определю включать реле или нет

собственно вопрос - есть ли какая то библиотека или команда которая устанавливает в таком формате время (в виде количества секунд с 1900 года) в датчике и соответственно читает в этом же фармате время?

я использую библиотеку #include <DS1302.h> и там такого не нашел

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не понял о каком датчике Вы говорите, но время в 1302 хранится не в юниксовском формате. Как именно оно хранится написано в таблице 3 (стр. 9) даташита.

А в чём проблема-то? Пересчитать секунды с 1900 в нормальные год/месяц/день/час/минуты/секунды - дело одной строки кода (вызодва одной функции. Или нарборот, пересчитать то, что выдали часы в секунды с 1900 - тоже одна строка. Пересчитайте да и делов.

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

вам все равно придется конвертировать время либо в одну, либо в другую сторону. В стандартной библиотеке Time есть примеры конверсии из NNTP формата в реальное время и наоборот.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

В стандартной библиотеке Time есть примеры конверсии из NNTP формата в реальное время и наоборот.

Только надо учитывать, что в местной (AVR-LibC'шной) time.h за точку отсчёта принята не 1970, а 2000. Правда у них есть константа для пересчёта. Вот здесь подробнее.

o_key
Offline
Зарегистрирован: 06.04.2017

я просто нашел такую заметку по DS3231 и предположил что все таки хранится информация в секундах

How do I convince a DS3231 to output seconds since 1/1/2000? I can’t find anything in the DS3231 data sheet describing such a function.

  • Profile photo of Shannon Hicks

    Shannon Hicks


    2015-03-11, 11:48 PM

    If you’re using the DS3231 library, you can use the following code:

    DateTime now = RTC.now(); //get the current date-time

    currentepochtime = (now.get()); //seconds since 1/1/2000

    Look at the “now” example that comes with the DS3231 library to see the whole sketch.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы уж определитесь, что у Вас DS1302 или DS 3231.

В любом случае преобразование - одна строчка. Будь она в библиотеке или стандартная из time.h. Пример последней приведён по ссылке. что я давал - там ровно одна строка.