Страница 1 из 2
Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 09:53:52
Demiurg
Впервые задался целью сделать устройство, задача которого управлять нагрузками по будильнику, по заданному времени. Как рассчитывать время? В лоб просто. Сравниваем, принимаем нужное решение. Но, если питание отключали, потом включили, то по событию, будет ошибка, если заданное время не соответствует. К примеру, задано с 12.00 до 23.00 что то делать. В 11.хх сняли питание, в 13.15 подали, заданное время прошло. Сравнивать не с чем.
Пусть мы берём некую точку отсчёта, но, високосные годы и все такое.
Будут использоваться часы реального времени. DS3231. Просьба, по возможности расписать словами с примерами. Си.
Заранее благодарен.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 09:58:10
AndTer
Батарейка или ионистор спасёт отца русской демократии от сброса времени при потери питания. у 3231 есть спец ножка для этого. и в ней же есть ряд будильников. если надо не много то может хватить.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 10:01:35
Мурик
Demiurg писал(а):К примеру, задано с 12.00 до 23.00 что то делать. В 11.хх сняли питание, в 13.15 подали, заданное время прошло. Сравнивать не с чем.
Почему не с чем? Сравнивать с диапазоном. Если сравниваемое значение входит в диапазон, выполняйте нужные действия.
Сравнение элементарное типа.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 11:27:00
Demiurg
16.00-3.00 -?
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 11:45:21
NStorm
Сохраняйте состояние нагрузок при переключении в EEPROM. При сбросе МК по питанию, считывайте прошлое состояние и текущий интервал времени и принимайте решение о переключении нагрузок до нужных в заданный интервал времени.
Добавлено after 59 seconds:
[uquote="Demiurg",url="/forum/viewtopic.php?p=3888737#p3888737"]16.00-3.00 -?[/uquote]
В чем проблема? x >= 16 || x <= 3.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 12:50:55
Reflector
[uquote="NStorm",url="/forum/viewtopic.php?p=3888741#p3888741"]В чем проблема? x >= 16 || x <= 3.[/uquote]
Если интервал времени будет 16:00-17:00, то такое условие будет всегда истинным.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 13:19:32
BOB51
В 3231 имеются главные часы.
Их данные используем как эталон.
Если выставлена 24 часовая шкала - особо проблем быть не должно - точка сработки в пределах суток достаточно однозначно определяется.
Проверка также - при подаче питания читаем данные из RTC и проверяем на границы совпадения (то же, что делает сама RTC в процессе работы, только средствами МК).
Если текущий интервал попал в "окно включения" (диапазон времени от "вкл" до "откл")- запускаем нагрузку, если вышел за пределы окна - ждем следующего совпадения в обычном режиме.

Если исполнительных устройств много, и циклограмма завязана на определенный технологический процесс, где пропуск части устройств может повлиять на результат - придется или заново весь процесс перезапускать или делать какое-то подобие коррекции "ленты событий", сдвигая оную соответственно реальной точке текущего времени.

Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 13:54:01
OKF
ТС, вы же всех учите жизни... Переводите в относительное время, типа UNIX-time и сравнивайте.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 14:43:20
Demiurg
[uquote="OKF",url="/forum/viewtopic.php?p=3888806#p3888806"]ТС, вы же всех учите жизни....[/uquote]
Мне не стремно что-то спросить. Потому что очень редко это делаю. Не так ли?
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 15:22:38
Самсусамыч
[uquote="Reflector",url="/forum/viewtopic.php?p=3888768#p3888768"]Если интервал времени будет 16:00-17:00, то такое условие будет всегда истинным.[/uquote]
Нет.

Так как 17:30 не меньше и не равно 17:00.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 15:44:22
Reflector
[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3888850#p3888850"]Нет.

Так как 17:30 не меньше и не равно 17:00.[/uquote]
Зато 17:30 больше 16-ти.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 15:50:45
Самсусамыч
Так логика выполнения основана на «И» а не «ИЛИ»

Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 15:55:37
Reflector
[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3888865#p3888865"]Так логика выполнения основана на «И» а не «ИЛИ»

[/uquote]
Верю, только какое это имеет отношение к примеру который комментировал я и где было ИЛИ?
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 16:09:30
Самсусамыч
В верхнем посте про ИЛИ – это я херню сморозил…

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

вернее делается это так: если уставка включения меньше уставки выключения, то выполняется одно условие, а если наоборот, то другое. Вот и всё.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 17:05:34
BOB51
В принципе...
Две "ленты" условных Енотов...
Текущее время работы и "лента" циклограммы процесса...
Что-то таки тут Ёсть...

Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 18:19:52
OKF
[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3888879#p3888879"]вернее делается это так: если уставка включения меньше уставки выключения, то выполняется одно условие, а если наоборот, то другое. Вот и всё.[/uquote]
Для СУТОЧНОГО таймера всё верно. На СИ:)
Код: Выделить всё
if (begin >= end && (time >= begin || time <= end))
on();
else if (begin < end && time >= begin && time <= end)
on();
else
off();
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 18:35:05
Demiurg
Секунды мне неинтересны. Для них другие расчеты. Судя по всему, мои размышления верны. Переводить от какой-то точки отсчета в секунды, или минуты, смотря какой шаг. И вести расчеты в секундах или минутах. Учет високосных годов вести исходя из данных от ЧРВ. Если я буду исходить от сырых данных от ЧРВ, я утону в условиях. Если в секундах или минутах, хотя бы есть точка отсчета...
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 20:29:13
AndTer
Зачем учёт високосных годов, если нужна сработка по времени? Если ещё и по дням недели, то да, а если по времени то это лишнее.
Если всё же ещё и сработка в зависимости от дня недели, то для учёта високосных годов нужно будет устанавливать не только время но и дату, а если так то этот учёт проводится просто элементарно.
Суть сделать обычные часы и обычный будильник.
Тема не заслуживающая отдельной темы.
Re: Как рассчитывать время для будильников
Добавлено: Вс сен 06, 2020 22:55:59
BOB51
Достаточно в пределах недели оперировать - не ставится же циклично работающая автоматика в зависимость от месяца/года.
Максимум в пределах суток да, возможно, с учетом выходных.

Re: Как рассчитывать время для будильников
Добавлено: Пн сен 07, 2020 07:35:32
NStorm
[uquote="Reflector",url="/forum/viewtopic.php?p=3888768#p3888768"][uquote="NStorm",url="/forum/viewtopic.php?p=3888741#p3888741"]В чем проблема? x >= 16 || x <= 3.[/uquote]
Если интервал времени будет 16:00-17:00, то такое условие будет всегда истинным.[/uquote]
А я привел пример для конкретно "перехода через 0".
А вообще для работы со временем, вагон и маленькая тележка всякого уже давно придумана.