Estoy tratando de hacer que ATTINY85 se dispare SOLO en ALTA interrupción, pero no importa qué combinación de bits establezca para GIMSK y MCUCR, no puedo hacer que funcione;
Aquí está mi código:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int main(void)
{
DDRB = 0b00011000;
setup();
PORTB = 0b00010000;
while(1) {}
return 0;
}
void setup()
{
GIMSK = 0b01100000;
PCMSK = 0b00000010;
MCUCR = 0b00000011;
sei();
}
ISR(PCINT0_vect)
{
PORTB = 0b00011000;
delayms( 100 );
PORTB = 0b00010000;
}
Según la hoja de datos, si configuro los bits en MCUCR de la siguiente manera, debería poder lograr mi resultado con la última opción:
ISC01 ISC00
0 0 The low level of INT0 generates an interrupt request.
0 1 Any logical change on INT0 generates an interrupt request.
1 0 The falling edge of INT0 generates an interrupt request.
1 1 The rising edge of INT0 generates an interrupt request
Probé todas las combinaciones, pero absolutamente nada cambió. Luego cambié:
GIMSK = 0b01100000;
A
GIMSK = 0b00100000;
Eso hizo que la interrupción se disparara en ALTO, pero ahí es donde se detuvo, si conecto de nuevo el pin a alto, la interrupción no se dispara, lo mismo si lo conecto a BAJO. Solo la primera vez que el controlador está encendido y el pin está conectado a ALTO.
¿Cómo puedo hacer que la interrupción se dispare solo cuando el pin está ALTO, no ambos? ALTO y BAJO. Quiero cada vez que presiono un botón, interrumpir para disparar, pero NO cuando suelto el botón. ¿Alguna sugerencia? Gracias!