Share PDF

Search documents:
  Report this document  
    Download as PDF   
      Share on Facebook

MICROPROCESADORES Y MICROCONTROLADORES

1

LABORATORIO DE MICROPROCESADORES

Y MICROCONTROLADORES

PROGRAMACION BASICA DE

MICROCONTROLADORES MICROCHIP PIC Y

MOTOROLA FREESCALES

PRACTICA Nº 2

JORGE EUGENIO VELANDIA CORONADO

Cód. 4253219 jorgvel@hotmail.com



Abstract

This report presents the findings into practice microprocessor N 2 which was held in the Coffee CCAV, and which are reflected in the different circuits and simulations for this practice, it includes complete descriptions of laboratory development flowchart of each simulation, circuit proposed in Proteus, assembly language source code in MPLAB and step-by-step setup process PIC mount breadboard and test run.

Keywords-String, Flowchart, Assembler, Proteus, programmer, microchip.

Resumen

En este informe se presentan las conclusiones generales de la experiencia vivida en la Practica N° 2, profundizando los temas teóricos básicos tratados en el curso de Microprocesadores y Microcontroladores, primero iniciaremos con el diseño de un programa que se descarga al circuito planteado y se implementa mínimo ocho (8) secuencias distintas y vistas una tras otra, además se realizara el montaje del circuito con la condición que al pulsar otro botón conectado a otro puerto controle dichas secuencias, y por último se amplia dicho programa para poder controlar la velocidad de secuencia la cual estará conectada a otro puerto con otro pulsador.

Palabras Clave—Secuencia , Diagrama de flujo, Ensamblador, Proteus, programmer, microchip.

1. Introducción

Este informe presenta los resultados a la práctica N 2 de microprocesadores la cual se realizo en el CCAV Eje Cafetero, y en el cual están plasmados los diferentes circuitos y simulaciones correspondientes a dicha practica, se incluye las descripciones completas del desarrollo del laboratorio diagrama de flujo de cada simulación, circuito planteado en Proteus, código fuente en lenguaje assembler en Mplab y su descripción paso a paso, proceso de configuración del PIC, montaje en protoboard y prueba de funcionamiento.

2.INFORME LABORATORIO Nº 2

2.1PRACTICA Nº 1

TITULO: SECUENCIA Y CONTRO DE LED.

OBJETIVO: Diseñar un algoritmo para generar el código fuente en lenguaje ensamblador y de ahí compilarlo, depurarlo, guardarlo, cargarlo y ejecutarlo utilizando para ello el Entorno de Desarrollo Integrado MPLAB o WINIDE.

Implementar y demostrar a través de circuitos funcionales las capacidades básicas de los Microcontroladores, desarrollando una solución acertada a los problemas planteados.

Sustentar el desarrollo de la práctica ante el tutor encargado de laboratorio.

MICROPROCESADORES Y MICROCONTROLADORES

2

DESARROLLO DE LA PRACTICA: Con el circuito planteado implementar mínimo ocho (8) secuencias distintas para el conjunto de 8 LEDs conectado a uno de los puertos, las secuencias distintas se deben mostrar una tras otra.

Este primer ejercicio constituye la base de los dos posteriores. Su construcción obedece a poner en funcionamiento ocho secuencias distintas obtenidas con igual cantidad de diodos LED sin la interacción del usuario. El control será, en todo caso, solo a través del temporizador.

A.Descripción: Ocho secuencias con ocho LEDs sin interacción exterior.

B.Diagrama de flujo

Fig 3 Codigo Mplab

Línea 1. __CONFIG es una directiva que configura el procesador[1]. En orden se indica desactivar la protección de código, desactivar el watch dog y seleccionar el oscilador de cristal.

Línea 2. Título del ejercicio.

Líneas 3 y 4. Se establece el tipo de procesador. Bajo MPLAB pierden significado porque es el propio proyecto en donde se establece. Se incluye solo por compatibilidad.

Línea 5. Librería en donde se encuentran las declaraciones de registros y constantes del PIC16F84.

Fig 4 Codigo Mplab

Líneas 9 y 12. Declaración de variables iniciando en la posición 0x000C y consecutivas. Ello evita escribir las direcciones una por una[2].

Líneas 16 a 17. El programa se inicia en la posición de memoria 0x0000 y luego bifurca hacia la etiqueta inicio

Fig 1 Diagrama de flujo

Fig 2 Montaje circuito en Proteus

Codigo Mplab

Fig 5 Codigo Mplab

Línea 263. La primera línea del programa es llamar a la rutina de inicialización (ver la siguiente sección).

Líneas 264 a 289. Se apagan todos los LEDs del puerto B y se llama a cada procedimiento de secuencia uno a la vez con una pausa entre secuencia y

MICROPROCESADORES Y MICROCONTROLADORES

3

secuencia.

Fig 6 Codigo Mplab

Línea 22 a 24 establecer a cero los puertos A y B. Línea 25. Seleccionar el banco 1 en donde están ubicados los registros utilizados a continuación.

Líneas 26 y 27. Configurar el temporizador a una prescaling de 1:256 asignado al TMR0 en el registro OPTION_REG.

Líneas 28 y 29. Configurar el puerto B como salida asignando cero al registro TRISB.

Líneas 30 y 31. Seleccionar el banco 0 para iniciar el programa y salir del procedimiento de inicialización.

Fig 7 Codigo Mplab

Línea 35. Se reinicializa a cero el conteo del temporizador.

Líneas 36 a 38. El temporizador cuenta 128 veces antes de salir (b‘10000000’). Goto $-1 significa retroceder una línea. Explicación adicional. El temporizador configurado con la señal interna tal como se ha establecido, cuenta a velocidad constante de 0 a 255 inclusive y luego repite la cuenta desde cero a una frecuencia establecida por la siguiente fórmula: [3]

Fig 8 Ecuacion

Es decir, el tiempo que tarda cada cuenta del timer depende de 2 factores: la frecuencia fosc del oscilador y el valor p del prescaling elegido. Al haber seleccionado un prescaling de 1:256 (ver comentario de las líneas 26 y 27) se tiene:

Fig 9 Ecuacion

Por lo tanto, como el bucle itera 128 veces se espera un tiempo aproximado de 33 ms para cada pausa.

Fig 10 Codigo Mplab

Líneas 42 a 45. El primer tipo de secuencia corresponde al encendido exclusivo de 1 LED de un extremo al otro de ida y vuelta. La variable iterar contiene la cantidad de veces que se repite toda la secuencia y la variable bitn contiene el primer bit con se inicia la secuencia.

Líneas 46 a 51. La primera mitad de la secuencia corresponde al movimiento de ida y se realiza rotando el bit inicial de bitn con la instrucción RLF en un bucle apropiado y un tiempo de pausa entre cada iteración

Líneas 52 a 59. Al alcanzar el extremo contrario se ingresa a la segunda mitad de la secuencia que consiste en desplazar el bit hacia el lado contrario utilizando otro bucle con un tiempo de pausa entre cada iteración Líneas 60 a 64. Al llegar al extremo se enciende el LED extremo y se verifica si la cantidad de iteraciones de la secuencia ha sido cumplida, en caso contrario return marca la salida del proceso y regresa al bucle principal del programa (ver lín eas 264 a 289)

MICROPROCESADORES Y MICROCONTROLADORES

4

Fig 11 Codigo Mplab

Línea 68 a 71 El segundo tipo de secuencia corresponde al encendido intercalado de los 8 LEDs al mismo tiempo. La variable iterar. Iterar contiene la cantidad de veces que se repite la secuencia y bitn contiene el valor de inicio de los bits.

Líneas 72 a 79. Se muestran los bits de inicio, se realiza una pausa, se invierte con COMF el estado de todos los bits,se muestran y se repite la secuencias tantas veces como indique la variable iterar. Al salir se regresa al bloque principal del programa (ver líneas 264 a 289).

Three Thousand) el auto protagonista en la clásica serie televisiva de los 80s Knight Rider (o “El auto fantástico”) en un encendido progresivo del centro hacia ambos lados.

Líneas 85 a 112. El encendido de LEDs se realiza con llamadas consecutivas a MOVLW al puerto B. Toda la secuencia se repite la cantidad de veces indicada por la variable iterar y luego sale con return (que no altera el valor del registro W) al bucle principal (ver líneas 264 a 289).

Fig 13 Codigo Mplab

Línea 171 a 174. Para el sexto tipo de secuencia se eligió mantener encendido el LED de un extremo mientras

“una copia” del mismo se desplaza hacia el extremo contrario y alcanzarlo se congela iniciándose el movimiento del LED inicialmente encendido. Bitn contiene el led inicialmente encendido.

Líneas 175 a 183. Esta primera mitad de la secuencia consiste en encender rotar el valor de bitn y mostrarlo, pero antes de la pausa encender manualmente con BSF el bit menos significativo del puerto B. Nótese que aunque en el código la secuencia de instrucciones está al revés (primero BSF) en realidad se ejecutan en orden inverso debido a la ubicación del call pausa. El proceso se repite hasta alcanzar el extremo.

Líneas 184 a 198. La segunda mitad de la secuencia realiza el proceso inverso manteniendo encendido el LED del extremo contrario y desplazando el bit hacia el otro extremo. Al alcanzar el número de iteraciones indicado por iterar se regresa al programa principal (ver líneas 264 a 289).

Fig 12 Codigo Mplab

Línea 83 y 84. Esta secuencia emula uno de los movimientos de las luces de KITT (Knight Industries

MICROPROCESADORES Y MICROCONTROLADORES

5

Fig 14 Codigo Mplab

Líneas 202 y 203. El penúltimo tipo de secuencia es encender todos los LEDs e ir apagándolos progresivamente desde el centro y hacia ambos lados. Para ello solo se utilizará la variable iterar.

Líneas 204 a 227. La secuencia se logra utilizando la interacción directa con el puerto B enviándole el status de cada bit de manera directa con MOVLW. Al finalizar la secuencia completa se comprueba si se ha alcanzado la cantidad de iteraciones que indica la variable iterar. Si no se ha alcanzado se repite todo el proceso desde la etiqueta sec_7; en caso contrario se regresa al programa principal sin modificar el valor de W con return (ver líneas 264 a 289).

Fig 15 Codigo Mplab

Líneas 231 y 232. En este último tipo de secuencia se eligió utilizar el efecto rebote de una cantidad de LEDs de extremo a extremo que se va incrementando hasta iluminar los 8 espacios.

Líneas 233 a 259. Se utiliza nuevamente el mnemónico MOVLW para enviar el status de las salidas al puerto B directamente con pausa luego de cada nuevo status. Al finalizar se verifica la cantidad de iteraciones y luego se regresa al programa principal sin modificar el valor de W con return (ver líneas 264 a 289).

PROCESO DE CONFIGURACION PIC 16F84 CON USB PROGRAMMER DE MICROCHIP.

Circuito programador:

Fig 16 Circuito programador

MICROPROCESADORES Y MICROCONTROLADORES

6

Programa

Fig 17 Programa del quemador

Montaje en protoboard

Fig 18 Montaje en Protoboard

Funcionamiento del circuito

Fig 19 Montaje en Protoboard

2.2 Practica 2

TITULO: SECUENCIA DE LED CON CONTROL.

OBJETIVO: Diseñar un algoritmo para generar el código fuente en lenguaje ensamblador y de ahí compilarlo, depurarlo, guardarlo, cargarlo y ejecutarlo utilizando para ello el Entorno de Desarrollo Integrado MPLAB o WINIDE.

Implementar y demostrar a través de circuitos funcionales las capacidades básicas de los Microcontroladores, desarrollando una solución acertada a los problemas planteados.

Sustentar el desarrollo de la práctica ante el tutor encargado de laboratorio.

DESARROLLO DE LA PRACTICA: Con el circuito planteado, de ocho (8) LEDs y un (1) botón, desplegar mínimo ocho (8) secuencias controladas en su visualización por el BOTON conectado a otro puerto.

El siguiente ejercicio permite la acción del usuario a través del bit menos significativo del puerto A del microcontrolador configurado como entrada a que se conecta un pulsador de estado normalmente abierto. Cada pulsación permite alternar entre uno de los 8 tipos de secuencia, apagar el circuito o volver al primer tipo de secuencia. El orden de programación es el mismo que para el programa anterior: Primero se codifican las instrucciones, luego se compila y genera el archivo .hex. Este archivo .hex se carga en PIC Simulator IDE 6.86 en el que se utiliza la pantalla Microcontroller View para ambiar el status del bit0 del puerto A y ver el resultado en la ventana 8xLED Board. Luego de verificar el correcto funcionamiento se carga el programa en Proteus 7.7 SP2 para la simulación directa en el circuito. La estructura del programa es similar al anterior, excepto que se ha agregado en el procedimiento de pausa una verificación constante al status del bit 0 del puerto B. Esto permite una ágil respuesta, no obstante, es tan ágil que se generan rebotes o “ecos” de pulsación del interruptor. Por este motivo se incorpora una nueva rutina para evitar el rebote en el pulsador.

Aunque las secuencias son las mismas, el programa principal es distinto y varios de los elementos en las secuencias han sido modificados según se indicará a continuación.

A.Descripción Ocho secuencias con ocho LEDs con interacción exterior para selección de la siguiente secuencia o apagado del circuito.

B.Diagrama de flujo

MICROPROCESADORES Y MICROCONTROLADORES

7

previos.

Fig 22 Codigo en Mplab

Líneas 1 a 5. La configuración del procesador es la misma. Aunque MPLAB dispone de una opción para activar la configuración vía código o vía interfase MPLAB.

Líneas 9 a 13. La variable iterar del apartado anterior no existe lo que hace pensar que cada secuencia completa se reproducirá una sola vez, aunque luego se verá que es de modo continuo. Se agrega una variable num_sec para determinar qué número de secuencia es la activa. Además se incluye una variable aux muy importante para el procedimiento antirebote.

Líneas 17 y 18. La sección principal del programa se inicia en la etiqueta inicio.

Fig 20 Diagrama de flujo

Fig 21 Montaje en Proteus

Fig 23 Codigo Mplab

D. Síntesis del código fuente en MPLAB IDE 8.56 Se omite la descripción detallada del funcionamiento de cada secuencia de LEDs debido a que es la misma que en el apartado previo. El enfoque se realiza en el código nuevo y en las modificaciones realizadas a los procesos

MICROPROCESADORES Y MICROCONTROLADORES

8

Fig 24 Codigo Mplab

Línea 252. El procedimiento de inicialización se encuentra separado para conservar el orden del programa principal.

Líneas 254 y 255. Cuando el contador de secuencias está fuera del rango del 1 al 8 inclusive se reinicializa a cero y se apagan todos los LEDs. Este es el estado de generador apagado.

Línea 256. Este es un artificio que permite al sistema verificar si se ha presionado el pulsador de cambio de secuencia. En el análisis del procedimiento pausa modificado se verá en detalle. Líneas 258 a 264. La instrucción comparativa BTFSS del registro STATUS, flag Z, requiere prevenir que el indicador Z permanezca activo por alguna operación anterior. Por ello se establece a cero. En seguida se resta num_sec inicializado en cero de una constante en W. En este caso b‘0001’. Si el resultado es cero, entonces son iguales y en tal caso se llamará a la secuencia tipo_1 y se repite el bucle porque no es necesario verificar más valores. En caso contrario, si el resultado de la resta es diferente de cero se continua verificando por otros valores.

Líneas 266 a 320. El comportamiento de cada segmento de verificación es idéntico al anterior, excepto que el valor a verificar va cambiando: 1, 2, 3, …, 8. Si no es ninguno significa que el generador está apagado.

Fig 25 Codigo Mplab

Líneas 22 a 34. El procedimiento de inicialización del microcontrolador es exactamente el mismo que en el ejercicio anterior con el agregado de la configuración del puerto A como entrada en las líneas 29 y 30.

Fig 26 Codigo Mplab

Líneas 38 a 41. Antes de proceder a calcular los 33 ms del tiempo de pausa explicados en el ejercicio anterior, se procede a verificar el status del bit menos significativo del puerto A configurado como entrada. Dicho de otro modo, se verifica si se ha presionado el pulsador. De ser así se llama a la rutina que previene el rebote, se incrementa la variable contador de número de secuencia y recién se procede a calcular el tiempo de espera. Este artificio permite que el circuito responda de inmediato a la pulsación del interruptor. Y si se encuentra dentro de otro procedimiento la acción queda grabada para cambiar de secuencia en cuanto termine la secuencia actual. Es un tipo de sistema con buffer de entrada.

Fig 27 Codigo Mplab

Líneas 49 a 87. La rutina que previene el rebote en el pulsador es una construcción de 2 bucles de 256 iteraciones que consumen el tiempo suficiente[4] para evitar que el “eco” o rebote del pulsador cause efectos

MICROPROCESADORES Y MICROCONTROLADORES

9

negativos en el sistema. De no incluirlo cada pulsación podría significar varias pulsaciones. La variable aux sirve para realizar este conteo

Fig 28 Codigo Mplab

Fig 31 Montaje en Protoboard

Línea 61 a 248 Se ha seleccionado una de las 8 secuencias cuya iluminación se describió en el ejercicio anterior. La diferencia en cada secuencia es la eliminación de la variable iterar y por consiguiente del bucle de iteración local porque cada secuencia se ejecuta 1 vez y su iteración constante se encuentra dentro del bucle principal del programa en donde luego de verificar el número de secuencia activa, se llama al procedimiento apropiado vez tras vez.

Fig 32 Montaje en Protoboard

Fig 29 Montaje en Protoboard

Fig 33 Montaje en Protoboard

Fig 30 Montaje en Protoboard

Fig 34 Montaje en Protoboard

 

MICROPROCESADORES Y MICROCONTROLADORES

10

2.3 PRACTICA Nº 3

TITULO: SECUENCIA DE LED DIFERENTES CON CONTROL DE VELOCIDAD Y TIPOS DE SECUENCIA.

OBJETIVO: Diseñar un algoritmo para generar el código fuente en lenguaje ensamblador y de ahí compilarlo, depurarlo, guardarlo, cargarlo y ejecutarlo utilizando para ello el Entorno de Desarrollo Integrado MPLAB o WINIDE.

Implementar y demostrar a través de circuitos funcionales las capacidades básicas de los Microcontroladores, desarrollando una solución acertada a los problemas planteados.

Sustentar el desarrollo de la práctica ante el tutor encargado de laboratorio.

DESARROLLO DE LA PRACTICA: Con el circuito planteado, de ocho (8) LEDs y dos (2) botones, desplegar mínimo ocho (8) secuencias controladas en su visualización por el BOTON 1 y controladas en su velocidad por el BOTON 2 estos botones se ubican en un puerto diferente.

En este ejercicio se incorpora la verificación permanente de 2 pulsadores conectados a los bits 0 y 1 respectivamente del puerto A configurado como entrada. El bit 0, de manera idéntica al ejercicio 2 descrito anteriormente, controla el tipo de secuencia a mostrar en la barra de LEDs. El segundo pulsador controla la velocidad que toma cada retardo y por lo tanto, la velocidad de visualización de cada secuencia. Siendo que la estructura del programa es similar al anterior, se omiten las explicaciones repetitivas y se concentra el comentario en las novedades que se incorporan en el código fuente.

A. Descripción

Ocho secuencias con ocho LEDs con doble interacción exterior para selección de la siguiente secuencia (o apagado) del circuito y para la selección entre 2 modos de velocidad.

B. Diagrama de flujo

Fig 35 Diagrama de flujo

Fig 36 Montaje en Proteus

D. Síntesis del código fuente en MPLAB IDE 8.56

Gran parte del código fuente es similar al código del ejercicio 2 por lo que considera únicamente las modificaciones incluidas

MICROPROCESADORES Y MICROCONTROLADORES

11

Fig 36 Codigo en Mplab

Línea 12. Se agrega una variable velocidad que guardará solo 2 valores: 1 ó 0 para determinar qué velocidad es la que se utilizará en la animación de la secuencias. El programa principal se encuentra en la etiqueta INICIO.

Fig 37 Codigo en Mplab

Líneas 266 a 336. El código principal no ha cambiado excepto el procedimiento INICIALIZAR de la línea 266.

Fig 38 Codigo en Mplab

Línea 35. La novedad en el procedimiento inicializar es que se está asignando un valor 0 (cero) a la variable velocidad. El resto del código es el mismo que el descrito en el apartado previo sobre el ejercicio 2.

Fig 39 Codigo en Mplab

Líneas 40 a 43. Es la verificación de la pulsación del pushbutton que contrala qué tipo de secuencia es el que se va a visualizar.

Línea 44 a 49. Se verifica la pulsación del pushbutton que controla las 2 velocidades posibles para las secuencias de LEDs. Este pulsador actúa cambiando el status de la variable velocidad a través de la instrucción COMF que invierte su estado. Sin embargo, con la instrucción BTFSS solo se considera 1 bit: el bit menos significativo es suficiente para lo que se requiere.

Líneas 51 a 59. Si no se ha pulsado el botón de velocidad, entonces la velocidad es la normal y por lo tanto, el temporizador retarda los 33 ms calculados y explicados en el ejercicio 1. En caso contrario, es decir, si se ha presionado 1 vez el pulsador, se activa la variable velocidad y se duplica el tiempo de espera a dos bucles con el temporizador que hacen un total de 66 ms se espera entre cada cambio de encendido de LEDs. Finalmente, en la línea 58 antes de salir, se limpia en status del flag Z del registro STATUS para evitar que se altere alguna operación de verificación en algún procedimiento posterior.

3 CONCLUSIONES

La realización de la práctica nos permite afianzar los conocimientos adquiridos durante el estudio de la materia de Microprocesadores y Microcontroladores mediante la realización de montajes y verificación de su funcionamiento.

Nos permitió aprender y conocer el correcto conexionado de los PIC (PIC16F84) y el resto de elementos en un Protoboard.

Aprendimos sobre la configuración correcta de los PIC en lenguaje de máquina y sus variaciones al mismo.

Aprendimos y afianzamos la destreza sobre el correcto uso del quemador de PIC y su programa.

 

MICROPROCESADORES Y MICROCONTROLADORES

12

I.

REFERENCIAS

 

 

Héctor Uriel Villamil

González (2009).

Modulo de

 

Microprocesadores y

Microcontroladores.

Chiquinquira,

 

Colombia: UNAD

 

 

 

Programador de microcontroladores PIC. Microchip.

MANUAL DE ASSEMBLER. Recuperado del portal Web Pablin, el 05 de Noviembre de 2012, de http://www.pablin.com.ar/computer/cursos/varios/introasm.ht m