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

Обсуждаем контроллеры компании Atmel.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

имхо, второй вариант проще.

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

[uquote="ARV",url="/forum/viewtopic.php?p=3889165#p3889165"]...[/uquote]
Хм, по всем пунктам наши рассуждения сходятся. Хотел на примеры посмотреть...
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Demiurg писал(а):Хотел на примеры посмотреть
чего на них смотреть? последний вариант я делал так: заводил переменную "время сравнения", которую по прерыванию от RTC инкрементировал (каждую секунду). когда питание потерялось, МК засыпал. когда появлялось - просыпался и начинал в главном цикле, как и ранее, сравнивать "время сравнения" со списком интервалов будильников. в конце проверок списка проверял, равно ли "вермя сравнения" текущим показаниям RTC? если равно - включал выходные сигналы, если не равно - инкрементировал переменную и повторял цикл.

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

Мой уютный бложик... заходите!
Контактная информация:
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

[uquote="ARV",url="/forum/viewtopic.php?p=3889195#p3889195"]...[/uquote]
Точка отсчета? С чего счет начинался?
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Demiurg писал(а):С чего счет начинался?
с момента установки времени RTC - в этот момент переменная "время сравнения" получает начальное значение, совпадающее с RTC
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Если не затруднит, все же хотел бы посмотреть ваш пример.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15598
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

В принципе всегда можно аппаратными средствами отследить пропажу сетевого напряжения ДО момента полного отключения питающего напряжения да затем сделать необходимые записи.
Никто еще дополнительный аккумулятор для питания ядра устройства не отменял.
Там и секунды достаточно будет.
А затем можно и в "абсолютный сон" впасть, отключив резервное питание.
8)
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Аккумулятор геморно. Я на ионисторе делал. Пропало напряжение питания, сбросили в EEPROM данные и ушли в бесконечный цикл.
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="ARV",url="/forum/viewtopic.php?p=3889165#p3889165"]я так понимаю, проблема именно в том, что если считать время в течение суток, то проверить интервал, начатый в одних сутках, а завершенный в других, простым сравнением на попадание внутрь "границ", не получится...[/uquote]
Ну, блин, да что ж вы из простого делаете сложное! Я ж пример приводил. Ещё раз, нагляднее:

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

if ( (begin > end && (rtc >= begin || rtc <= end)) ||
     (begin < end &&  rtc >= begin && rtc <= end ) )
  on();
else
  off();
Ответить

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