30 jul 2010

Programus Interruptus.

Ok vamos a explorar una función muy interesante de los microcontroladores llamada Interrupciones Externas.

Como lo indica su nombre, interrumpen la ejecución del programa sin importar donde se encuentre y ejecutan una función o subrutina, dejando continuar el problema despues.

Aprovechando que tenemos montado el LCD del post anterior (Lucy in the Chair with Diamonds) vamos a agregar un boton en la patita5 del Atmega8 (PORTD.3/PIND.3) y a su vez a tierra. En esta ocación vamos a utilizar una resistencia de 10kohms externa (en configuración pull-up). Paralelo al boton conectaremos un capacitor de 0.1uF (100 nF) para evitar los rebotes.

El paraesquematico es mas o menos asi:



Ahora vamos al CodeVisionAvr.
Generamos nuestro proyecto con estas caracteristicas:

Aqui se encuentra el programa completo.


Los cambios importantes respecto a anteriores programas son:

La inlcusión de la libreria stdlib.h que incluye la función itoa(entero, cadena). Esta función nos permite convertir valores numericos en cadenas de texto para mostrarlas en el LCD con la función lcd_puts(cadena);

La rutina que se ejecuta cada vez que se activa la interrupción.


// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
while(PIND.3==0){}
l++;
if(l>65535)l=0;
}


La definición de la variable l que se tiene que realizar antes de la rutina de interrupción.




Como habra notado re-hicimos nuestro contador, con un programa mas corto y con mejor presentación gracias a nuestra pantalla de LCD.

El manejo de interrupciones nos sera muy util cuando realicemos programas mas complicados. Aunque en programas simples y meramente lineales yo prefiero no emplearlos.

En la siguiente entrada vamos a emplear el ADC (conversor Analogo-Digital) que incluye nuestro querido Atmega8.
Recuerden exponer sus dudas y sus inquietudes en la sección de comentarios. Es esa parte la que en realidad mantiene vivo un blog.

No hay comentarios:

Publicar un comentario