Laboratorio N°3 Microprocesadores

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

1

ADC, EEPROM,
INTERRUPCIONES PIC 16F877a
Experiencia de Laboratorio N°3
MICROPROCESADOES
(Julio de 2021)
José Miguel Aramburú Hernández, Ismael Roberto Acevedo Pavez

su interior las tres principales unidades funcionales de una


Resumen - Se propone el estudio del microprocesador computadora: unidad central de procesamiento, memoria y
P16F877A, perteneciente a una subfamilia de los periféricos de entrada/salida.
microcontroladores PIC, fabricado por Microchip, atendiendo sus
características generales, entendiendo sus formatos y
configuraciones básicas y aplicando dichas características en la
Algunos microcontroladores pueden utilizar palabras de cuatro
solución de desafíos propuestos mediante la programación en bits y funcionan a velocidad de reloj con frecuencias tan bajas
ASSAMBLER (ensamblador). como 4 kHz, con un consumo de baja potencia (mW o micro
watts). Por lo general, tendrá la capacidad de mantenerse a la
espera de un evento como pulsar un botón o de otra
interrupción; así, el consumo de energía durante el estado de
I. OBJETIVOS reposo (reloj de la CPU y los periféricos de la mayoría) puede
ser solo de nano Watts, lo que hace que muchos de ellos sean
Desarrollar distintas aplicaciones utilizando los módulos de muy adecuados para aplicaciones con batería de larga duración.
conversión analógica digital, la memoria de datos no volátil Otros microcontroladores pueden servir para roles de
EEPROM y el sistema de interrupciones del microcontrolador rendimiento crítico, donde sea necesario actuar más como un
PIC16F877A. procesador digital de señal (DSP), con velocidades de reloj y
consumo de energía más altos. [2]
En el siguiente trabajo se desarrollará la respuesta del
II. INTRODUCCIÓN microcontrolador a distintas configuraciones de pulsador, desde
una entrada compuesta por relés, hasta una compuesta por u
Los microprocesadores y microcontroladores representan la teclado matricial 4x4.
maravilla del desarrollo de la tecnología electrónica en más de
medio siglo, los aparatos que los incorporan han cambiado la
forma de trabajar e investigar de la humanidad, en la historia El Microcontrolador PIC16F877a
ninguna herramienta creada por el hombre, tenía la capacidad
de crear otras y acelerar su evolución, en la actualidad muchos El microcontrolador PIC16F877A es un dispositivo
instrumentos, electrodomésticos y en general cualquier programable que se compone de una computadora digital, una
dispositivo electrónico utiliza alguno de estos dos componentes
unidad de memoria de datos, una unidad de memoria de
para optimizar su funcionamiento. [1]
programa y puertos de entrada/salida en un circuito integrado,
El microcontrolador funciona como un controlador de periféricos en un sistema
mínimo. El microcontrolador depende de una alimentación de
Como se explicó en trabajos anteriores, un microcontrolador al menos 5V y 0V en sus entradas de Vdd y Vss
(abreviado µC, UC o mCU) es un circuito integrado respectivamente para su operación, requiere de una señal de
programable, capaz de ejecutar las órdenes grabadas en su reloj que le indique la frecuencia de trabajo, está señal la
memoria. Está compuesto de varios bloques funcionales que introducimos a través de un oscilador de cristal de cuarzo, y una
cumplen una tarea específica. Un microcontrolador incluye en alimentación al pin MCLR, que es un pin de reset que activa al
2

microcontrolador. • Salidas del comparador accequibles.


El funcionamiento del microcontrolador está determinado por
un programa almacenado en su memoria Flash ROM y puede Descripción de los Pines.
programarse más de una vez para cambiar su estado y su
comportamiento, lo que lo convierte al microcontrolador en una La descripción de los pines depende del tipo de empaque, el
pieza esencial en el rápido desarrollo de aplicaciones PIC16F877a puede venir en las siguientes configuraciones:
electrónicas. [3] 𝐏𝐏𝐏𝐏𝐏𝐏𝐏𝐏 − 𝐏𝐏𝐏𝐏𝐏𝐏𝐏𝐏 − 𝐓𝐓𝐓𝐓𝐓𝐓𝐓𝐓 − 𝐐𝐐𝐐𝐐𝐐𝐐
Cabe destacar que la terminación “a” en el PIC16F877a indica
que el modelo tiene comparador lógico, y la “F” indica la
utilización de memoria flash.

Características del PIC16F877a Figura 1 ilustra las formas en las que puede venir empaquetado el
PIC16F877a.

• Velocidad de Operación DC - 20 MHz.


• Ciclo de instrucción DC - 20o ns. Para este caso, se usará el PIC16F877a con un empaquetado
• Set de Instrucciones 35. tipo PDIP, de 100 mils de separación entre pines y de 600 mils
• Toda las Instrucciones de 1 ciclo, excepción saltos de de ancho; esta variedad de micro, con 40 pines es el que
2 ciclos. comúnmente se usa en protoboards para proyectos.
• Memoria de Programa (FLASH) 8K x 14 words.
• Memoria de Datos 368 x 8 bytes.
• Memoria de EEPROM 256 x 8 bytes.
• Pin-Out compatible con otros MCU de 28 o 40/44 pin
grupos PIC16CXXX y PIC16FXXX

PERIFERICOS

• 3 TIMERS (Timer0,1,2)
• Timer0: 8 bit temporizador/contador con 8 bit
prescaler.
• Timer1: 16 bit temporizador/contador con prescaler
puede ser incrementado durante Sleep con clock
externo.
• Timer2: 8 bit temporizador/contador con 8 bit registro
de periodo prescaler y postscaler.
• 2 CCP (Capture/compare/PWM)
• Captura es de 16bit, máxima resolución es de 12.5ns
• Compare es de 16bit, máxima resolución es de 200ns
Figura 2 ilustra el PIC16F877a con sus pines.
• PWM con máxima resolución de 10 bit
• SSP (Sinchronous Serial Port)
Arquitectura Interna
• SPI (Modo Maestro), I2C (Modos: Maestro/Esclavo)
• USART/SCI (Universal Synchronous Asynchronous
El PIC16F877a es un procesador tipo RICS que es un
Receiver) con 9 bit de detección de dirección.
procesador de instrucciones reducidas, por su pequeño número
• PSP Puerto Paralelo Esclavo (Parallel Slave Port) de 8
bit con controles RD, WR y CS (40/44 pin). de instrucciones, además casi todas se realiza en la misma
cantidad de tiempo, posee unidades que trabajan en paralelo
• CAD (Conversor Análogo a Digital) de 10 bit, hasta 8
canales. conectadas por pipes o tuberías. Este procesador emplea una
arquitectura Harvard lo que significa que trabaja las zonas de
Módulo de Comparadores Análogos memoria de programa y datos en forma separada. [4]

• 2 comparadores análogos.
• Basado arquitectura Harvard.
• Programable Modulo de voltaje de referencia (Vref)
• 8 formas de configuración con entradas, salidas y
referencia.
3

Figura 3 ilustra la arquitectura Harvard para el PIC16F877a.

Puertos y Periféricos

Los pines pueden o no tener conectado un periférico de acuerdo


a los requerimientos u necesidades, e incluso pueden estar
conectado a más de uno o compartirlo.
Para la configuración de cada periférico se debe usar
correctamente los registros asociados en un procedimiento
secuencial, para el caso del PIC16F84a, contiene los siguientes
periféricos.
Tabla1

Figura 4 ilustra el diagrama de bloques para el PIC16F874-77.

En la parte intermedia encontramos el Status Reg. que es el


Es aconsejable usar solo un periférico por pin, debido a que se registro de estado encargado de anotar el estado actual del
puede comprometer la MCU y dañar los pines en caso de sistema, cada vez que se ejecuta una instrucción se llevan a cabo
confundir entradas con salidas, generando un cortocircuito y cambios dentro del PIC 16F877A como desborde, acarreo, etc.
dañando el mofset de salida del puerto. [5] Cada uno de esos eventos está asociado a un bit de este registro.

De forma general, el PIC16F877a es una pastilla integrada de Existe el Program Counter o contador de programa este
40 pines, de los cuales 33 pines conforman los cinco puertos registro indica la dirección de la instrucción a ejecutar. El
bidireccionales, mientras que los siete restantes se emplean en registro en cuestión no es necesariamente secuencial, esto es no
el circuito oscilador (2), alimentación (4) y el circuito de reset. se incrementa necesariamente de uno en uno ya que puede darse
[1] el caso en el que salte dependiendo si hay una instrucción de
bifurcación de por medio o puede haber alguna instrucción de
Diagrama de Bloques llamada a función y/o procedimiento. También tenemos el
bloque de la pila, cuya función es ser un buffer temporal en el
que se guarda el contador de programa cada vez que se suscita
una llamada a un procedimiento y/o función (incluyendo
interrupciones). Por tanto, el nivel de anidamiento es de hasta 8
llamadas. [4]

Organización de Memoria

Se distinguen dentro del PIC16F877a, tres tipos de memoria: la


memoria de programa, memoria de datos ram y la memoria
EEPROM de datos.

Memoria de datos: Posee cuatro bancos de memoria, es donde


se almacenan todos los registros propios del usuario y del
MCU, los cuales se dividen en:
4

GPR (General Purpose Registers): Los cuales corresponden a


los registros donde se almacenan los datos de usuario.
SFR (Special Function Registers): Asociados a los registros
propios del MCU, periféricos u puertos y funcionamiento
general del MCU; generan banderas, habilitación de
interrupciones, lectura y escritura de valores, etc. [5]

Memoria de Programa

En la memoria de programa se almacena el programa con el que


el MCU funcionará.

Figura 5 ilustra el mapa de registros para el PIC16F877a.

Memoria EEPROM Figura 6 ilustra el mapa de memoria de programa para el PIC16F877a.

Es una memoria de datos de usuario que tiene la particularidad El contador de programa PC de 13 bits, con 8192 posiciones
de no borrarse si falta la alimentación de voltaje. Por tanto, es (213 ) puede recorrer todo el mapa de memoria del programa,
muy útil en el momento de realizar tablas de datos que se van Cada posición puede alojar una instrucción, perteneciente a un
construyendo a medida que el programa va generando estos programa. El ancho de cada instrucción se denomina palabra
datos, de tal manera que se puedan guardar como parámetros de (word) que para este MCU es de 14 bits. [5]
calibración o funcionamiento del dispositivo. Los 8K de memoria de programa disponible están divididos en
No es posible acceder a estos datos mediante un 4 páginas de 2K cada una (0h–7FFh, 800h-FFFh, 1000h17FFh
direccionamiento, ya que están ubicados más allá de lo y 1800h-1FFFh). Esto es debido a que las instrucciones de salto
permitido, para acceder a ellos es necesario realizar un y llamada a subprograma permiten cargar sólo 11 bits en el PC
procedimiento. [5] (desplazamiento en 211 = 2K). Si se están ejecutando
instrucciones secuencialmente, el contador de programa pasará
de una página a otra sin necesidad de intervención por parte del
usuario o programador.
Para saltar entre páginas de la memoria de programa los 2 bits
más altos del PC deben modificarse. Esto se realiza escribiendo
en el registro PCLATH (es un registro situado en la memoria
de datos). [6]

El LCD
Una LCD es una pantalla delgada y plana formada por un
5

número de píxeles en color o monocromos colocados delante


de una fuente de luz o reflectora. A menudo se utiliza en pilas
o dispositivos electrónicos, ya que utiliza cantidades muy
pequeñas de energía eléctrica.

Estos dispositivos se basan en el empleo de cristales líquidos


(LC). Son materiales que no tienen un punto de fusión definido.
Es decir, por debajo de un valor característico de la temperatura
fluyen como los líquidos, pero guardando las moléculas entre sí
una ordenación como la que se da en los cristales. Sus
propiedades se ven afectadas por las fuerzas mecánicas, los
campos eléctricos o magnéticos, el entorno químico o el nivel
térmico. [7]

Figura 7 ilustra el LCD lm016L utilizar.

Los LCD que se utilizan con más frecuencia en el mercado hoy


en día son los LCD de 1 línea, 2 líneas o 4 líneas que tienen solo
1 controlador y admiten como máximo 80 caracteres, mientras
La ROM del generador de caracteres genera patrones de
que los LCD que admiten más de 80 caracteres utilizan 2
caracteres de 5 x 8 puntos o 5 x 10 puntos a partir de códigos
controladores HD44780.
de caracteres de 8 bits. Puede generar 208 patrones de
La mayoría de las pantallas LCD con 1 controlador tienen 14
caracteres de 5 x 8 puntos y 32 patrones de caracteres de 5 x 10
pines y las pantallas LCD con 2 controladores tienen 16 pines
puntos. Los patrones de caracteres definidos por el usuario
(dos pines son adicionales en ambos para las conexiones LED
también están disponibles mediante ROM programada con
de luz de fondo). La descripción del pin se muestra en la
máscara. [8]
siguiente tabla.
Tabla 2
DDRAM y CGROM

La memoria DDRAM(Data Display RAM): corresponde a una


zona de memoria donde se almacenan los caracteres que se van
a representar en pantalla. Es decir, es la memoria donde se
almacenan los caracteres a mostrar con su correspondiente
posición.

La memoria CGROM es una memoria interna donde se


almacena una tabla con los caracteres que podemos visualizar
en el lcd. La memoria CGRAM (Character Generator RAM):
en ella se pueden almacenar nuestros propios caracteres. [9]
6

El módulo convertidor Análogo Digital (A/D) del PIC 16F877


tiene 8 canales de entrada. La conversión de la señal analógica
aplicada (a uno de los canales) se plasma en número binario de
10 dígitos. El módulo A/D posee voltajes de referencia que
pueden ser seleccionados para emplear las tensiones VDD, VSS
del microcontrolador o puede emplear tensiones aplicadas a los
pines RA2 o RA3 (incluso es posible establecer combinaciones
de los anteriores valores).

Para operar el módulo ADC contamos con 4 registros:


• Registro de resultado de byte alto de la conversión A/D
(ADRESH). Banco 0, 0x1E.
• Registro de resultado de byte bajo de la conversión A/D
(ADRESL). Banco 1, 0x9E.
• Registro 0 de control del módulo A/D (ADCON0).
Banco 0, 0x1F.
• Registro 1 de control del módulo A/D (ADCON1).
Banco 1, 0x9F.

El detalle del registro ADCON0 se muestra a continuación:

Figura 8 ilustra los caracteres que se pueden visualizar, 192 caracteres.

Conversor Análogo Digital ADC


Figura 9 ilustra el detalle del registro ADCON0.
La conversión analógica-digital consiste en la transcripción de
señales analógicas en señal digital, con el propósito de facilitar
su procesamiento (codificación, compresión, etcétera) y hacer
la señal resultante (digital) más inmune al ruido y otras
interferencias a las que son más sensibles las señales
analógicas. [10]
Un convertidor análogo digital tiene como entrada un nivel de
voltaje (valor analógico) y produce en su salida un número
binario de n bits proporcional al nivel de la entrada (valor
digital). Los convertidores de señal análogo a digital abrevian
ADC o A/D.
Uno de los parámetros que definen al A/D es la resolución como
la mínima variación de voltaje en la entrada que produce
cambio del valor digital en la salida. La resolución del
conversor queda determinada por la cantidad de bits que
representan el resultado de la conversión. Figura 10 ilustra el detalle para la configuración de pines del registro
ADCON1.

𝑉𝑉𝑟𝑟𝑟𝑟𝑟𝑟+ − 𝑉𝑉𝑟𝑟𝑟𝑟𝑟𝑟−
𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝐴𝐴𝐴𝐴𝐴𝐴 = El registro ADCON1 configura las funciones de los pines de
2𝑛𝑛 − 1 entrada al módulo. Como se aprecia en la figura anterior, se
puede configurar los pines del puerto A como entradas
También se tiene que:
analógicas inclusive la línea RA3 puede funcionar como el
(2𝑛𝑛 − 1) ∙ 𝑉𝑉𝑖𝑖𝑖𝑖 voltaje de referencia.
𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 = Los registros ADRESH: ADRESL contienen el resultado de la
𝑉𝑉𝑟𝑟𝑟𝑟𝑟𝑟+ conversión (10 bits). Cuando se ha completado una conversión
Descripción
7

el resultado es almacenado en ADRESH: ADRESL y además


el bit GO/-DONE (registro ADCON bit 2) se pone a 0-lógico y 2. Comienzo de la conversión
el bit ADIF (registro PIR1 bit 7) se pone como 1-lógico. El • GO/-DONE=1-lógico (en el registro ADCON0)
registro PIR1 ocupa la posición 0x0C del banco 0.
3. Esperar a que la conversión se complete. Para saber si la
Diagrama de Bloques del módulo A/D conversión termino podemos:
• Revisar el bit GO/-DONE esperando que sea de nuevo 0
-lógico.
• esperar al flag de ADIF sea 1-lógico (puede emplearse
como interrupción).
4. Leer el resultado del A/D en el par de registros (ADRESH:
ADRESL). No debemos olvidar colocar el bit ADIF a 0-lógico
(si se requiere)
5. Para la siguiente conversión, regrese al paso 1 o paso 2
dependiendo si solo se usa uno o más canales.

Para el determinar el mínimo de tiempo de adquisición


requerido, usamos las expresiones:

Figura 10 ilustra el diagrama de bloques del módulo A/D.

Figura 11 ilustra las expresiones para la determinación del tiempo de


adquisición.
Después que el módulo A/D ha sido configurado, es necesario
esperar un periodo de tiempo para que la señal sea adquirida
(antes de las conversiones empiecen). Cada uno de los canales Selección de Clock de conversión análogo digital
de entrada tiene su correspondiente bit de configuración en los
registros TRIS y estos han de ser puestos como entradas. Otro parámetro importante el tiempo de conversión de A/D por
BIT (definida como TAD). La conversión A/D requiere un
Una vez que el periodo de adquisición ha terminado la mínimo de 12 TAD por 10 bits de conversión, La fuente para el
conversión A/D puede empezar. Los siguientes pasos muestran clock en la conversión A/D se selecciona por software. Hay 7
la secuencia de uso: posibles valores para la selección del TAD:
1. Configure el módulo A/D:
• Configurar los pines de entrada de los canales analógicos
a usar. Configure los voltajes de referencia. (en el • 2Tosc
registro ADCON1) • 4Tosc
• Seleccione el canal de entrada al módulo A/D (en el • 8Tosc
registro ADCON0) • 16Tosc
• Seleccione el clock de conversión A/D (en el registro • 32Tosc
ADCON0) • 64Tosc
• Ponga a funcionar el módulo A/D (en el registro
ADCON0) Oscilador RC interno que tiene el módulo A/D (crea un retardo
1. Configure la interrupción del A/D si lo desea: de 2us a 6 us).
• ADIF=0 -lógico (bit que indica si se produjo una Para el correcto funcionamiento del módulo el clock de
conversión) conversión debe ser seleccionado para asegurar un TAD de
• ADIE=1-lógico (habilitador de interrupción del módulo 1.6 𝑢𝑢𝑢𝑢 como mínimo.
analógico)
Configuración de pines para forma analógica
• PEIE=1 lógico (habilitador de interrupción de
periféricos)
Los registros ADCON1 y TRIS controlan la operación de los
• GIE=1-lógico (Habilitador general de interrupciones)
pines de los canales A/D. Los pines que se empleen como
entradas deben ser configurados en los registros TRIS como 1-
1. Espere por el tiempo de adquisición (es el tiempo que se
lógico. Si en el registro TRIS se coloca a 0-lógico (como línea
demora en trabajar el bloque de sampling and hold).
de salida) el módulo A/D convertirá el voltaje presente a la
8

salida del pin. La operación de conversión del A/D es III. DESARROLLO EXPERIMENTAL
independiente del estado de los bits CHS2:CHS0 y de los bits
Se presentan una serie de desafíos de programación en
de los registros TRIS. assembler (ensamblador), se solicita desarrollar distintas
aplicaciones utilizando una interfaz hombre-maquina (HMI)
Sobre la conversión análogo digital y el GO/-DONE implementándolo en el PIC16F877a.

Si iniciamos una conversión y colocamos a 0-lógico el bit GO/-


DONE conseguimos abortar la conversión A/D que se esté
llevando a cabo en ese momento. El resultado de la conversión
no aparecerá en los registros ADRESH: ADRESL y se
mantendrá el último valor convertido.
Después que la conversión A/D es abortada, la siguiente
adquisición en el canal seleccionado empieza automáticamente.
El bit GO/-DONE puede ser colocado a 1 para empezar la
conversión. Figura.14 ilustra el PIC16F877a con la configuración de elementos para la
experiencia 1.

Experiencia N°1

Para la experiencia N°1, usando el diagrama de la figura 14, se


debe mostrar la ultima lectura de la señal analógica escalda,
almacenada en la EPROM, durante 5[s]. Mediante la interfaz
HMI, se debe poder seleccionar la lectura de una de las señales
Figura 12 ilustra los ciclos de conversión A/D. analógicas de entrada; también, mediante el teclado, se debe
poder ingresar un valor mínimo de escalamiento, entre 0 y 9 y
luego presionar la tecla ENTER (letra E), igualmente, se debe
Como se aprecia en la figura después que el bit GO es colocado poder digitar un valor máximo de escalamiento, entre 0 y 9 y
a 1-lógico comienza la conversión y al inicio hay que presionar la tecla ENTER (letra E)
desconectar el condensador lo cual demanda como máximo 1
TAD, luego vienen los 10TAD correspondientes a los 10 bits Para ello, primero se crea un bloque configuración, en el cual
del A/D y se necesita un TAD más para depositar el resultado se habilita la entrada analógica, accediendo al banco de
en los registros ADRES, colocar el bit GO/-DONE de nuevo a memoria 0 mediante bsf STATUS, RP0 y moviendo un literal
0-lógico y el bit ADIF a 1-lógico. 0x00 al registro ADCON1, luego, fuera del banco de memoria
0, se configuran para todos los bits del ADCON de la siguiente
manera:
Almacenamiento de la conversión El bit 7 se deja en cero, mediante bcf ADCON0,7, así se
justifica a la izquierda, el bit 6 se configuró en 1 mediante bsf
El par de registros ADRESH: ADRESL almacenan el resultado ADCON0,6.
de la conversión A/D. Este par de registros ocupan 16 bits. EL El canal CH se configura en 000 para AN0 y 001 para AN,
debido a que se usaran dos conversores análogo-digitales,
módulo A/D tiene la flexibilidad de colocar el resultado
dejando el primer configurado en cero, dejando el bit 3 variable.
justificado a la derecha o a la izquierda de esos 16 bits
(formato). El bit que selecciona el formato es el ADFM
(registro ADCON1 bit 7).

Figura 13 ilustra la justificación A/D.


Figura 15 ilustra el código para el bloque configuración.

Finalmente, para este bloque, se llama a las configuraciones de


LCD y teclado mediante:
9

Figura 16 ilustra el código para la configuración de LCD y


teclado.

Para que el ultimo valor se almacene en la EEPROM y sea


leído, ambas salidas se almacenarán en la dirección 0x00 de la
EEPROM mediante el registro EEADR.

Figura 17 ilustra parte del código para el almacenamiento en


la dirección cero de la EPROM.

Luego se muestra en la pantalla mediante un llamado a la tabla


de LCD y a la librería LCD_4bits, después de mostrar el
mensaje de bienvenida al inicio del programa y de realizar una
conversión de datos binarios a decimal y terminando con un
llamado a un retardo de 5 segundos, realizando un llamado a la
librería Retardo.

Figura 19 ilustra la librería Mensajes, con el mensaje de


bienvenida.

Luego como se comentó anteriormente, lee los valores


almacenados en la EEPROM, leyendo cada valor binario,
transformándolo a decimal y llamando a la subrutina
LCD_CARCATER para mostrar en display el valor leído, luego
llama a retardo de 2 segundos y finalmente entra al bucle de
“menu1” a la espera de instrucciones.

Figura 20 ilustra el código para el bucle menu1.

Figura 18 ilustra el código para leer los datos almacenados en En este bucle, se llamó a la subrutina “menu2, la cual pertenece
la EEPROM. a la librería “Menú”, donde se encuentra el menú de selección
de señal a tratar, carácter por carácter, “SELECCIÓN”
Para seleccionar la señal analógica de entrada, se trabaja con un 1.SENAL AN0”, “2.SENAL AN1.
menú ocupado en experiencias y evaluaciones anteriores, la
máscara permite discernir mediante comparadores si el valor
ingresado corresponde a los disponibles en el menú de selección
de señal a tratar; cuando se ejecuta la simulación, llama a la
subrutina “bienvenido” perteneciente a la librería mensajes, la
cual contiene los caracteres del mensaje, los que se mostraran
en el display.
10

Figura 21 ilustra el código de la librería Menú con el mensaje Figura 23 ilustra el código para la subrutina “Ingreso_limini”.
de la selección de señales.
Finaliza con el llamado a la subrutina “PRES_ENT” la cual
Al seleccionar una de las opciones, por ejemplo, la opción 1, permite, mediante comparadores, revisar si efectivamente se
salta a la subrutina “convADC_portAN0”, en la cual presionó la letra E, cerrar esa rutina y entrar a la de ingreso de
inmediatamente llama a la subrutina “Digitos1”, perteneciente limite superior, siendo esta, análoga a la primera.
a la librería “Mensajes”, ésta subrutina contiene los caracteres Luego de digitar y almacenar los limites superior e inferior
para “LIMITE INFERIOR”, mensaje que se muestra en el LCD. (LIMSUP, LIMINF), estos se almacenan en “DLIM”, para
luego, volver a llamar a “PRES_ENT”.

Figura 22 ilustra la librería Mensajes, con los caracteres para


“1.LIMITE INFERIOR”.
Figura 24 ilustra el código para la subrutina “Ingreso_limax2”.
Al digitar el limite inferior, este se almacena en “NUMLIM1”,
Luego de esto, salta a la subrutina “lectura01” y el programa
se le suma 0x30 y este resultado de suma, se almacena en el
espera que se realice la lectura del conversor análogo digital,
acumulador, llamando a LCD_CARACTER para visualizar el
donde el valor ingresado se almacena en la variable AUX y pasa
valor ingresado en el LCD. Posteriormente, al valor de limite
a la subrutina “Escalado”.
almacenado en “NUMLIM1” se amplifica por 10, llamando a
las subrutinas de operaciones y se almacena en “LIMINF” para
su uso en el escalamiento.

Figura 25 ilustra el código para la subrutina “espera”.


11

Utilizando el diagrama de la figura 28, se debe implementar un


En la subrutina “Escalado”, el valor almacenado en AUX se bus de control de cuatro líneas utilizando pulsadores, los cuales
procesa siguiendo: definirán el comportamiento de las ocho salidas digitales
implementadas en el PORTD, según la siguiente tabla.
255
𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 = Tabla 1
𝐴𝐴𝐴𝐴𝐴𝐴
𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷
𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸 =
𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹

Donde el 255 corresponde al valor máximo de la resolución,


ADC es la señal que se detecta por AN0 o AN1. La El sistema deberá reaccionar en forma inmediata al presionar
programación permite almacenar la ADC como divisor y la cualquier pulsador del bus de control (interrupción de cambio
resolución en el numerador; al pasar a las rutinas de de estado del PORTB).
multiplicación, ésta arroja el resultado en parte alta y parte baja El INTERRUPTOR (LOGIC STATE) P0 conectado a la
del número (Result_H, Result_L), se les suma 0x01 y se pasa a interrupción externa deberá realizar lo siguiente, al detectar:
(Dividendo_H, Dividendo_L).
Flanco Ascendente: Cambiar la temporización de la rotación
en la salida: (si es 1 [s] cambiar a 2 [s], y si la temporización
actual es 2 [s] cambiar a 1 [s]).

Flanco Descendente: Cambiar la cantidad de BITS de rotación


en la salida: (si es 1 BIT cambiar a 2 BITS, y si la cantidad de
bits actual es 2 BITS cambiar a 1 BIT)

Además, los tiempos de rotación se deben realizar


exclusivamente utilizando la interrupción del Timer disponible
en el microcontrolador.

Para que el sistema reaccione de forma inmediata al presionar


cualquier pulsador del bus de control y cumpla los requisitos de
la tabla 1; se inicia en el cuerpo principal de programación,
accediendo al banco cero de memoria mediante bsf
STATUS,RP0, luego la rutina “principal”, en la cual se limpia
el puerto C mediante clrf TRISD, definiéndolo como salida, se
vuelve del banco cero y se limpia el puerto de salida D mediante
clrf PORTD, luego se dan los permisos particulares y generales
para la interrupción RB mediante bsf INTCON,RBIE y bsf
INTCON,GIE, inmediatamente se limpia el flag RBIF.

Figura 26 ilustra el código para la subrutina “Escalado”.

llamamos a la subrutina LED7A y movemos el valor del


registro al puerto D mediante movwf PORTD, cerrando el loop.

Experiencia N°2

Figura 28 ilustra el código para la rutina “principal”.

Luego, en ORG 4 se cargan las interrupciones, llamándose a la


etiqueta de cambio de estado “nibblePB”.

Figura.27 ilustra el PIC16F877a con la configuración de elementos para la


experiencia 2.
12

La última restricción es la interrupción, en cada condición de la


tabla 1, la cual se debe realizar exclusivamente con la
interrupción del timer, para ello, se ocupó el timer 0, agregando
Figura 29 ilustra el código para la interrupción. líneas de programación a la rutina “principal”, donde el timer 0
se configuró de la siguiente manera:
La subrutina “nibblePB” se desarrolla de la siguiente manera,
se configura un selector de acción que discrimine entre De acuerdo con el datasheet del micro 16F877A, en
pulsadores de acuerdo al valor hexadecimal formado con ellos. OPTION_REG, en el bit 7 correspondiente a RBPU el cual
corresponde a las resistencias push up del PORTB, las que no
Primero se habilita la interrupción por cambio de estados del se ocupan, por lo que se ponen en 1, el INTEDG se configuro
puerto B, mediante un llamamiento de escritura lectura de este en flanco de subida, dejándolo en 1, el T0SE no se ocupará, el
puerto mediante movf PORTB,0 , esto también permite PSA se habilita para asignar un preescalador, para este caso se
detectar la pulsación, luego mediante andlw 0xF0, se enmascara eligió el 256 correspondiente a 111, por lo que P2S, PS1 y PS0
para quitar todo lo no necesario del nibble, se almacena el dato quedan en 1, como se observa en la figura N°XX.
en una variable AUX y se compara mediante btfss, si el
pulsador detecta un 0x10, salta a la rutina “bit4PB”, la cual
permite rotar un bit a la derecha del PORTD.

Figura 30 ilustra el código para la subrutina “nibblePB”.

Al finalizar la rutina “bit4PB”, se limpia el flag mediante bcf


INTCON,RBIF, sale de la interrupción y vuelve a la rutina
“bit4PB”, desde e lugar de donde salió; si no detecta el 0x10 o
un numero mayor, salta a la bandera “et1” donde se compara
con 0x20; si se cumple, realiza la misma rutina anterior, para
cumplir la segunda condición que es rotar a la izquierda un bit
del PORTD con 1 segundo de temporización.
Figura 33 ilustra el código para la subrutina “principal”.

Con el TMR0configurado, se calcula el retardo, para 50[ms],


para una frecuencia de 4[MHz], con el prescaler de 256; el valor
de TMR0responde a la siguiente expresión:

𝑡𝑡 ∙ 𝑓𝑓
Figura 31 ilustra el código para la subrutina “et1”. 𝑇𝑇𝑇𝑇𝑇𝑇0 = 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 −
4 ∙ 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝
En caso contrario, salta a la bandera “et2”, donde se compara
con el 0x40 ya que, si es mayor, se cumple la última condición, Reemplazando los valores se obtiene:
luego de esto salta a las interrupciones. 𝑇𝑇𝑇𝑇𝑇𝑇0 = 60.68 ≈ 61 = 3𝐷𝐷ℎ

Por lo que los valores de TMR0 estarán entre:


0 ≥ 𝑇𝑇𝑇𝑇𝑇𝑇0 ≥ 255

Se realiza una rutina para 50[ms], llamada “Retardo50ms”, en


la cual, primero se limpia el flag de TMR0 mediante bcf
INTCON,TMR0IF, luego se carga el 61 (3Dh) en el TMR0 y se
hace un loop de comprobación, hasta que se desborda e flag del
Figura 32 ilustra el código para la subrutina “et2”.
TMR0, si se desborda, el timer alcanzó el valor de 3Dh.
13

II.B. Simulación de Modelos

Luego de compilar el código ensamblador usando el software


MPLAB, y su implementación en el software de simulación
Proteus, se obtiene lo siguiente:

Simulación Experiencia 1

Figura 34 ilustra el código para la subrutina “Retardo50ms” y Selección de señal AN0 y escalamiento.
“comprobar”.

Para el retardo de 1[s] se hace una rutina a parte, la que


configura un bucle que da 20 vueltas.

Se realizaron cambios en la rutina “principal”, comentando la


línea del binario que configuraba “OPTION_REG”, por una
configuración pin a pin, eliminando el bit 6 que configuraba el
flanco ascendente-descendente.

Figura.36 Simulación del circuito para la experiencia 1.

Selección de señal AN1 y escalamiento.

Figura.37 Simulación del circuito para la experiencia 1.

Simulación Experiencia 2

Resultado inmediato en PORTD.


Figura 35 ilustra el código para la subrutina “principal”.

Con esta modificación, para asegurar que el timer funcione en


flanco de subida y de bajada, cuando se habilita la interrupción,
se enciende la opción de reacción de subida o bajada.

II.A. Análisis Teórico

Figura.38 Simulación del circuito para la experiencia 2.


14

Flanco ascendente, y descendente 1 bit. temporización.


Al seleccionar P3, se produce un cambio efectivo en la rotación
del bit, en este caso de dos bits, hacia la derecha, viajando hacia
el otro extremo con una temporización de 2[s]; al presionar el
P4, los dos bits cambian de dirección de viaje, hacia la
izquierda, con el mismo temporizador, de esta manera se
comprobó la respuesta inmediata dados los requerimientos de
la tabla 1.
Para el video de la figura 39, al ejecutar y presionar el P1, se ve
el bit en movimiento hacia la derecha con temporización de
1[s], inmediatamente, al presionar el P0, cambia la
temporización, pasando de 1[s] a 2[s] (flanco ascendente).
Figura.39 Video de la simulación de la experiencia 2. Al volver a presionar P0 (flanco descendiente), el bit unitario,
cambia a 2 bits, moviéndose en la misma dirección, con una
temporización de 1[s].
Flanco descendente 2 bit. Para el video de la figura 40, se observó que, al ejecutar, se
presionó P3, lo que efectivamente genera un doble bit,
moviéndose hacia la derecha con una temporización de 1[s];
luego al presionar P0 (flanco descendente), el bit doble cambio
a un solo bit, aumentando su temporización de 1 a 2[s]

Figura.40 Video de la simulación de la experiencia 2.

III. Análisis de Resultados

Simulación experiencia 1: En esta simulación se observó en


los videos de las figuras 36 y 37, que al ejecutar, efectivamente
IV. CONCLUSIONES
se muestra el mensaje de bienvenida, luego durante 5[s] se
muestra la última señal analógica medida, luego de 5[s] en el En primera instancia se puede decir que los
LCD se muestra bel mensaje de selección (menú) para microprocesadores son herramientas poderosas que con un set
seleccionar la señal AN0 o AN1, posteriormente, se muestra un limitado de instrucciones permiten realizar operaciones
nuevo mensaje que pide ingresar el límite inferior y superior, complejas, como retardos, controlar botoneras o pantallas y
pidiendo a la vez presionar la tecla E para ENTER, finalmente realizar operaciones aritméticas. Las interrupciones PIC son
luego del ingreso del límite superior, se muestra correctamente desviaciones de flujo de control del programa originadas
el mensaje “valor medido: xx “, valor que varía si se interactúa asincrónicamente por diversos sucesos que no dependen del
con el potenciómetro RV1 u RV2, dependiendo de la señal programador, es decir, ocurren en cualquier momento.
seleccionada.
Si se vuelve a simular, se visualiza en el LCD la última Las interrupciones PIC ocurren por sucesos externos como la
medición de señal guardada en la EEPROM, durante 5[s]. generación de una interrupción por flanco PIC, una interrupción
externa PIC cambiando el nivel en un PIN del microcontrolador
Simulación 2: Para esta simulación, se observó que: o eventos internos tales como el desbordamiento de un
contador, terminación del conversor análogo a digital, entre
Para el video de la figura 38, al ejecutar y seleccionar P1, otras.
efectivamente se cumple la rotación de bits a la derecha
mostrando el cambio lógico en cada pin del puerto D, con una El primer experimento permite mostrar que los micros se
temporización de 1[s], al terminar el viaje del bit de derecha a pueden configurar de forma efectiva, dado requerimientos
izquierda, al presionar el P2, la dirección de rotación cambia específicos, en este caso, para captar una señal analógica y
hacia la izquierda hasta llegar al otro extremo, con la misma mediante características propias del micro, capturar esa señal
15

analógica y transformarla a una versión digital de la misma, [8 Embeddedcenter, «Embeddedcenter Innovation of


pudiendo elegir entre la captación de una señal u otra, ] Engineers,» 2013. [En línea]. Available:
visualizando el resultado casi en tiempo real, lo que tiene https://embeddedcenter.wordpress.com/ece-study-
múltiples usos, como la implementación de un termómetro centre/display-module/lcd-16x2-lm016l/. [Último acceso:
mediante un sensor conectado ala entrada análoga, y su 15 05 2021].
posterior conversión y visualización de dicha temperatura en la [9 TodoElectrodo, «http://todoelectrodo.blogspot.com/,» 10
pantalla LCD. ] 02 2013. [En línea]. Available:
http://todoelectrodo.blogspot.com/2013/02/lcd-16x2.html.
El segundo experimento aumenta la complejidad ya que se pide [Último acceso: 15 05 2021].
emplear las interrupciones para controlar el funcionamiento del
micro, en este caso, del comportamiento de PORTD, variando
el cambio lógico de sus pines y del tiempo entre estas
variaciones, logrando así influir en el proceder del micro de una
forma análoga a las antes estudiadas en este curso.
Las interrupciones constituyen el mecanismo más importante
para la conexión del microcontrolador con el exterior ya que
sincroniza la ejecución de programas con los acontecimientos
externos. Esto es muy útil, por ejemplo, para el manejo de
dispositivos de entrada que requieren de una atención
inmediata, tales como detección de pulsos externos,
recepción de datos, activación de pulsadores entre otros.

PLICACIONES

V. REFERENCIAS

[1 H. U. Villamil Gonzales, «Modulo de Microcontroladores


] & Microprocesadores,» Programa de Ingenieria
Electronica, p. 9, 2009.
[2 E. f. L. Palacios Remiro Lopez, Microcontrolador
] PIC16F84 Desarrollo de proyectos, Mexico DF:
Alfaomega, 2004.
[3 C. H. Coutiño Ruiz, «MV Electrónica,» 2018. [En línea].
] Available:
https://mvelectronica.com/products/PIC16F877A. [Último
acceso: 10 05 2021].
[4 M. Delgado, «https://www.blogger.com/,» 26 06 2014.
] [En línea]. Available:
https://mikitronic.blogspot.com/2014/06/el-
microcontrolador-consta-de-un.html. [Último acceso: 10
05 2021].
[5 D. Salvatierra Figueroa, Microcontroladores PIC16F877A
] y PIC16F887, C.V., México: Alfaomega, 2012.
[6 A. Martín Pernía, «https://www.unioviedo.es/,» 04 12
] 2002. [En línea]. Available:
https://www.unioviedo.es/ate/alberto/TEMA2-
Memoria.pdf. [Último acceso: 10 05 2021].
[7 Fundacion Descubre; , Andalucía, «fundaciondescubre,»
] [En línea]. Available:
https://clickmica.fundaciondescubre.es/conoce/descubrimi
entos/pantallas-lcd/. [Último acceso: 15 05 2021].

ANEXO
Diagramas de Flujo
16

Diagrama 1
17

Figura.13 Diagrama de flujo para la experiencia 1


18

Diagrama 2

Figura.14 Diagrama de flujo para la experiencia 2


19

Diagrama 2.1

Librería Teclado4por4

Figura.15 Diagrama de flujo para la librería Teclado4por4 experiencia 2

Diagrama 3
20

Figura.16 Diagrama de flujo para la librería Teclado4por4 experiencia 3

También podría gustarte