Страница 1 из 1

программирование микроконтроллеров AVR

Добавлено: Вс май 17, 2009 13:12:37
balagurov07
я запустил внешнее прерывание по восходящему фронту сигнала, теперь как мне узнать время между 2 внешними прерываниями ввиде переменной, желательно чтобы все это было в командах cvavr, все это для чайника.

Добавлено: Вс май 17, 2009 13:37:45
sachok
При одном прерывании запускаем таймер при следующем останавливаем. Можно играться с счетными регистрами, а можно просто завести переменную и допустим таймер настроить что бы было прерывание по переполнению и в обработчике прерываний инкрементировать эту переменную.

Re: программирование микроконтроллеров AVR

Добавлено: Пн май 18, 2009 00:04:00
smac
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 должна быть беззнаковой.

Добавлено: Вт май 19, 2009 21:28:07
Aheir
Это скорее в "Мелкие вопросы" + поиск по форуму.