Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 13.02.2017, 18:36   #1
Руслан
Senior Member
 
Регистрация: 26.05.2015
Возраст: 40
Сообщений: 105
Вес репутации: 100/10
Руслан will become famous soon enoughРуслан will become famous soon enough
Smile решить задачу подсчёта времени работы устройства

Всем привет!
Подскажите, пожалуйста, как лучше решить задачу подсчёта времени работы устройства.
Подробнее: прибор работает по определённому алгоритму - в подробности не вдаюсь.
При входе алгоритма программы в определённую ветку - нужно считать время работы в этом режиме и это время (в часах)
затем записывать в EEPROM (это я умею). Думаю использовать TMR3 с подключением внешнего часового кварца. При переполнении флага
переполнения таймера пересчитывать время в минутах и записывать в переменную и раз в какой промежуток времени сохранять в EEPROM.
Тут можно использовать прерывания по таймеру (но я с ними реально не работал - тут вопрос- зашла прога в функцию обработки прерывания ,
а при выходе из этой функции куда программа дальше идёт - в точку рабочего алгоритма откуда вызвалась функция прерывания? а если там в алгоритме
таймеры работали?)
А можно прямо в программе анализировать значение флага переполнения и писать в переменную (алгоритм ходит по кругу - циклу).

И ещё есть проблема - если прибор выключили из сети 220В и если я не писал время в EEPROM последние 15 минут, например, то это время потеряется.

Может путанно пояснил...
Руслан вне форума   Ответить с цитированием
Старый 13.02.2017, 19:05   #2
Ученый
Senior Member
 
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 66
Сообщений: 565
Вес репутации: 1670/59
Ученый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant future
По умолчанию Re: Разбираемся с таймером timer раз и на всегда pic18

Цитата:
Сообщение от Руслан Посмотреть сообщение
Может путанно пояснил...
Это точно...
Цитата:
Думаю использовать TMR3 с подключением внешнего часового кварца.
Напрашивается настройка прерываний TMR3 на период 1 сек.
В прерывании:
- инкрементируем счетчик секунд, при достижении 60 обнуляем и
- инкрементируем счетчик минут, при достижении 60 обнуляем и
- инкрементируем счетчик часов;
Таким образом имеем часы, отсчитывающие время в часах, минутах и секундах.
При входе в нужную ветку запоминаем состояние часов, при выходе вычисляем время работы, извлекаем из EEPROM предыдущее значение, прибавляем текущее приращение и записываем обратно.
Цитата:
если я не писал время в EEPROM последние 15 минут, например, то это время потеряется.
Можно отслеживать момент выключения и записывать "вне очереди". для этого емкость на выходе источника должна быть достаточно велика, чтобы обеспечить нормальным питанием на время записи.
__________________
Не знать - не стыдно, стыдно не учиться.
Ученый вне форума   Ответить с цитированием
Старый 13.02.2017, 19:26   #3
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,318
Вес репутации: 2634/57
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Разбираемся с таймером timer раз и на всегда pic18

Руслан
читайте про прерывания.
куда программа дальше идёт - в адрес из стека вызовов. в pic18 его вершина доступна на чтение/запись.
besogon вне форума   Ответить с цитированием
Старый 13.02.2017, 20:53   #4
Руслан
Senior Member
 
Регистрация: 26.05.2015
Возраст: 40
Сообщений: 105
Вес репутации: 100/10
Руслан will become famous soon enoughРуслан will become famous soon enough
По умолчанию Re: Разбираемся с таймером timer раз и на всегда pic18

Цитата:
Сообщение от Ученый Посмотреть сообщение
извлекаем из EEPROM предыдущее значение, прибавляем текущее приращение и записываем обратно.
а память EEPROM ограничена на количество перезаписей? Если по одному и тому же адресу записать тысячи раз ... если это так, то в алгоритме записи надо постараться минимизировать количество перезаписей...

Цитата:
Сообщение от Ученый Посмотреть сообщение
Можно отслеживать момент выключения и записывать "вне очереди"
а как можно отслеживать момент выключения?
Руслан вне форума   Ответить с цитированием
Старый 13.02.2017, 21:59   #5
Ученый
Senior Member
 
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 66
Сообщений: 565
Вес репутации: 1670/59
Ученый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant future
По умолчанию Re: Разбираемся с таймером timer раз и на всегда pic18

Цитата:
Сообщение от Руслан Посмотреть сообщение
а память EEPROM ограничена на количество перезаписей? Если по одному и тому же адресу записать тысячи раз ... если это так, то в алгоритме записи надо постараться минимизировать количество перезаписей...
Количество перезаписей указано в DataSheet.
Цитата:
Сообщение от Руслан Посмотреть сообщение
а как можно отслеживать момент выключения?
Например так:
после выпрямителя перед электролитом ставится небольшая емкость и диод, ножкой ПИКа проверяем напряжение перед диодом - как пропало, значит сеть выключена.
__________________
Не знать - не стыдно, стыдно не учиться.
Ученый вне форума   Ответить с цитированием
Старый 13.02.2017, 22:45   #6
Руслан
Senior Member
 
Регистрация: 26.05.2015
Возраст: 40
Сообщений: 105
Вес репутации: 100/10
Руслан will become famous soon enoughРуслан will become famous soon enough
По умолчанию Re: Разбираемся с таймером timer раз и на всегда pic18

Цитата:
Сообщение от Ученый Посмотреть сообщение
Например так:
после выпрямителя перед электролитом ставится небольшая емкость и диод, ножкой ПИКа проверяем напряжение перед диодом - как пропало, значит сеть выключена.
есть только ньюансик - плата разведена да и свободных ног нет у пика в этой задаче
Руслан вне форума   Ответить с цитированием
Старый 14.02.2017, 09:18   #7
Ученый
Senior Member
 
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 66
Сообщений: 565
Вес репутации: 1670/59
Ученый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant future
По умолчанию Re: Разбираемся с таймером timer раз и на всегда pic18

Значит потери времени неизбежны и можно их только минимизировать, исходя из допустимого числа перезаписей. Если в EEPROM есть свободное место, можно менять адреса записи по мере использования ячеек.
__________________
Не знать - не стыдно, стыдно не учиться.
Ученый вне форума   Ответить с цитированием
Старый 16.02.2017, 12:11   #8
paul
Senior Member
 
Регистрация: 23.08.2007
Возраст: 41
Сообщений: 170
Вес репутации: 148/38
paul will become famous soon enoughpaul will become famous soon enough
По умолчанию Re: Разбираемся с таймером timer раз и на всегда pic18

Цитата:
Сообщение от Руслан Посмотреть сообщение
а память EEPROM ограничена на количество перезаписей? Если по одному и тому же адресу записать тысячи раз ... если это так, то в алгоритме записи надо постараться минимизировать количество перезаписей...
Цитата:
Сообщение от Руслан Посмотреть сообщение
есть только ньюансик - плата разведена да и свободных ног нет у пика в этой задаче
Тогда пишите в ЕЕPROM не в 1 ячейку, а, например в 64 (или вообще всю доступную память) по кольцу. При подаче питания нужно просто найти ячейку с максимальным значением (я понимаю, что время только увеличивается) и продолжать отсчет с нее. Таким образом увеличиваем количество возможных перезаписей в соответствующее число раз. То есть, можно писать в 64 ячейки каждую минуту и ресурс будет больше, чем писать в одну раз в час.
paul вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите решить задачу sneyk Вопросы начинающих 19 09.10.2009 15:51
обеспечение надежности работы устройства bereg_ok Общетехнические вопросы 11 25.03.2008 05:19
Есть вопросы по алгоритму работы устройства на пике. 40grad Продукция MICROCHIP 9 27.10.2007 15:55
Нужен чип коунтер времени работы, как на картриджах dynaco Общетехнические вопросы 7 17.09.2007 19:06


Часовой пояс GMT +3, время: 08:39.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot