ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
426468 Топик полностью
Юрий_СВ (22.07.2013 17:11, просмотров: 225) ответил zeleny на не совсем понятна логика вашего прерывания. Вот мой вариант (под Ардуино-Мега8), пока никаких заскоков не замечено:
Логика перывания такая : Т.к. захваты происходят редко (реже, чем раз за период) - обрабатываю захват по флагу захвата в прерывании по переполнению таймера. Главная проблема - понять к какому периоду таймера (значению tacho.cnt_high) относится захваченное значение. Дальше немного запутаней... Ещё надо учитывать непостоянство времени входа в прерывание. Если есть захват при 1-й проверке, то смотрю на текущее состояние таймера (icap->tcnt_1). Если захват из нового периода - он должен быть меньше значения таймера. Иначе он из старого периода (tacho.cnt_high-1). Но если вход в текущее прерывание затянется, а вход в предыдущее произошёл быстрее, то можно перепутать и принять захват из прошлого периода (произошедший сразу после 1-й проверки) за захват в новом периоде. Для этого есть 2-я проверка захвата. Ранний захват прошлого периода будет обслужен 2-й проверкой. А значит захват после 2-й проверки предыдущего периода будет иметь гарантировано большее значение, чем захват до 1-й проверки нового периода.