Подскажите в каком виде хранится время в DS1302
- Войдите на сайт для отправки комментариев
Добрый день!
хочу сделать таймер на ардуине, но привязаный к реальному времени на случай если произошла какая нибудь перезагрузка то при включении ардуина проверяет в файле закончился ли таймер, если нет то опять включает релешку.
сталкнулся с ситуацией когда после перезапуска почему то время в датчике сбилось и решил прикрутить на старт синхронизацию с NTP сервером в инете, начал разбираться и нашел что время с NTP приходит в виде количества секунд с 1900 года, теперь у меня возникает вопрос - зачем мне конвертировать эти секунды в дату и назад если я могу просто почитать кол-во секунд когда таймер завершится и хранить это значение в файле (так на много проще) при старте ардуина запросит это количество секунд у датчика времени (если конечно это возможно) и я определю включать реле или нет
собственно вопрос - есть ли какая то библиотека или команда которая устанавливает в таком формате время (в виде количества секунд с 1900 года) в датчике и соответственно читает в этом же фармате время?
я использую библиотеку #include <DS1302.h> и там такого не нашел
Не понял о каком датчике Вы говорите, но время в 1302 хранится не в юниксовском формате. Как именно оно хранится написано в таблице 3 (стр. 9) даташита.
А в чём проблема-то? Пересчитать секунды с 1900 в нормальные год/месяц/день/час/минуты/секунды - дело одной строки кода (вызодва одной функции. Или нарборот, пересчитать то, что выдали часы в секунды с 1900 - тоже одна строка. Пересчитайте да и делов.
вам все равно придется конвертировать время либо в одну, либо в другую сторону. В стандартной библиотеке Time есть примеры конверсии из NNTP формата в реальное время и наоборот.
В стандартной библиотеке Time есть примеры конверсии из NNTP формата в реальное время и наоборот.
Только надо учитывать, что в местной (AVR-LibC'шной) time.h за точку отсчёта принята не 1970, а 2000. Правда у них есть константа для пересчёта. Вот здесь подробнее.
я просто нашел такую заметку по 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.
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.
Вы уж определитесь, что у Вас DS1302 или DS 3231.
В любом случае преобразование - одна строчка. Будь она в библиотеке или стандартная из time.h. Пример последней приведён по ссылке. что я давал - там ровно одна строка.