реклама на сайте
подробности

 
 
> Инициализация Таймер1 в режим Input Capture на Mega8, Инициализация Таймер1 в режим Input Capture на Mega8
DmSk
сообщение Jul 24 2009, 06:29
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 24-07-09
Из: Барнаул
Пользователь №: 51 518



Инициализация Таймер1 в режим Input Capture на Mega8
Как правильно сконфигурировать таймер 1 чтобы он работал в режиме захвата,
а при захвате счетчик сбрасывался в 0 и вызывалось прервание. Также при переполнении счетчика должно быть прерывание.

На данный момент в симуляторе инициировал следующим образом:
; Инициализация таймера
.equ DIVIDER=64 ;
ldi R16, (1<<ICNC1)|(1<<ICES1)|(0<<CS12)|(1<<CS11)|(1<<CS10)|(1<<WGM13)|(1<<WGM12)
out TCCR1B, R16

ldi R16, 0
out TCCR1A, R16

ldi R16, (1<<TICIE1)
out TIMSK, R16

sei
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Jul 24 2009, 08:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(DmSk @ Jul 24 2009, 09:29) *
Как правильно сконфигурировать таймер 1 чтобы он работал в режиме захвата, а при захвате счетчик сбрасывался в 0 и вызывалось прервание. Также при переполнении счетчика должно быть прерывание.
Ну, Вы и закрутили с режимом таймера... Поскольку Вы используете mode 12 (наверное для сброса в ноль счетчика при захвате), то счетчик будет считать до значения ICR1. Значение ICR1 нужно выставлять при инициализации (по сбросу там будет 0). Но, как только произайдет захват, то значение ICR1 изменится! Имхо, с таким режимом можно сойти с ума.
Не лучше ли поставить счетчик в mode 0, включить прерывание по Input Capture и по переполнению и вычислять интервалы по двум значениям (предыдущему и текущему) ICR1 и числу переполнений счетчика между ними? Я бы так и делал.
Go to the top of the page
 
+Quote Post
ivstech
сообщение Jul 24 2009, 08:39
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 204
Регистрация: 5-01-06
Пользователь №: 12 860



Цитата(Палыч @ Jul 24 2009, 14:08) *
Не лучше ли поставить счетчик в mode 0, включить прерывание по Input Capture и по переполнению и вычислять интервалы по двум значениям (предыдущему и текущему) ICR1 и числу переполнений счетчика между ними? Я бы так и делал.

Я хотел предложить включить режим 0 и записывать в перывании по захвату в счетчик TCNT1 значение 0, но посмотрел в документацию, получается, что прерывание срабатывает в момент переключения пина, а не счетчика, и в прескэйлере будет любое значение, и к моменту обнуления TCNT он уже может стать равным ICR+1, таким образом измерение будет менее точным, чем Вы предложили. Но тут надо аккуратно "разруливать" перехождение через 0, если практически одновременно произойдет прерывание по захвату и переполнению
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 12:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016