AlphA » 23 окт 2005, 10:49
Если измерить длину импульса, то это как раз режим таймера, а не счётчика.
T0 и T1 - это счётные входы т/с. Работают как такие же входы у обычных счётчиков, типа ИЕхх. Надо только установить соответствующий режим работы. Но в данной задаче они скорее всего не понадобятся.
А длину импульса меряем так:
* Т/с - в режиме таймера с тактированием от основогоно ТГ (предделитель - по вкусу);
* Измеряемый сигнал на вход Exernal Int;
* По приходу этого самого ExtInt смотрим чё в TCNTx - это и будет длина импульса (точнее - периода между приходами прерываний). Сбрасываем TCNTx - начиаем новый отсчёт;
* Ждём слудующего ExtInt...
Первый период скорее всего будет подсчитан не корректно. Все следующие - правильно.
Именно так я мерял периоды оборота колеса в велокомпьюере.
Теперь модификация для данной задачи. Сброс TCNTx делаем по переднему фронту прерывания, а по спаду - берём значение из него (TCNTx).
Такое можно сделать двумя путями:
1) установить режим срабатывания ExtInt на передний фронт, а по приходу его сразу переставить на срабатывание по спаду; а по приходу спада - обратно на передний фронт.
2) установить ExtInt на срабатывание по обеим фронтам (any logical change) и различать их программно (нога INTx должна читаться как PinX даже в режиме внешнего прерывания).