программирование микроконтроллеров AVR
- Сообщения: 3
- Зарегистрирован: Вс май 17, 2009 12:51:42
я запустил внешнее прерывание по восходящему фронту сигнала, теперь как мне узнать время между 2 внешними прерываниями ввиде переменной, желательно чтобы все это было в командах cvavr, все это для чайника.
Последний раз редактировалось balagurov07 Вс май 17, 2009 14:33:47, всего редактировалось 1 раз.
- Реклама
При одном прерывании запускаем таймер при следующем останавливаем. Можно играться с счетными регистрами, а можно просто завести переменную и допустим таймер настроить что бы было прерывание по переполнению и в обработчике прерываний инкрементировать эту переменную.
Я не Сашок!!!
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Во-первых нужно как можно скорее переставать быть чайникомbalagurov07 писал(а):я запустил внешнее прерывание по восходящему фронту сигнала, теперь как мне узнать время между 2 внешними прерываниями ввиде переменной, желательно чтобы все это было в командах cvavr, все это для чайника.
Для этого нужно в даташит посмотреть и прочитать про модуль захвата (Input Capture Unit) - это модуль, который по сигналу со специальной ноги заносит в регистр захвата текущее значение таймера. Программная реализация проста:
1 Настраиваем ногу захвата на захват по фронту
2 Организовываем в прерываниях по переполнению таймера счетчик нужной разрядности T
3 В прерываниях по захвату организуем сохранение переменных t1 и t2 (можно и больше), о которых ниже.
4 Разрешаем прерывания
5 При первом захвате сохраняем вот такое заначение в переменную t1 = T<<n + ICR, где T - значение программного счетчика, огранизованного в прерывании по переполнению таймера, n - разрядность таймера, ICR- содержание регистра захвата.
6 При втором захвате сохраняем вот такое заначение в переменную t2 = T<<n + ICR, где T - значение программного счетчика, огранизованного в прерывании по переполнению таймера, n - разрядность таймера, ICR- содержание регистра захвата.
7 А время между захватами - т. е. время между двумая прерываниями в вашей задаче - это разность t2-t1.
Замечание: если частота появления прерываний достаточно высока (менше частоты переполнения таймера), то переменную T можно не организовывать, в этом случае разность t2-t1 должна быть беззнаковой.
Это скорее в "Мелкие вопросы" + поиск по форуму.
Оптимизм х (Опыт + Знания) = const

