LED parpadeante usando interrupciones en AVR

1

Quiero aprender a trabajar con interrupciones y he hecho mi primer intento.

He hecho un circuito muy simple basado en ATtiny13.

Hay un led en PB1 y un botón en PB3. Cuando se presiona el botón, el pin PB3 cambia su estado de nivel bajo a nivel alto, esto produce una interrupción externa. El código de esta interrupción hace que el led se encienda durante 500 ms.

esquema

Este es mi código, ¿qué está mal aquí? Estoy recibiendo esta advertencia:

  

'PCINT3_vect' parece ser un manejador de señales mal escrito, falta   __vector prefijo [-Wmisspelled-isr]

¿Qué está mal aquí?

#define F_CPU 9600000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

ISR(PCINT3_vect)
{
        PORTB |= (1<<PB1);
        _delay_ms(500);
        PORTB &= ~(1<<PB1);
        _delay_ms(500);
}

void SystemInit(void)
{
        PCMSK |= (1<<PCINT3);   // pin change mask: listen to portb, pin PB3
        GIMSK |= (1<<PCIE); // enable PCINT interrupt
        sei();          // enable all interrupts

}

int main(void)
{       
    DDRB |= (1<<PB1);
    DDRB |= (1<<PB3);
    SystemInit();

    while (1) 
    {       
    }
}

Gracias chicos!

    
pregunta Salva

2 respuestas

3

Esta es la tabla de vectores de interrupción de ATTiny13.

PCINT3 no es un vector de interrupción. Necesitas cambiar eso a PCINT0. Parece que tienes el PCI y la máscara correctamente configurados. Debería poder hacer ese cambio y hacer que funcionen sus interrupciones. También debe agregar la inicialización para que su botón pulsador funcione.

DDRB |= (0<<PB3); //Pushbutton input
PORTB |= (1<<PB3); //Enable Pushbutton pull-up
DDRB |= (1<<PB1); //LED output

Eso habilitará el pull-up interno y permitirá que ocurra una ventaja al presionar un botón. Es probable que esto funcione para la simulación, pero un circuito real necesitará algunos rebotes en hardware o software.

    
respondido por el Matt Young
2

Según la tabla aquí , no hay PCINT3 interrupt en ATtiny13 :

    
respondido por el Eugene Sh.

Lea otras preguntas en las etiquetas