Как рассчитывать время для будильников

Обсуждаем контроллеры компании Atmel.
Ответить
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Впервые задался целью сделать устройство, задача которого управлять нагрузками по будильнику, по заданному времени. Как рассчитывать время? В лоб просто. Сравниваем, принимаем нужное решение. Но, если питание отключали, потом включили, то по событию, будет ошибка, если заданное время не соответствует. К примеру, задано с 12.00 до 23.00 что то делать. В 11.хх сняли питание, в 13.15 подали, заданное время прошло. Сравнивать не с чем.
Пусть мы берём некую точку отсчёта, но, високосные годы и все такое.
Будут использоваться часы реального времени. DS3231. Просьба, по возможности расписать словами с примерами. Си.
Заранее благодарен.
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Сообщение AndTer »

Батарейка или ионистор спасёт отца русской демократии от сброса времени при потери питания. у 3231 есть спец ножка для этого. и в ней же есть ряд будильников. если надо не много то может хватить.
Глупый не задает вопросы. Глупый и так все знает.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Demiurg писал(а):К примеру, задано с 12.00 до 23.00 что то делать. В 11.хх сняли питание, в 13.15 подали, заданное время прошло. Сравнивать не с чем.
Почему не с чем? Сравнивать с диапазоном. Если сравниваемое значение входит в диапазон, выполняйте нужные действия.
Сравнение элементарное типа.

Код: Выделить всё

if (x>=12 && x<=23)
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

16.00-3.00 -?
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Сохраняйте состояние нагрузок при переключении в EEPROM. При сбросе МК по питанию, считывайте прошлое состояние и текущий интервал времени и принимайте решение о переключении нагрузок до нужных в заданный интервал времени.

Добавлено after 59 seconds:
[uquote="Demiurg",url="/forum/viewtopic.php?p=3888737#p3888737"]16.00-3.00 -?[/uquote]
В чем проблема? x >= 16 || x <= 3.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="NStorm",url="/forum/viewtopic.php?p=3888741#p3888741"]В чем проблема? x >= 16 || x <= 3.[/uquote]
Если интервал времени будет 16:00-17:00, то такое условие будет всегда истинным.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

В 3231 имеются главные часы.
Их данные используем как эталон.
Если выставлена 24 часовая шкала - особо проблем быть не должно - точка сработки в пределах суток достаточно однозначно определяется.
Проверка также - при подаче питания читаем данные из RTC и проверяем на границы совпадения (то же, что делает сама RTC в процессе работы, только средствами МК).
Если текущий интервал попал в "окно включения" (диапазон времени от "вкл" до "откл")- запускаем нагрузку, если вышел за пределы окна - ждем следующего совпадения в обычном режиме.
:roll:
Если исполнительных устройств много, и циклограмма завязана на определенный технологический процесс, где пропуск части устройств может повлиять на результат - придется или заново весь процесс перезапускать или делать какое-то подобие коррекции "ленты событий", сдвигая оную соответственно реальной точке текущего времени.
:roll:
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

ТС, вы же всех учите жизни... Переводите в относительное время, типа UNIX-time и сравнивайте.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

[uquote="OKF",url="/forum/viewtopic.php?p=3888806#p3888806"]ТС, вы же всех учите жизни....[/uquote]
Мне не стремно что-то спросить. Потому что очень редко это делаю. Не так ли?
Контактная информация:
Самсусамыч

Сообщение Самсусамыч »

[uquote="Reflector",url="/forum/viewtopic.php?p=3888768#p3888768"]Если интервал времени будет 16:00-17:00, то такое условие будет всегда истинным.[/uquote]
Нет. :) Так как 17:30 не меньше и не равно 17:00.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3888850#p3888850"]Нет. :) Так как 17:30 не меньше и не равно 17:00.[/uquote]
Зато 17:30 больше 16-ти.
Самсусамыч

Сообщение Самсусамыч »

Так логика выполнения основана на «И» а не «ИЛИ» :)
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3888865#p3888865"]Так логика выполнения основана на «И» а не «ИЛИ» :)[/uquote]
Верю, только какое это имеет отношение к примеру который комментировал я и где было ИЛИ?
Самсусамыч

Сообщение Самсусамыч »

В верхнем посте про ИЛИ – это я херню сморозил… :))) но правильность работы это не отменяет. :) вернее делается это так: если уставка включения меньше уставки выключения, то выполняется одно условие, а если наоборот, то другое. Вот и всё.
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

В принципе...
Две "ленты" условных Енотов...
Текущее время работы и "лента" циклограммы процесса...
Что-то таки тут Ёсть...
:roll:
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение 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();
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Секунды мне неинтересны. Для них другие расчеты. Судя по всему, мои размышления верны. Переводить от какой-то точки отсчета в секунды, или минуты, смотря какой шаг. И вести расчеты в секундах или минутах. Учет високосных годов вести исходя из данных от ЧРВ. Если я буду исходить от сырых данных от ЧРВ, я утону в условиях. Если в секундах или минутах, хотя бы есть точка отсчета...
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Сообщение AndTer »

Зачем учёт високосных годов, если нужна сработка по времени? Если ещё и по дням недели, то да, а если по времени то это лишнее.
Если всё же ещё и сработка в зависимости от дня недели, то для учёта високосных годов нужно будет устанавливать не только время но и дату, а если так то этот учёт проводится просто элементарно.
Суть сделать обычные часы и обычный будильник.
Тема не заслуживающая отдельной темы.
Глупый не задает вопросы. Глупый и так все знает.
Друг Кота
Аватара пользователя
Сообщения: 15593
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Достаточно в пределах недели оперировать - не ставится же циклично работающая автоматика в зависимость от месяца/года.
Максимум в пределах суток да, возможно, с учетом выходных.
8)
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение 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".

А вообще для работы со временем, вагон и маленькая тележка всякого уже давно придумана.
Ответить

Вернуться в «AVR»