Змінюй хід війни! Допомагай ЗСУ!

как найти разницу дат и времени для Ардуино?

  • Автор теми Автор теми RM
  • Дата створення Дата створення

RM

Статус: Офлайн
Реєстрація: 07.05.2009
Повідом.: 455
Оголошень: 1
как найти разницу дат и времени для Ардуино?

Есть таймер 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 - начал кипеть мозг.
Может есть другие решения?
 
Переводим каждую дату в минуты относительно заранее выбранной точки отсчёта. Алгоритм не сильно сложный. Затем их вычитаем.
 
где бы взять готовую функцию? Может кто-то писал? Там же надо учесть сколько в каждом месяце дней, высокостность года, переход через НГ... Хотя конечно сложного ничего нету
 
не надо там этого ничего, вверху предельно понятно написано что сделать
 
что-то совсем не понимаю что вы имеете в виду. Что такое "заранее выбранная точка отсчёта". Или если лень обьяснять подскажите литературу или ссылку.
Можно на простом примере обьяснить?
 
что-то совсем не понимаю что вы имеете в виду. Что такое "заранее выбранная точка отсчёта". Или если лень обьяснять подскажите литературу или ссылку.
Можно на простом примере обьяснить?

например, есть стандартные функции, которые по дате, часам, минутам и секундам вычисляют количество прошедших секунд с 00:00:00 01.01.1970г. Ты можешь выбрать свою нулевую точку.
 
ну насчет нудевой точки уже понятно, где взять эти функции? У мен нету таких библиотек с такими функциями
 
ну насчет нудевой точки уже понятно, где взять эти функции? У мен нету таких библиотек с такими функциями
Вот горечко.
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
огромное спасибо!
 
В каких еденицах таймер отмеряет время? С компа вы можете получитт время в секундах от рождества юникса либо же в мили или микро или даже нано секундах от последней перезагрузки.
В чем проблема хранить скажем секунды и потом разделив на 60 получать минуты?
Или ваш таймер хранит и выдает дату в формате день меся год часы минуты секунды?
 
Может есть другие решения?

надо вылизать работу DS1307 ИМХО, иначе его наличие в схеме не совсем понятно. требования к счету времени не предъявлены - что значит злостно врет ? для меня, например, 1 mks - это злостно...
 
надо вылизать работу DS1307 ИМХО, иначе его наличие в схеме не совсем понятно. требования к счету времени не предъявлены - что значит злостно врет ? для меня, например, 1 mks - это злостно...

ну злостно - это минута в сутки. Вылизать - это хорошая идея, куплю кварц с материнки. Но у меня есть еще DS3232?, где кварц встроенный, и они врут приблизительно на 1 сек в сутки - как по мне, тоже много.


В каких еденицах таймер отмеряет время? С компа вы можете получитт время в секундах от рождества юникса либо же в мили или микро или даже нано секундах от последней перезагрузки.
В чем проблема хранить скажем секунды и потом разделив на 60 получать минуты?
Или ваш таймер хранит и выдает дату в формате день меся год часы минуты секунды?
Таймер выдает дату в формате день меся год часы минуты секунды. Но каждые сутки на 1 секнду идет отставание. Посему когда контроллер просыпается и спрашивает у таймера время, то надо сделать корректировочку относительно последней синхронизации с компьютером.
С компа я могу получить время синхронизированное с папой римским с точностью до секунды, и впринципи мне достаточно точности этого времени.
 
Останнє редагування:
Таймер выдает дату в формате день меся год часы минуты секунды. Но каждые сутки на 1 секнду идет отставание. Посему когда контроллер просыпается и спрашивает у таймера время, то надо сделать корректировочку относительно последней синхронизации с компьютером.
С компа я могу получить время синхронизированное с папой римским с точностью до секунды, и впринципи мне достаточно точности этого времени.

Скажу сразу, я не спец в этой железяки. Однако же как минимум странен факт ворзвращения даты в таком формате. Вы уверены что нет способа получить напрямую число "тиков"?
 
ну злостно - это минута в сутки. Вылизать - это хорошая идея, куплю кварц с материнки. Но у меня есть еще DS3232?, где кварц встроенный, и они врут приблизительно на 1 сек в сутки - как по мне, тоже много.



Таймер выдает дату в формате день меся год часы минуты секунды. Но каждые сутки на 1 секнду идет отставание. Посему когда контроллер просыпается и спрашивает у таймера время, то надо сделать корректировочку относительно последней синхронизации с компьютером.
С компа я могу получить время синхронизированное с папой римским с точностью до секунды, и впринципи мне достаточно точности этого времени.

Не думаю, что кварц от материнки чем-то поможет - хотя сам никогда часовые кварцы не выбирал (вполне устраивал ширпотреб).
Если существует постоянная возможность синхронизации с ПК - зачем часы ? Напишите часы на таймере контроллера. Проснулись -> синхронизировались -> считаете.
кварц надо выбирать исходя из точности, которую хотите получить + учитывать дрейфы всякие.


Скажу сразу, я не спец в этой железяки. Однако же как минимум странен факт ворзвращения даты в таком формате. Вы уверены что нет способа получить напрямую число "тиков"?

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

ЗЫ тему надо в радио - там мигом растолкуют :)
 

Вкладення

  • DS1307.pdf
    DS1307.pdf
    276.4 КБ · Перегляди: 243
каким образом можнопосчитать число тиков? Там есть выход с частотой 32 кгц, т.е формально можно сичтать эти тики, но мне не нужна такая точность. Да и это никак не повлияет на точность хода часов. С компьютером прибор будет стнхронизироваться раз в неделю, т.е под конец недели будет большая погрешность,если не вводить коррекцию. Вобщем уже все что хотел уже узнал, алгоритм расчета времени между датами адаптировал под себя, осталось проверить на практике
Всем спасибо!
 
Неправильный таймер какой-то :)
Зачем столько сложностей с подсчетом даты, а главного нет... Экономия памяти?
 
Неправильный таймер какой-то :)
Зачем столько сложностей с подсчетом даты, а главного нет... Экономия памяти?

это ТС назвал часы реального времени таймером. от того и тиков нет, по крайней мере у этих часов.
 
это ТС назвал часы реального времени таймером. от того и тиков нет, по крайней мере у этих часов.

Та ну все равно отмеряет же он время в чем то. Странно что у этого чего нету отдельного регистра.
 
Та ну все равно отмеряет же он время в чем то. Странно что у этого чего нету отдельного регистра.

он считает время в сек. регистр сек есть, просто диапазон его значений 0 -59, после 59 переполнение - сбрасывается в 0 + инкрементируются минуты.
 
Назад
Зверху Знизу