Сопряжение компаратора и таймера 1 в atmega8

Тема в разделе "Микроконтроллеры AVR", создана пользователем a1000, 10 июн 2020.

  1. a1000

    a1000 Гик

    Исходная схема следующая:
    Имеем аналоговый компаратор 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.
    Подскажите кто в курсе.
     
  2. parovoZZ

    parovoZZ Гуру

    В даташите написано:
    Источник генерации события захвата определяется битом ACIC в регистре ACSR. Обязательно выполнить это условие:
    Ещё в даташите написано следующее:
    Т.е. пока входишь в процедуру обработки прерывания (это 4 такта + выполнение одной инструкции кода перед этим), значение в буфере захвата может поменяться. Написано кривовато (как и все даташиты от Atmel))), т.к. не ясно как оно может смениться, если факт наступления события захвата таймеру передаётся через прерывание.
     
    a1000 нравится это.
  3. a1000

    a1000 Гик

    То, что для подключения выхода компаратора к схеме захвата таймера 1 нужно установить бит ACIC в регистре ACSR это понятно. Мне было не понятно где настраивается тип среза. Рассмотрев повнимательнее структурную схему TC 1, стало понятнее
    [​IMG][​IMG]
    Выбор источника генерации события захвата осуществляется до подавителя помех и детектора перепада. Следовательно бит ICES1 из регистра TCCR1B работает не только на ножку (ICP1) PB0 но и на выход компаратора.
    Ну а на счёт
    как-то совсем не понятно. Сделали через задний проход? Сначала генерируется прерывание по захвату, а потом выполняется сам захват? Логичнее это должно происходить так:
    - событие захвата
    - TCNT1 копируется в ICR1
    - генерируется прерывание
    При такой последовательности нам по барабану сколько мы будем падать в прерывание.
     
  4. parovoZZ

    parovoZZ Гуру

    Не, имеется ввиду момент, когда мы входим в процедуру обработчика прерывания, компаратор может снова "передёрнуть".
     
  5. parovoZZ

    parovoZZ Гуру

    В этом МК нет системы событий, поэтому события передаются через прерывания. Запрети прерывание TICIE1 и исё перестанет работать.
     
  6. a1000

    a1000 Гик

    Спасибо за консультацию, буду эксперементировать.