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

atmega16 прерывание от компаратора

Добавлено: Пн окт 31, 2011 17:08:40
kisa92
Здравствуйте, не работает прерывание от компаратора. Хочу добиться того чтоб при изменении фронта сигнала с 0 на 1
запускался обработчик прерываний и выполнял соответствующие действия(вывод 3х импульсов).
Кто что может подсказать, заранее спасибо!

#include <mega16.h>
#include <delay.h>

// Declare your global variables here
unsigned char a;

/* Called automatically on external interrupt */
interrupt [17]void ana_comp(void) {

//for(a=3;a>0;a--);
DDRA.0=1; // PA.0 is output
PORTA.0=1; // PA.0 is High level
delay_us(5);
PORTA.0=0; // PA.0 is Low level
delay_us(45);
ACSR.4=1; //interrupt flag ACI is clean
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
DDRB=0; // port B is input (PB2 & PB3)
PORTB=0; //port B is input with Z
DDRA.0=1; // PA.0 is output
PORTA.0=0; // PA.0 is Low level

ACSR.3=1; //interrupt ON
// Analog Comparator ON
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0b00001011; // 0->1 rising
while (1){
}
}

Re: atmega16 прерывание от компаратора

Добавлено: Пн окт 31, 2011 18:00:58
Meteor
А порог внешний на втором входе устанавливаете?

Re: atmega16 прерывание от компаратора

Добавлено: Пн окт 31, 2011 19:47:59
kisa92
Meteor писал(а):А порог внешний на втором входе устанавливаете?
Да, порог 4V стоит.

Пытаюсь отладить программу в Протеусе, и вот теперь не знаю, либо кривой код либо глюки самого Протеуса
//Спасибо

Re: atmega16 прерывание от компаратора

Добавлено: Вт ноя 01, 2011 00:44:42
kisa92
Спасибо, тема закрыта. Причина была в ACSR.4=1; //interrupt flag ACI is clean
а также пропущенных скобках

8)