ejemplo 03 - 16f84

17
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 1/17 Ejemplo Nº 3 Modelo PIC utilizado: 16F84 Este proyecto también puede ser desarrollado con los PIC: 16F6xx / 16F87x Título Contador de eventos externos por interrupción. Descripción 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 esta- do de la cuenta de incrementa al presionar un pulsador. La pulsación se detecta mediante la interrupción por RB0. Objetivo Mostrar la manera de detectar eventos externos mediante la interrupción por RB0. Procedimiento Iniciar el contador a 0. Configurar la interrupción 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 interrupción por RB0, se incrementa el estado de la cuenta y se actualiza el valor a mostrar en los displays. Módulos utilizados Configuración de puerto. Configuración de interrupciones. Asignación d e registro, Evaluación de registro Conversión a BCD y visualización en display de 7 segmentos con codificador Desarrollo del ejemplo Comience creando un nue- vo proyecto. Una vez generado un nuevo proyecto, comenzamos decla- rando registros que vamos a utilizar. Para eso debemos ir al menú “Declaración/Registros” como se muestra en la imagen a la derecha.

Upload: jesus-gtrz

Post on 10-Aug-2015

164 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 1/17

Ejemplo Nº 3 Modelo PIC utilizado: 16F84

Este proyecto también puede ser desarrollado con los PIC: 16F6xx / 16F87x

Título Contador de eventos externos por interrupción.

Descripción 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 esta-

do de la cuenta de incrementa al presionar un pulsador. La pulsación se detecta

mediante la interrupción por RB0.

Objetivo Mostrar la manera de detectar eventos externos mediante la interrupción por RB0.

Procedimiento Iniciar el contador a 0. Configurar la interrupción 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 interrupción por RB0, se incrementa el estado de

la cuenta y se actualiza el valor a mostrar en los displays.

Módulos utilizados Configuración de puerto.

Configuración de interrupciones.

Asignación d e registro, Evaluación de registro

Conversión a BCD y visualización en display de 7 segmentos con codificador

Desarrollo del ejemplo

Comience creando un nue-

vo proyecto.

Una vez generado un nuevo

proyecto, comenzamos decla-

rando registros que vamos a

utilizar.

Para eso debemos ir al menú “Declaración/Registros” como se

muestra en la imagen a la derecha.

Page 2: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 2/17

Para declarar un registro haga doble clic sobre

uno de los registros de Usuario (de color verde). Es-

tos registros son los que Ud. puede utilizar para

guardar los datos que se requieran en el proyecto.

Declare un registro llamado “contador ”.

A continuación vamos a configurar el puerto B.

Para esto ingrese al árbol de herramientas como se

muestra en la siguiente imagen.

Se presenta la pantalla de configuración del puerto B.

Los pines B1 al B7 los

uti lizaremos para visuali-

zar los datos en los dis-

plays 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 interrupción

RB0. Por esto, configure

el pin RB0 como “Entra-

da”.

Page 3: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 3/17

El diagrama de flujo debería verse como la siguiente imagen.

A continuación 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.

Hasta ahora el diagrama debe verse como la siguiente imagen.

Page 4: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 4/17

El siguiente paso consiste en visualizar el estado de la cuenta en los

displays de 7 segmentos.

Para esto, es necesario primero convertir el valor del contador a form a-

to BCD, es decir que debemos descomponer el valor de la cuenta en Uni-

dades y Decenas para luego mostrar cada valor en el display correspo n-

diente.

Para mayor información sobre visualización de datos en displays de 7

segmentos consulte el Anexo1- “Visualización de datos en displays de 7

segmentos”.

Para convertir un valor a BCD ingrese al menú como se muestra en la

imagen de la derecha:

Se presenta la pantalla “convertir registro a BCD”.

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 conversión. Como aún no hemos

declarado los registros, presione el botón “nuevo” correspondiente a las unidades. Se presenta la pantalla

de declaración de registros y declaramos el

registro “Unidad”.

Al volver de la pantalla de declaración de

registros, el registro recién declarado ha sido

seleccionado en la lista automáticamente.

Proceda de la misma manera para el re-

gistro “Decena”.

Dado que nuestro proyecto sólo cuenta

hasta 99, el valor de las centenas no es ne-

cesario declararlo. El diagrama de flujo debe

verse como la imagen de la derecha.

Page 5: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 5/17

Para obtener mayor información sobre las interrupciones consulte el anexo “Interrupciones”.

A continuación vamos a configurar la interrupción por RB0.

Para esto ingrese el árbol de herramientas como se muestra en la

imagen de la derecha.

Se presenta la pantalla de configuración de interrupciones.

Seleccione la opción “Interrupción por RB0” y configure la interrupción por “flanco descendente”.

De esta manera la interrupción 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 gene-

ra la interrupción.

El diagrama de flujo debería quedar como la siguiente imagen.

Page 6: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 6/17

Una vez configurada la interrupción por RB0, la misma debe ser activada.

Para esto ingrese al árbol de herramientas como se muestra en la imagen

de la derecha.

Se presenta la pantalla “Activar – Desactivar Interrupciones”.

Active la interrupción por cambio de flanco del pin RB0 y el GIE como se

muestra en la siguiente imagen.

Hasta ahora el diagrama de flujo debe verse como la siguiente imagen.

Una vez que ha sido configurada y activada la interrupción por RB0, procedemos a insertar el “entorno

de la interrupción”.

Dentro del entorno de interrupción vamos a programar lo queremos que el micro ejecute cada vez que se

produzca la interrupción.

Page 7: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 7/17

Para insertar el entorno de la interrupción ingrese al árbol de herra-

mientas como se muestra en la imagen de la derecha .

Al insertar un entorno de interrupción se genera un diagrama de flujo

nuevo dentro del cual vamos a diseñar el programa de la interrupción.

Dentro del explorador de proyecto se agrega el entorno de la inte-

rrupción, es decir, el diagrama de flujo correspondiente a la interrupción.

En el nuevo diagrama de flujo correspondiente a la interrupción, se insertan 2 bloques de manera auto-

mática. El primero corresponde al “Inicio de la interrupción” y el segundo bloque desactiva el GIE (Habilita-

dor general de interrupciones).

La metodología de programación dentro del entorno de interrupción es

la misma que para el resto del programa, con la diferencia que las interrup-

ciones (al igual que las rutinas), deben tener al menos un bloque de “Sali-

da” llamado “Fin de interrupción”.

En este proyecto vamos a utilizar la interrupción por RB0 para detectar

en momento en que se presiona el pulsador. Entonces, una vez que el mi-

crocontrolador se interrumpe lo que debemos hacer es incrementar el esta-

do de la cuenta.

Para esto ingrese al árbol de herramientas como se muestra en la ima-

gen de la d erecha.

Page 8: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 8/17

El campo “sintaxis” presenta la manera de interpretar los datos solicitados. En el campo “Sumando 1” se-

leccione el registro contador y en el campo “Sumando 2” seleccione la opción “un literal”, formato decimal,

valor “1”. Por último, seleccione el registro donde desea guardar el resultado del cálculo, en este caso, se-

leccione la opción “en otro registro”, registro “Contador”.

El diagrama de flujo el cual debería quedar como lo muestra la siguiente imagen.

Dado que el presente proyecto sólo cuenta hasta 99, una vez realizado el

incremento del registro contador, debemos controlar que el valor del mismo

no supere el número 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 “comparación

de registro a 8 bits” ingresando al árbol de herramientas como se muestra en

la imagen de la derecha.

Page 9: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 9/17

Se presenta la pantalla “Evaluar un registro”.

El registro a evaluar es el registro “Contador”, el operador de comparación es “>” y el valor de compara-

ción es de tipo “Literal”, “Decimal” y valor “99”. En la siguiente imagen se muestran los datos seleccionados.

Al insertar el bloque, el diagrama de flujo debe verse como la siguiente imagen.

El bloque que acabamos de inser-

tar puede interpretase como la for-

mulación de la siguiente pregunta:

¿El registro “Contador”, es

mayor que el valor decimal 99?

Y como todo bloque de compar a-

ción, debe tener 2 salidas; una para

el “SI” y otra para el “NO”.

El primer bloque insertado a con-

tinuación de éste, corresponde a la

salida del “SI” y el segundo a la sali-

da del “NO”.

Entonces, si el registro contador es mayor que 99, debemos reiniciar la cuenta a 0. Esto se realiza asig-

nando el valor “0” al registro “Contador”.

Para esto utilizamos el módulo de “Asignar un valor a un Registro” del mismo modo que explicamos al

inicio del ejemplo.

Page 10: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 10/17

El diagrama de flujo debe verse como la siguiente imagen.

El siguiente paso consiste en actualizar los datos a visualizar el dato en los displays de 7 segmentos.

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 correspondiente.

Realice el mismo procedimiento que realizó para la conversión a BCD en el programa principal al co-

mienzo del ejercicio.

El diagrama de flujo debe verse como la siguiente imagen.

Page 11: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 11/17

Ahora vamos a completar la salida del

“NO” correspondiente al bloque de evalua-

ción de registro.

Para esto, genere un vínculo (flecha) en-

tre el bloque desde el bloque de evaluación

de registro hasta el bloque de conversión a

BCD. Esto significa que cuando el valor del

registro contador sea menor que 99, se pasa

directamente a realizar la conversión a BCD

y no reinicia la cuenta.

La imagen de la derecha muestra como

debe quedar el diagrama de flujo.

Para terminar con el programa de la inte-

rrupción, debemos insertar el “retorno de in-

terrupción”. Es decir, el bloque que indica

que la interrupción ha finalizado y el micro-

controlador debe retomar la tarea cancela al

producirse la interrupción.

Toda inte rrupción debe tener al menos un

bloque de “fin de interrupción”.

Para esto ingrese al árbol de herramien-

tas como lo muestra la siguiente imagen.

El diagrama de flujo completo de la inte-

rrupción de verse como la imagen de la de-

recha.

Page 12: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 12/17

Una vez terminado el programa de la interrupción. Volvemos al Programa Principal.

Ya hemos configurado el puerto B, inicializado el registro contador y configurado y activado la interrup-

ción 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 realiza dentro de la interrupción.

Para mayor información sobre visualización de datos en displays de 7 segmentos consulte el Anexo1-

“Visualización de datos en displays de 7 segmentos”.

Ingrese al árbol de herramientas como se muestra en la imagen de la de-

recha:

Se presenta la pantalla de visualización 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 cá-

todo común, por esto seleccionamos este tipo de display.

Luego debe seleccionar la cantidad de dígitos a utilizar, en este caso seleccione 2 dígitos.

Al seleccionar la cantidad de dígitos a utilizar, se muestra un mensaje que le indica como seleccionar los

valores de mostrar en cada display.

El proceso de visualización 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 dis-

play correspondiente a las unidades y se envía el dato correspondiente a la decenas, se habilita el display

de las decenas y se mantiene encendido durante algunos microsegundos.

Page 13: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 13/17

Este proceso debe repetirse muchas veces y se produce a gran velocidad. De esta manera se genera la

ilusión óptica de estar visualizando un único valor representado por los 2 dígitos.

El campo “repeticiones” contiene la cantidad de veces que el proceso de multiplexado se repite. El valor

por defecto es de 1000 repeticiones. Si el valor de las repeticiones aumenta, mayor será el tiempo que el

micro permanecerá “mostrando” el dato antes de seguir con la ejecución del resto del programa.

Ingrese el valor 10 en el campo “Cantidad de repeticiones”.

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 con-

tiene el valor de las unidades del es-

tado actual de la cuenta calculado

mediante el bloque de conversión 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 des-

ea habilitar e inhabilitar cada display para realizar el multiplexado.

Page 14: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 14/17

Esto se realiza seleccionando el Pin correspondiente en cada una de las listas desplegables que se pre-

sentan debajo de cada uno de los displays.

Observe que Niple solo presenta en las listas los pines que están configurados como “Salida”. De esta

manera se evitan los errores por seleccionar pines configurados como “Entrada” o no configurados.

Seleccione los

pines B3 y B2 para

las unidades y las

decenas respecti -

vamente.

Por último, debe

seleccionar los pi-

nes correspondien-

te al bus de datos

por el cual se envía

el dato a visualizar

al codificador

CD4511.

Para este ejemplo seleccione los pines B4 al B7 como lo muestra la siguiente imagen.

Page 15: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 15/17

Por último puede consultar e imprimir el esquema de conexión de la configuración que ha seleccionado.

El diagrama de flujo el cual debe verse como lo muestra la siguiente imagen.

Page 16: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 16/17

Para terminar y dado que el micro se quedará “mostrando los datos” de manera permanente, insertamos

un bloque “NOP” para poder cerrar el ciclo con el bloque de visualización de datos en display de 7 segmen-

tos. Ingrese al árbol de herramientas a como se muestra en la siguiente imagen.

Inserte un bloque NOP y cierre el ciclo con el bloque de visualización de datos en displays de 7 segmen-

tos mediante un vínculo (flecha).

El diagrama de flujo completo del programa principal debe verse como se muestra en la siguiente ima-

gen.

Page 17: Ejemplo 03 - 16F84

Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores

Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 17/17

La estructura general y el modo de funcionamiento del proyecto es el siguiente.

Esquema electrónico