Este proyecto tambin puede ser desarrollado con los PIC: Ttulo Descripcin
Contador de eventos externos por interrupcin. Desarrollar un contador de eventos externos de 0 a 99 visualizando el estado de la cuenta en 2 displays de 7 segmentos mediante un codificado CD4511. El estado de la cuenta de incrementa al presionar un pulsador. La pulsacin se detecta mediante la interrupcin por RB0.
Objetivo Procedimiento
Mostrar la manera de detectar eventos externos mediante la interrupcin por RB0. Iniciar el contador a 0. Configurar la interrupcin por RB0 para detectar cada vez que se presione un pulsador. Luego, el micro de dedica a mostrar el estado actual de la cuenta . Al producirse una inte rrupcin por RB0, se incrementa el estado de la cuenta y se actualiza el valor a mostrar en los displays.
Mdulos utilizados
Configuracin de puerto. Configuracin de interrupciones. Asignacin d e registro, Evaluacin de registro Conversin a BCD y visualizacin en display de 7 segmentos con codificador
Una vez generado un nuevo proyecto, comenzamos declarando registros que vamos a utilizar.
Para eso debemos ir al men Declaracin/Regis tros como se muestra en la imagen a la derecha.
Pgina 1/17
A continuacin vamos a configurar el puerto B. Para esto ingrese al rbol de herramien tas como se muestra en la siguiente imagen.
Se presenta la pantalla de configuracin del puerto B. Los pines B1 al B7 los utilizaremos para visualizar los datos en los displays de 7 segmentos. Por esto, configure estos pines como Salida. El pin RB0 lo utilizaremos para detectar cuando se presiona el pulsador por medio de la interrupcin RB0. Por esto, configure el pin RB0 como Entrada.
Pgina 2/17
A continuacin vamos a inicializar el registro contador en 0. Para esto ingrese al rbol de herramientas como se muestra en la im agen de la derecha. Se presenta la pantalla Asignar un valor a un registro. Asigne el valor literal decimal 0 al registro contador como lo muestra la imagen siguiente.
Pgina 3/17
Primero seleccione el registro que desea convertir a BCD. En este caso, el registro Contador. Luego debe seleccionar los registros donde guardar el resultado de la conversin. Como an no hemos declarado los registros, presione el botn nuevo correspondiente a las unidades. Se presenta la pantalla de declaracin de registros y declaramos el registro Unidad. Al volver de la pantalla de declaracin de registros, el registro recin declarado ha sido seleccionado en la lista automticame nte. Proceda de la misma manera para el r egistro Decena. Dado que nuestro proyecto slo cuenta hasta 99, el valor de las centenas no es necesario declararlo. El diagrama de flujo debe verse como la imagen de la derecha.
Pgina 4/17
A continuacin vamos a configurar la interrupcin por RB0. Para esto ingrese el rbol de herramientas como se muestra en la imagen de la derecha. Se presenta la pantalla de configuracin de interrupciones.
Seleccione la opcin Interrupcin por RB0 y configure la interrupcin por flanco descendente. De esta manera la interrupcin solo se produce cada vez que el pin RB0 pasa de estado alto a estado bajo. Entonces el pulsador debe estar asegurado mediante una resistencia a 5V y al pulsarlo lo conectamos directamente a masa. As, al presionar el pulsador estamos enviando un nivel bajo al pin RB0, lo cual genera la interrup cin. El diagrama de flujo debera quedar como la siguiente imagen.
Pgina 5/17
Se presenta la pantalla Activar Desactivar Interrupciones. Active la interrupcin por cambio de flanco del pin RB0 y el GIE como se muestra en la siguiente imagen.
Una vez que ha sido configurada y activada la interrupcin por RB0, procedemos a insertar el entorno de la interrupcin. Dentro del entorno de interrupcin vamos a programar lo queremos que el micro ejecute cada vez que se produzca la interrupcin. Niple 16F84 Ejemplo 3 - Contador de eventos externos por interrupcin . Pgina 6/17
En el nuevo diagrama de flujo correspondiente a la interrupcin, se insertan 2 bloques de manera automtica. El primero corresponde al Inicio de la interrupcin y el segundo bloque desactiva el GIE (Habilit a dor general de interrupciones).
La metodologa de programacin dentro del entorno de interrupcin es la misma que para el resto del programa, con la diferencia que las interrupciones (al igual que las rutinas), deben tener al menos un bloque de Salida llamado Fin de interrupcin.
En este proyecto vamos a utilizar la interrupcin por RB0 para detectar en momento en que se presiona el pulsador. Entonces, una vez que el microcontrolador se interrumpe lo que debemos hacer es incrementar el estado de la cuenta.
Pgina 7/17
Dado que el presente proyecto slo cuenta hasta 99, una vez realizado el incremento del registro cont dor, debemos controlar que el valor del mismo a no supere el nmero 99. Esto lo hacemos comparando el registro con el valor literal (constante) 99 y reiniciar la cuenta a 0 cuando el registro sea mayor a 99. Para comparar el valor del registro utilizamos el bloque de comparacin de registro a 8 bits ingresando al rbol de herramien tas como se muestra en la imagen de la derecha.
Pgina 8/17
El bloque que acabamos de inse rtar puede interpretase como la formula cin de la siguiente pregunta:
Y como todo bloque de compar acin, debe tener 2 salidas; una para el SI y otra para el NO.
El primer bloque insertado a continuacin de ste, corresponde a la salida del SI y el segundo a la salida del NO.
Entonces, si el registro contador es mayor que 99, d ebemos reiniciar la cuenta a 0. Esto se realiza asig nando el valor 0 al registro Contador.
Para esto utilizamos el mdulo de Asignar un valor a un Registro del mismo modo que explicamos al inicio del ejemplo.
Pgina 9/17
El siguiente paso consiste en actualizar los datos a visualizar el dato en los displays de 7 se gmentos. Para esto, vamos a convertir el valor del contador a formato BCD, es decir que debemos descomponer el valor de la cuenta en Unidades y Decenas para luego mostrar cada valor en el display correspon diente. Realice el mismo procedimiento que realiz para la conversin a BCD en el programa principal al comienzo del ejercicio. El diagrama de flujo debe verse como la siguiente imagen.
Pgina 10/1 7
La imagen de la derecha muestra como debe quedar el diagrama de flujo. Para terminar con el programa de la interrupcin, debemos insertar el retorno de interrupcin. Es decir, el bloque que indica que la interrupcin ha finalizado y el microcontrolador debe retomar la tarea cancela al producirse la interrupcin.
El diagrama de flujo completo de la interrupcin de verse como la imagen de la derecha. Niple 16F84 Ejemplo 3 - Contador de eventos externos por interrupcin . Pgina 11/1 7
Ya hemos configurado el puerto B, inicializado el registro contador y configurado y activado la interrupcin por RB0 . Ahora debemos programar el microcontrolador para que se quede mostrando el estado de la cuenta de manera permanente, ya que el incremento se reali za dentro de la interrupcin.
Para mayor informacin sobre visualizacin de datos en displays de 7 segmentos consulte el Anexo1Visualizacin de datos en displays de 7 segmentos.
Ingrese al rbol de herramientas como se muestra en la imagen de la derecha: Se presenta la pantalla de v isualizacin de displays de 7 segmentos con codificador CD4511.
Primero debe seleccionar el tipo de display a utilizar. El CD4511 es un codificador para displays tipo ctodo comn, por esto seleccionamos este tipo de display.
Luego debe seleccionar la cantidad de dgitos a utilizar, en este caso seleccione 2 dgitos. Al seleccionar la cantidad de dgitos a utilizar, se muestra un mensaje que le indica como seleccionar los valores de mostrar en cada display. El proceso de visualizacin de datos en los displays consiste en enviar el valor de las unidades, habilitar el display correspondiente a las unidades y apagar el display de las decenas, mantener el display de las unidades encendido durante un breve periodo de tiempo (algunos microsegundos), luego se apaga el display correspondiente a las unidades y se enva el dato correspondiente a la decenas, se habilita el display de las decenas y se mantiene encendido durante algunos microsegundos. Niple 16F84 Ejemplo 3 - Contador de eventos externos por interrupcin . Pgina 12/1 7
Luego debe seleccionar el valor a visualizar en cada display. Esto se realiza haciendo un doble clic sobre cada imagen de display. Se presenta la pantalla Mostrar un valor en un display. Seleccione el registro Unidad. Recordemos que este registro contiene el valor de las unidades del estado actual de la cuenta calculado mediante el bloque de conversin a BCD. Proceda del mismo modo para el registro de las decenas.
Una vez seleccionados los datos a visualizar en cada display, se debe seleccionar el pin por el cual desea habilitar e inhabilitar cada display para realizar el multiplexado.
Pgina 13/1 7
pines B3 y B2 para las unidades y las decenas vamente. Por ltimo, debe seleccionar los pines correspondiente al bus de datos por el cual se enva el dato a visualizar al codificador respecti-
CD4511.
Para este ejemplo seleccione los pines B4 al B7 c omo lo muestra la siguiente imagen.
Pgina 14/1 7
Pgina 15/1 7
Inserte un bloque NOP y cierre el ciclo con el bloque de visualizacin de datos en displays de 7 segmentos mediante un vnculo (flecha). El diagrama de flujo completo del programa principal debe verse como se muestra en la siguiente imagen.
Pgina 16/1 7
Esquema electrnico
Pgina 17/1 7