Está en la página 1de 16

Benemérita Universidad

Autónoma de Puebla.

Facultad de Ciencias de la
Electrónica.

Carreras:
Electrónica
Mecatrónica

Asignatura:
Desarrollo de Sistemas basados en Microcontroladores y DSPS.

Práctica 2: ​Efectos de Leds PIC18F4550

Equipo 2.

Integrantes:
Cueto Cruz Juan Antonio 201537370
Esparza Solis Javier Alejandro 201504642
Flores Martínez Juan Carlos 201441612
Fuentes Luna Jesús Antonio 201441702
González López Sergio 201410891

Profesor:
Nicolás Quiroz Hernández

Puebla, Puebla a 27 de Septiembre de 2018


Índice

1) Objetivo

2) Objetivos particulares

3) Marco teórico

4) Material y equipo requerido

5) Diagrama de flujo

6) Procedimiento y desarrollo de la práctica

6.1) Simulación

6.2) Implementación

7) Resultados

8) Conclusiones

9) Referencias

1
1) Objetivo

Los microcontroladores pueden servir para muchas tareas y aplicaciones, para ello
se debe realizar un código en el cual se le comunique a al microcontrolador que en
el caso de las prácticas realizadas en el curso se utiliza en específico el
PIC18F4550 además opcionalmente se puede crear un diagrama de flujo el cual
ayude a estructura de manera correcta el código que se desea elaborar para que se
realice la labor deseada cabe señalar que para ello cada tipo de microcontrolador
está diseñado para laborar de diferente manera y debido a ello sus aplicaciones,
tareas y funciones, serán diversas así como el conjunto de instrucciones para que el
microcontrolador funcione como el usuario desee.

Una de las funcionalidades que tienen los microcontroladores es que permiten crear
retardos que tienen una finalidad específica como hacer un patrón en el encendido
de LEDs dicho lo anterior en ésta práctica podemos observar y tener los siguientes
objetivos generales:

2) Objetivos particulares.

● Identificar las características del PIC18F4550 los cuales permitirán al


usuario crear retardos para el encendido de LEDs.
● Manejar el software MPLAB para crear un proyecto y simular. Analizar
el proceso para generar retardos de tiempo en un uC.
● Realizar un programa en lenguaje ensamblador para controlar el
encendido de 8 leds conectados al puerto D.
● Utilizar un pulsador (PE0) para controlar el sentido de encendido
(izquierda-derecha o derecha-izquierda), si se presiona el botón el
encendido es de derecha a izquierda sino no se presiona es en
sentido contrario. Debe encender solo un led en orden,
aproximadamente cada 300 ms.
● Realizar simulación en MPLAB. Realizar la simulación en el software
Proteus del circuito completo.
● Programar el microcontrolador (Pickit2, ICD2, Master-Pro, etc.) para
obtener y al mismo tiempo poder observar de manera “gráfica” los
resultados en ésta ocasión se podría observar el flujo y encendido de 8 LEDs
prendiendo en diferentes sentidos.
● Aprender a utilizar en general y codificar algoritmos de retraso para
microcontroladores para cuando el usuario desee utilizar estas funciones.

2
3) Marco teórico.

En éste apartado se analizan las instrucciones utilizadas para la elaboración de el


programa incluyendo los ciclos, retardos y todo aquello que puede ser
implementado (y en este caso se implementó) en un programa.

BCF.
Esta instrucción proviene de las siglas en inglés que significan Bit Clear File las
cuales describen el comportamiento de la labora que ésta instrucción tiene ya que
ésta instrucción es la que limpiará el bit del registro que se especifique o en otras
palabras el bit se pone en “0”.
La instrucción Bit Clear File solo utiliza un ciclo de instrucción en su ejecución y
ocupa palabras de 16 bits.

BRA.
La instrucción BRA está definida como un salto relativo y está limitado a un rango de
aproximadamente 2K es una instrucción con tamaño de palabra de 16 bits y además
ésta instrucción al ser ejecutada realiza dos ciclos de instrucción.

BSF.
Se puede decir que ésta instrucción realiza la acción inversa de BCF ya que las
siglas de ésta instrucción quieren decir Bit Set File y como es esperado es la
instrucción que pone en “1” el bit del registro especificado.
Ésta instrucción utiliza palabras de 16 bits y un ciclo de instrucción al igual que BCF.

BTG.
La instrucción BTG es para conmutar al bit como su nombre indica, significa bit
toggle y por ello mismo es la instrucción utilizada cuando se desea cambiar entre 0 y
1 es decir ésta instrucción invierte el valor del registro, utiliza un tamaño de palabra
de 16 bits y se ejecuta en un ciclo.

CALL.
La instrucción CALL como su nombre lo indica servirá para llamar a una función,
ésta instrucción también realiza un salto en un rango específico del código utiliza 2
palabras de 16 bits.

CLRF.
Ésta instrucción pondrá a cero todo un “file” que se le indique y utiliza una palabra
de 16 bits.

3
CPFSEQ.
Es una instrucción que puede ser utilizada para realizar comparaciones de un file
elegido con WREG ésta instrucción puede ser utilizada para realizar saltos de
instrucción si la comparación resulta ser igual utiliza palabra de 16 bits.

DECFSZ.
Utilizada para decrementar el valor en un file especificado saltará cuando el valor de
dicho file sea cero y de ésta manera podrá seguir a la siguiente instrucción y utiliza
un tamaño de palabra de 16 bits.

INCF.
Es la instrucción que se encargará de incrementar a un file que el usuario indique y
usa palabras de 16 bits.

MOVF.
Se va a utilizar cuando se desee mover un file a WREG además, el resultado se
guardará en WREG si d es cero usa palabras de 16 bits.

MOVLW.
Mueve un número o como se dice en lenguaje de programador una literal a WREG
la “k” se establece como valor máximo.

MOVWF.
Se encargará de mover el dato que se encuentre presente en WREG y
posteriormente lo almacene en el file que se le indique trabaja con palabras de 16
bits.

NOP.
Es una instrucción que no realizará ningún tipo de operación sin embargo puede
resultar muy útil ya que permitirá que se ocupe un ciclo de instrucción si se usa de
manera adecuada permite crear los retardos de forma correcta.

RETURN.
Será la instrucción que se encargue de regresar de una subrutina en el código o una
función la cual fue llamado por un CALL, ésta instrucción opera con dos ciclos de
instrucción y un tamaño de palabra de 16 bits.

RRNCF.
Servirá para rotar a la derecha un file que se le indique al microcontrolador en el
código el resultado se almacenará en WREG si el puerto d es cero tiene palabra de
16 bits.

4
SETF.
Cómo BSF pero pero no para un bit, más bien para un file, la instrucción SETF
pondrá un uno en el file que le sea indicado usa palabras de 16 bits.

SUBWF.
Ésta instrucción se encargará de restar lo que tenga almacenado WREG de un file
que se le indicó el resultado se almacenaría en el mismo wreg siempre y cuando el
puerto d esté en cero, el tamaño de la instrucción de palabra es de 16 bits.

ADDWF.
Se puede decir que ésta instrucción realiza la operación contraria a la que se mostró
en la parte superior ya que la instrucción ADDWF se encarga de sumar el contenido
de WREG con un file elegido por el usuario, ésta instrucción al igual que su
contraparte cuenta con un tamaño de palabra de 16 bits.

Finalmente en el apartado del marco teórico se muestra un esquema que permita


observar de forma gráfica los osciladores que conforman al microcontrolador
utilizado es decir al PIC 18F4550 en éste esquema se observan los osciladores
OSC2, OSC1, T1OSO y T2OSI así como la arquitectura interna del diseño.

5
4) Material y equipo requerido.

● 1 PIC18F4550.
● 1 tarjeta de desarrollo para el PIC.
● 1 Programador
● 1 Computadora
● 1 Software MPLAB.
● Software Proteus.
● Software del programador (PICKit2).

5) Diagrama de flujo
Para poder realizar adecuadamente nuestro código de programación, primero se
necesita de un algoritmo como guía, el cual es representado con el diagrama de
flujo que se muestra en la siguiente figura:

6
6) Procedimiento y desarrollo de la práctica.
Ya con el diagrama de flujo establecido, se procede a realizar el código en
ensamblador.
Primero se copia la plantilla de configuración de los bits iniciales dada en la práctica
1 donde se configura el oscilador principalmente, además de señalar que se
trabajará con el PIC18F4550.

Una vez configurados estos bits, se configurarán los puertos de entrada y salida, así
como unas variables que serán de ayuda como contadores a la hora de la
configuración de los retrasos.

Una vez realizado esto, se limpia el puerto D mandando un clear y después empieza
la etapa de selección de las subrutinas (Derecha, Izquierda, Rutina o Rutinas). Esto
se realiza mediante los primeros 4 pines del puerto B siendo: 0001 – Derecha, 0010
– Izquierda, 0100 – Rutina y 1000 – Rutinas como se muestra en la siguiente figura.

SUBRUTINA “DERECHA”
7
Entrando a la subrutina “DERECHA”, se pone en alto el bit 0 del puerto, quedando el
puerto D como “00000001” y se manda a llamar la subrutina “CICLORIGHT”,
entrando en dicha subrutina, se checa el bit 0 del puerto B, si es un “0” no salta una
línea de código y manda a llamar a la subrutina “APAGADO”, que de lo que se
encarga esta subrutina es poner a cero todo el puerto D y regresar al “MENU” de
subrutinas; pero si es un “1” salta una línea de código y continúa con la subrutina
“CICLORIGHT” recorriendo los bits hacia la derecha y después de cada corrimiento,
hay un retardo de 300ms, que se explicará más adelante, para así después ciclar la
subrutina hasta que se cambie el bit 0 del puerto B de un “1” a un “0” y se ponga en
alto cualquier otro de los tres bits que restan del puerto B (este código se muestra
en la siguiente figura).

SUBRUTINA “IZQUIERDA”
Para esta subrutina se utilizó prácticamente lo mismo que la subrutina “DERECHA”,
solo que en lo que se diferencian es que se cambia el sentido del corrimiento de los
bits del puerto D hacia la izquierda, se cambió la instrucción “rrncf” por la instrucción
“rlncf” que es el que se encarga del corrimiento de los bits hacia la izquierda (este
código se muestra en la siguiente figura).

SUBRUTINA “RUTINA”

8
Para esta subrutina lo que realizamos fue el encendido de los leds siguiendo un
orden específico de bits:
1.​ ​00000001
2.​ ​00000101
3.​ ​00010101
4.​ ​01010101
5.​ ​01010111
6.​ ​01011111
7.​ ​01111111
8.​ ​11111111
Y entre cada uno de los cambios hay un retardo de 300ms, posteriormente se
procedió a apagar los leds en el mismo orden que se siguió al encenderlos, usando
el mismo retardo de 300ms (el código se muestra a continuación).

SUBRUTINA “RUTINAS”
Para esta subrutina lo que se hizo fue prender y apagar los leds en un orden
específico:
1.​ ​10000001
2.​ ​11000011
3.​ ​01000010
4.​ ​01100110
5.​ ​00100100

9
6.​ ​00111100
7.​ ​00011000
8.​ ​00000000
Y entre cada uno de los cambios hay un retardo de 300ms como se muestra en la
siguiente figura.

Ahora se explica la forma del retraso de los 300 ms. Para este retraso se hizo uso
de la fórmula siguiente:
RETARDO=m*n*o*4us
Se hace uso de 4µs debido a que la rutina base que ocuparemos para el retardo
tarda 4µs dado el nop (1µs), el decfsz (1µs) y el bra (2µs).

Una vez teniendo la fórmula se adquirieron los siguientes valores para conta3,
conta2 y conta: 3, 165 y 200. Se hizo uso de realizar subrutinas dentro de las
subrutinas debido a que una subrutina normal de retardo nos puede dar a lo mucho
320 µs debido a los 8 bits con los que se trabaja (el código del retardo se muestra a
continuación).

10
El clear del puerto D (mencionado anteriormente) lo que hace es mandar a los bits
0, 1, 2, 3 del puerto D un 0. Esto se hizo mediante una subrutina mostrada en la
siguiente figura.

6.1) Simulaciones

Simulación del tiempo en Mplab

Para verificar que nuestro código hiciera correctamente el tiempo de 300ms,


utilizamos la herramienta Stopwatch. Para hacer la simulación seleccionamos la
opción debugger, a continuación damos click en Select Tool y seleccionamos
MPLAB SIM, para habilitar las opciones de simulación, como se muestra a
continuación:

11
A continuación en la misma opción de debugger, seleccionamos la opción
Stopwatch. Después empezamos a ejecutar el código instrucción por instrucción
hasta donde llegamos a la parte del retardo, en la ventana de Stopwatch reiniciamos
el cronómetro a cero y ejecutamos la rutina del retardo para medir el tiempo en que
se demora hacerlo. En la siguiente imagen se muestra el tiempo en que se realizó el
retardo de 300ms:

Como se muestra en la imagen, el tiempo en el que se ejecutó esta muy cercano a


los 300ms, dentro de la tolerancia de 1 ms permitida para la práctica.

Simulación en Proteus

Para realizar la simulación en Proteus se realiza el mismo proceso que en la


práctica anterior, armando primero el circuito de la práctica en proteus y después se
le carga al pic el archivo .hex generado en el proyecto de Mplab. Se muestran los
resultados en las siguientes imágenes.

12
Corrimiento a la derecha:

Corrimiento a la izquierda:

13
7) Implementación

Una vez que se comprobó el funcionamiento del código, se utiliza el programa Pickit
2 para poder programar el PIC y así poder ver los resultados en físico.

Fotografía del corrimiento a la derecha

Fotografía del corrimiento a la izquierda

8) Resultados

Para comprobar el tiempo de encendido de los leds, se midió el tiempo que tomó
hacer 5 recorridos del primer led hasta el último, teniendo los siguientes resultados

Medición 1: 12.14 s
Medición 2: 12.10 s
Medición 3: 12 s

Para calcular el tiempo en que se realiza el retardo se divide el tiempo medido entre
5, que son los recorridos realizados y 8, que son el número de leds:

Medición 1: 12.4 s/ 5 / 8= 303 ms


Medición 2: 12.10 s/ 5 / 8= 302 ms
Medición 3: 12 s/ 5 / 8= 300 ms

Se puede notar que el tiempo corresponde correctamente a los 300 ms, la variación
de las mediciones se debe a que no se pudo detener el cronómetro en el mismo
instante, ya que son tiempos muy rápidos.

14
8) Conclusiones
En esta práctica, pusimos a prueba lo aprendido en clase sobre los retardos,
también nos familiarizamos más con el programa MPLAB y sobre el lenguaje
ensamblador, sobre todo en las instrucciones para poder realizar retardos. Para
poder hacer uso de los retardos es necesario tomar en cuenta los ciclos que le toma
a las instrucciones en ejecutarse y de esta manera se puede calcular el tiempo que
tardará en realizar la subrutina, de esta forma se puede modificar el tiempo es que
se realizará el retardo.

9) Referencias

-MPLAB, I. User’s Guide with MPLAB Editor and MPLAB SIM Simulator. ww1.
microchip. com/downloads/en. DeviceDoc/MPLAB_User_Guide_ 51519c. pdf.

-DataSheet PIC18F2455/2550/4455/4550. Recuperado de:


http://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf

-Angulo Usategui J., Angulo Martínez I. (2003). Microcontroladores PIC. Diseño


Práctico de Aplicaciones. Primera Parte: El PIC16F84. Lenguajes PBASIC y
Ensamblador. Tercera edición. España. McGRAW-HILL/INTERAMERICANA DE
ESPAÑA, S. A. U.

15

También podría gustarte