Tengo un circuito detector de cruce por cero, cuya salida le estoy proporcionando a mi Atmega8 como una interrupción, pero desafortunadamente no está funcionando. Si utilizo el suministro de CC 5V (lógica 1) como una interrupción, funciona. ¿A dónde me voy mal?
Se adjunta la salida del circuito detector de cruce por cero:
Aquí está mi código completo:
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL
#include <util/delay.h>
#define DataPort PORTB // Using PortB as our Dataport
#define DataDDR DDRB
//Interrupt Service Routine for INT0
ISR(INT0_vect)
{
///* This for loop blink LEDs on Dataport 5 times*/
for(int i = 0; i<3; i++)
{
DataPort = 0x00;
_delay_ms(50); // Wait 5 seconds
DataPort = 0xFF;
_delay_ms(50); // Wait 5 seconds
}
}
int main(void)
{
DDRD = 1<<PD2; // Set PD2 as input (Using for interupt INT0)
PORTD = 0<<PD2; // Enable PD2 pull-down resistor
DataDDR = 0xFF; // Configure Dataport as output
DataPort = 0xFF; // Initialise Dataport to 1
GICR = 1<<INT0; // Enable INT0
MCUCR = 1<<ISC01 | 1<<ISC00; // Trigger INT0 on rising edge
sei(); //Enable Global Interrupt
while(1)
{
DataPort = 0xFF;
}
}