Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Abr 15, 2014 in AVR | 5 comments

Interrupciones externas

Interrupciones externas

Descripción de las interrupciones externas

 El push button estará conectado al microcontrolador el cual se encuentra configurado para las interrupciones externas, esto es, que el programa deja de hacer lo que está haciendo para atender las interrupciones externas y ejecutar las instrucciones dentro esta  función, que para este caso es prender el LED que se encuentra conectado al microcontrolador. para mayor informacion visita  http://es.wikipedia.org/wiki/Interrupci%C3%B3n

 

Diagrama Esquemático

 

interrupcion diagrama esquematico

Diagrama Interrupcion externa

 

 Materiales

 

 Introducción

Interrupciónes externas

Las interrupciones externas en el ATmega8 son activadas con los pines INT0 y INT1, en caso de que se habiliten las interrupciones externas  los pines INT siempre activaran alguna interrupción sin importar como se haya configurado el puerto en el que estos pines se encuentren. Las interrupciones externan se habilitan cuando la entrada del pin, cambia de estado, se puede configurar si se requiere que se active cuando cambia de un estado bajo a uno alto o viceversa.

 Resistencia de Pull down

 Cuando se conecta un pin del microcontrolador a un switch este al presionarlo nos presenta un nivel alto en el pin, pero cuando este está abierto con la resistencia de pull down aseguramos un cero o nivel bajo en el microcontrolador.

pull down

Diagrama de resistencia de pull down

 

 

Resistencia de pull-down:

 

pull down Interrupciones externas

Esquematico del push-botton

 

 

Programa en C

#include <avr/io.h>
#include <avr/interrupt.h> //Libreria necesaria para manejar las interrupciones
#include <util/delay.h>

 int main (void) {
DDRB=0xFF;

cli();          //Desactiva las interrupciones globales

MCUCR=0x03;
GIFR =0x40;
GICR=0x40;

sei();        //Activar las interrupciones globales

while(1){
}
}

ISR(INT0_vect)  //Vector de interrupción externa del INT0
{
PORTB=0x01;
_delay_ms(2000);
PORTB=0x00;
}

 

}

 

Detalles del programa

<pre>#include <avr/interrupt.h>

Cada que se use alguna interrupción externa  es necesario llamar a la librería avr/interrupt.h que es la que contiene todos los vectores de interrupción de los AVR’s.

 cli();

Esta instrucción deshabilita las interrupciones.

<pre> sei();

Habilita las interrupciones.

 

 

 

 MCUCR=0x03;

 

MCUCR  Interrupciones externas

tabla de valores de bit

 

 

Al asignársele un 0x03 le estamos indicando que active los bits 0 y 1 los cuales para el registro MCUCR nos indican de que manera se active la interrupción, como se puede ver en la tabla, hay cuatro opciones que son: El nivel bajo de INT1, Cualquier cambio lógico, El flanco de bajada y El flanco de subida. Con los bits 0 y 1 en unos, tenemos habilitada la opción del flanco de subida.

 

mcucr Interrupciones externas

interrupciones

 

 

 GIFR =0x40;

 

GIFR   Interrupciones externas

Bits

 

 

0x40 = 0b01000000, esto es, que estamos seleccionando el bit 6 del registro GIFR el cual nos indica que al activarlo limpiamos la bandera INTF0.

 

GICR=0x40;

 

GICR Interrupciones externas

Bits

 

 

Al igual que en el registro pasado se está activando el bit 6 del GICR el cual nos indica que se usara el pin INT0 para la interrupción externa.

5 Comments

  1. Tengo una duda sobre las interrupciones: tengo un acelerometro el cual quiero que genere en mi micro-controlador una interrupción, en caso de que sufra cualquier perturbación, ¿podría conectar el pin INT del sensor directamente a una patilla i/o del micro para que genere una interrupcion en el micro?

    • Hola que tal Joseba, si eso puedes hacer, saludos.

  2. hola, gracias por tu rapida respuesta, pero ahora tengo otra duda,¿cómo sabe el acelerometro que tiene que generar un interrupción? o ¿como detecta el micro esa interrupción?

  3. donde descargo la librería

    • Las bibliotecas que salen ahi, son las de defecto de WinAVR por lo que no requieres descargar más bibliotecas. Saludos

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *