AVR Mega8. Проблема с Input Capture TCNT1 при смене полярности импульса (edge select)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
ДМ 19 мая 2004 г. 22:05
|
|
|
|
От нижепреведенного кода ожидалось повторение на PORTB.PB2 сигнала на ICP.
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
if ( TCCR1B & ( 1<< ICES1 ) )
{
PORTB.PB2 = 1;
TCCR1B &= ~( 1<< ICES1 );
}
else
{
PORTB.PB2 = 0;
TCCR1B |= ( 1<< ICES1 );
}
}
Однако, на выходе только «иголки», период следования которых равен периоду меандра ICP.
Такое впечатление, что сразу после выхода из прерывания пограмма опять попадает в него, где выключает выходной сигнал и соответственно меняет полярность сигнала. Шумоподавитель включен. Чистка влага ICF1 не помогала.
Может быть, кто сталкивался с такой проблемой, или есть идеи?
Спасибо!
Составить ответ
|||
Конференция
|||
Архив
Ответы
- А исчо посмотреть, где в программе производится запись в TIFR для сброса флага. Старые грабли: пытаешься по инерции написать TIFR |= (1<<TOV0), и сбрасываешь не один, а ВСЕ установленные флаги прерываний. Надо писать TIFR = (1<<TOV0)! Хотя это приводит, наоборот, к потере прерываний, но не к возникновению оных. — гость (20.05.2004 16:51, пустое)
- Возможно при переключении активного фронта что-то происходит. Там ведь еще задержка реакции есть , кстати порт на вход включен? — BlackJack (20.05.2004 08:46, пустое)
- для начала проверить попадает-таки или нет. — Andy-spb (19.05.2004 23:08, пустое)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru