как найти разницу дат и времени для Ардуино?
- Войдите на сайт для отправки комментариев
Есть таймер DS1307 + Ардуино = Прибор
Прибор включается подачей питания (на секунду) с кнопочки и выключается при ее отжимании.
Таймер злостно врет, следовательно при включении прибора надо вычислить погрешность, и при чтении времени из таймера добавлять ее к результату.
Вот какое решение пришло мне:
Первая инициализация прибора:
1)получить время (T.old) из ПК и записать его в таймер DS1307
2) записать T.old в энергонезависимую память таймера
Штатное включение прибора (как правило на 1 сек):
Инициализация прибора:
3)при включении прибора считать сохраненное время T.old из енергонезависимых регистров таймера и считать текущее время T.suc из таймера.
4) найти разницу Dt (например в минутах, или часах) Dt= T.suc - T.old
5) пропорционально разности времени, вычислить поправку K , которую вводить при каждом считывании текущего времени из таймера.
Поправка сначала расчитывается экспериментальным путем, т.е синхронизируется время таймера с ПК, а через сутки смотрим насколько убежал таймер. Соответственно можно понять на сколько таймер убегает например за минуту или час. С этим проблем нету.
Вопрос стал, как расчитать разницу дат D.t, в минутах? Готовых библиотек нету, а когда попытаться продумать алгоритм расчета D.t - начал кипеть мозг.
Может есть другие решения?
Не догоняю, батарейка то на RTC есть хоть?
поставить на приборе время и дождаться его же через сутки/двое / неделю месяц/ чем больше тем точнее, определив реальное время
Treal/Tприбора(в секундах)= коэфициент вранья
T.old записать один раз на период старта прибора с правильными временными показателями часов ( аля epoch)
далее любое время выдаваемое часами перевести в секунды с момента t Old * умножать на коофициент вранья и переводить в реальное время.
ps не встречал сильно врущих ds1307.
ps не встречал сильно врущих ds1307.
А мне "повезло", есть у меня одна платка, на которой ds1307 врет на 1 час в день (!). Замена резонатора ни к чему не приводит (пробовал 3 разных). Так что всякое бывает :(
P.S. питание правильное, батарейка резервная свежая, но вот врут жутко. Хорошо, что на платке еще LAN есть - буду синхронизацию времени по NTP делать (раз в 10 минут, наверное).
Переведите время в секунды(от начала месяца): ((день*24 + часы)* 60 + минуты)*60 + секунды, если две временные точки в одном месяце, то эта формула даст разность между этими точками в секундах.
То, что таймер сильно врёт - подозрительно, ошибок точно нигде нет?
Используя прерывания можно на самой arduino неплохие часы сделать.