Исходная схема следующая: Имеем аналоговый компаратор atmega8. К входу AIN0 подключаем внутренний ИОН, к входу AIN1 внешний сигнал. Задача - когда на AIN1 напряжение станет выше выполнить захват значения таймера 1 и вызвать прерывание ANA_COMP. Так как AIN1 это инверсный вход, то это должно происходить по заднему фронту выхода компаратора. Настройка компаратора особых вопросов не вызвала. В регистр ACSR пишем следующее ACD - 0 (включаем компаратор) ACBG - 1 (подключаем ИОН) ACIE - 1 (разрешаем прерывание) ACIS1 - 1, ACIS0 - 0 (прерывание по заднему фронту) ACIC - 1 (подключаем схему захвата таймера 1) И в этом месте возникает вопрос - на что будет реагировать схема захвата? Передний фронт, задний фронт или любое изменение? Где это настраивается? Что-то похожее есть в описании бита ICES1 из регистра TCCR1B, но как я понял этот бит управляет входом ICP1. Подскажите кто в курсе.
В даташите написано: Источник генерации события захвата определяется битом ACIC в регистре ACSR. Обязательно выполнить это условие: Ещё в даташите написано следующее: Т.е. пока входишь в процедуру обработки прерывания (это 4 такта + выполнение одной инструкции кода перед этим), значение в буфере захвата может поменяться. Написано кривовато (как и все даташиты от Atmel))), т.к. не ясно как оно может смениться, если факт наступления события захвата таймеру передаётся через прерывание.
То, что для подключения выхода компаратора к схеме захвата таймера 1 нужно установить бит ACIC в регистре ACSR это понятно. Мне было не понятно где настраивается тип среза. Рассмотрев повнимательнее структурную схему TC 1, стало понятнее Выбор источника генерации события захвата осуществляется до подавителя помех и детектора перепада. Следовательно бит ICES1 из регистра TCCR1B работает не только на ножку (ICP1) PB0 но и на выход компаратора. Ну а на счёт как-то совсем не понятно. Сделали через задний проход? Сначала генерируется прерывание по захвату, а потом выполняется сам захват? Логичнее это должно происходить так: - событие захвата - TCNT1 копируется в ICR1 - генерируется прерывание При такой последовательности нам по барабану сколько мы будем падать в прерывание.
Не, имеется ввиду момент, когда мы входим в процедуру обработчика прерывания, компаратор может снова "передёрнуть".
В этом МК нет системы событий, поэтому события передаются через прерывания. Запрети прерывание TICIE1 и исё перестанет работать.