Computing">
Informe Practica Nro. 02: Manejo de Interrupciones Externas Del Microcontrolador PIC 18F4550
Informe Practica Nro. 02: Manejo de Interrupciones Externas Del Microcontrolador PIC 18F4550
Informe Practica Nro. 02: Manejo de Interrupciones Externas Del Microcontrolador PIC 18F4550
Vicerrectorado Académico
Decanato de Docencia
Departamento de Ingeniería Electrónica
Núcleo de Electrónica y Sistemas y Digitales
Laboratorio de Sistemas Digitales II
Autor:
Victorino Villamizar Delgado, CIV.-23.541.989
Grupo Nº 10
San Cristóbal, Julio, 2021
Introducción
Los microcontroladores son herramientas versátiles que nos permiten resolver un sinfín de
tareas, tan solo debemos proporcionarle esas instrucciones que seguirán al pie de la letra,
evaluando y planteando cualquier eventualidad que se presente en nuestra aplicación, como
resolverla y con que prioridad hacerlo, para que su ejecución sea lo más rápida y optima
posible. Al plantearnos esto nos damos cuenta que no es solo colocar el código y que se
ejecute por sí solo, sino que se debe indicar cuando hacerlo y si debería paralizar una tarea
para atender otra de mayor importancia.
Por lo anterior, debemos aprender a gestionar la configuración de las interrupciones externas
de nuestro pic, para que haga tareas que se activen de manera automática por medio de un
agente externo, y no solo eso, también manejar los niveles de prioridad para dichas
interrupciones, para que se preste atención inmediata a las que así lo requieran.
Para eso debemos conocer los tipos de interrupciones que tenemos a nuestra disposición, para
así utilizar el que mejor se acople a nuestras necesidades según sea el caso.
Marco teórico
Botón de RESET.
En el segundo modo las interrupciones pueden asignarse a dos niveles de prioridad. Las
interrupciones de alta prioridad siguen saltando a la posición 0x0008, mientras que las de baja
van a la 0x0018. En este caso una interrupción de alta prioridad puede interrumpir a una de
baja, pero no al contrario.
La elección de un modo u otro depende del valor del bit IPEN (Interrupt Priority Enable) del
registro RCON.
#define enable_priority_levels RCONbits.IPEN=1
#define disable_priority_levels RCONbits.IPEN=0
Diseño Metodológico
Se configurará el puerto C como salida. En este puerto se conectarán los pines de control de la
LCD grafica.
Led’s
Resultados
Para esta practica se cumplieron todas las características para la aplicación a diseñar, las
cuales eran:
1. Cuente la cantidad de fruta que va entrando a cada caja, para ello debe tomar en
cuenta la prioridad de la fruta, cada vez que una fruta cae en el depósito se enciende un
led por 100 ms y luego se apaga.
Primero que todo activamos los niveles de prioridad para las interrupciones con el siguiente
comando.
Luego establecemos los niveles de prioridad para cada interrupción, tomando en cuenta que el
pin B0 será la de mas alta prioridad por defecto así que no debemos indicarlo, solo se lo
indicamos a las demás interrupciones.
Para activar las interrupciones llamamos a una función llamada interrupción(), desde un while
para que el programa se siga repitiendo hasta que el usuario lo decida.
El contador1 llevara el conteo de las peras, por eso cuenta hasta 15 por caja y el contador2 el
de los mangos los cuales son 20 por caja. Ya que son llamadas con la misma interrupción pero
cada fruta ingresa a una velocidad diferente, por cada 2 peras ingresa un mango, al ingresar la
pera a una velocidad de 75ms y el mango a 150ms, por ello utilizamos dos contadores
adicionales, llamados contaa1 y contaa2, el contaa1 se inicializara en 0, y llevara el conteo de
cada ingreso de interrupción y el contaa2 se inicializara en 2, luego para contar un mango se
verifica primero que el conteo de mangos sea menor a 20 y que contaa2-contaa1=0 esto para
garantizar que ingresen a velocidades diferentes, siento el ingreso de peras a el doble de los
mangos, por ejemplo: Al activarse la primera interrupción por este pin aumentara contaa1=1,
cuenta la pera y al contar el mango este no se cuenta, ya que contaa2-contaa1=1 y no cumple
la condición para contar, en el segundo ingreso contaa1=2 y me cuenta la segunda pera y al
verificar que contaa2-contaa1=0 me cuenta el primer mango.
Para cumplir esta condición se declara primero una función llamada inicio_LCD(), aquí
inicializamos la LCD, borramos la pantalla e imprimimos el membrete mostrado en la imagen
anterior. Esta función es llamada desde el mai() al iniciar el programa.
Al activarse cada interrupción, por medio de los siguientes comandos guarda en una variable
de tipo char llamada “cona” el numero anterior del conteo (de tener uno), esto se hace para
poder borrar el numero anterior y que no se sobrescriban en la lcd los números de conteo y
luego guarda en una variable char llamada “con” el número actual del contador para mostrar.
Luego se borra el numero anterior (de haber tenido uno) y se muestra el numero actual de el
contador de fruta.
Esto aplica para todas las interrupciones, lo único que cambiará será la variable “contador”,
para el caso de las fresas será “contador”, para mangos “contador2”, para peras “contador1” y
manzanas “contador3” respectivamente.
3. Una vez lleno un depósito se debe visualizar en el LCD grafico la palabra FULL y
debe parar la banda transportadora, por lo tanto, se paraliza el conteo.
Al momento de habilitarse la interrupción, anteriormente vimos que por medio de if se
verificaba que el contador fuera menor al numero de frutas que se empacaban en cada caja, al
no cumplirse esta condición el contador se detiene y se procede visualizar en la LCD la
palabra “FULL” y detener el contador.
Esto se cumple para fresas y manzanas, en el caso de los mangos y peras se hace por medio de
un if ‘s ya que están en la misma función activada por una sola interrupción.
La condición de la izquierda es para el caso de los mangos y la derecha para las peras.
Estos son los pulsadores respectivos para el reinicio de cada banda, siendo
P1 para la banda de las fresas, P2 para los mangos, P3 para las peras y P4
para las manzanas.
Para los casos de fresa y manzana respectivamente el código es similar, tan solo cambia el pin
de reinicio, si en la interrupción, al momento de verificar no se cumple la condición que el
contador de cada fruta sea menor al número de frutas que se empaca se procede a detener la
banda y el conteo y mostrar el aviso “FULL”, como vimos anteriormente, y no se reinicia el
conteo y se borra el aviso a menos que se presione el respectivo pulsador de la banda.
Para el caso de los mangos y las peras esta condición se cumple por medio de if’s, si el
contador es mayor al numero de frutas que caben en cada caja respectivamente, se detiene el
conteo, la banda de llenado y me muestra el aviso “FULL” en la LCD, para reiniciarlo de
procede a presionar el respectivo pulsador y se reinicia la banda, el contador y borra la palabra
“FULL” de la LCD.
Conclusiones
Podríamos comparar el tema de las interrupciones con nuestra vida, ya que al fijarte una meta
te planteas objetivos y haces una evaluación de los pros y contras que se te puedan presentar
para seguir adelante y de presentarse varios percances debes evaluar cual seria el de mayor
prioridad que necesitaría tu atención o solución y de presentarse otro de mayor importancia
tendrías que dejar todo a un lado y resolverlo, o si crees que no es conveniente resolver uno a
la vez. Así mismo podemos plantear el tema de las interrupciones y su priorización o en dado
caso la falta de ella.
Al momento de diseñar un programa y con la finalidad de que sea mas autónomo, podemos
hacer uso de las interrupciones externas, ya que esta herramienta nos permitirá que este se
ejecute de manera más automática el proceso al no tener que estar indicándole que hacer a
cada momento al microcontrolador, ni cuando activarse, tan solo debemos indicarle las
prioridades con la que debe tomar en cuenta la interrupción que se active y especificarle que
hacer al momento de presentarse dicha interrupción. Tan bien nos presenta una gran
versatilidad, ya que no solo son las interrupciones externas activadas por los pines RB0, RB1
y RB2, las cuales utilizamos en esta práctica, sino que hay una gran variedad, de manera que
podemos adaptarlas a nuestras necesidades del programa.
Anexos
https://drive.google.com/drive/folders/1Jys6qfUMTbisuloU_2HhqUVqveAKrh9I?usp=sharin
g