Academia.eduAcademia.edu

Pic 16 F877a mikroc

En el siguiente informe se detallarán los procesos para optimizar los códigos ya sea con ayudas de sentencias de control o bucles y como usar los diferentes puertos para elaboración del código KEYS WORDS: microcontrolador, leds, mikro c, puertos, button,

INFORME PRÁCTICA No 2 Cristian Jácome cjacomemi@est.ups.edu.ec Daniel Vaca dvacav@est.ups.edu.ec Jhonny Tituaña jtituanaf2est.ups.edu.ec ABSTRACT: En el siguiente informe se detallarán los procesos para optimizar los códigos ya sea con ayudas de sentencias de control o bucles y como usar los diferentes puertos para elaboración del código KEYS WORDS: microcontrolador, leds, mikro c, puertos, button, OBJETIVOS 1.1 OBJETIVO GENERAL Aprender a manejar los puertos del microcontrolador para un funcionamiento óptimo. Uso de sentencias de control 1.2 OBJETIVOS ESPECÍFICOS Uso de puertos tanto como entradas y salidas MARCOTEÓRICO 2.1 Microcontrolador Fig1. Distribuiciuón de pines del microcontrolador 16f877a. [1] Cuando el programador está usando microcontroladores debe tener en cuenta el número de variables, ya que si se satura de variables innecesarias, puede afectar en gastos innecesarios también. En la figura 2 se presentara como esta internamente la memoria del microcontrolador. Fig2. Estructura de la memoria de un. [1] Cuando es fabricado el microcontrolador, no contiene datos en la memoria ROM. Para que pueda controlar algún proceso es necesario generar o crear y luego grabar en la EEPROM  o equivalente del microcontrolador algún programa, el cual puede ser escrito en lenguaje ensamblador u otro lenguaje para microcontroladores; sin embargo, para que el programa pueda ser grabado en la memoria del microcontrolador, debe ser codificado en sistema numérico hexadecimal que es finalmente el sistema que hace trabajar al microcontrolador cuando éste es alimentado con el voltaje adecuado y asociado a dispositivos analógicos y  discretos  para su funcionamiento. [1] 2.2 Características específicas de memoria del pic 16f877a Memoria de programa: FLASH de 8K de instrucciones de 14 bits Memorias de datos: SRAM de 512 bytes, EEPROM de 256 bytes Pines I/O (Input/Output) : 6 del puerto A, 8 del puerto B, 8 del puerto C, 8 del puerto D y 3 del puerto E, además de 8 entradas analógicas. 2.3 Sentencias de control Las sentencias de control, tanto como comparadores o bucles, nos ayuda para optimizar los códigos. Entre los más usados por el programador son: C.1 Sentencias condicionales C.1.1 Sentencia if C.1.2 Sentencia else C.1.3 Sentencia else colgante C.1.4 Sentencia switch C.2 Sentencias de iteración C.2.1 Bucles for C.2.2 Bucles while C.2.3 Bucles do-while C.3 Sentencias de salto C.3.1 Sentencia break C.3.2 Sentencia return C.3.3 Sentencia goto C.3.4 Sentencia continue [2] MATERIALES Y EQUIPO Protoboard Leds Microcontrolador 16f877a Diodo 1n4007 Crystal oscilador 4mHz Resistencias 220 ohmios Capacitores 22pf Fuente 5Vdc Programadora de PIC’s Software Mikro C. Software Proteus. Pulsadores Dip switch DESARROLLO Y PROCEDIMIENTO Circuito 1 Comenzamos elaborando el diagrama de flujo que nos va a servir de guía para la elaboración de código. A continuación el diagrama de flujo. Figura3.- Diagrama de flujo Circuito 1 El circuito uno se lo realizo con el software de mikroc , con sentencias como es el while y comparadores como la sentencia if. El caso me pedía encender un led 6 veces y el bit de entrada (pulsador) y la salida (led) deben salir del mismo puerto. Figura 4. Código del circuito 1 Con el código elaborado armamos el circuito en cualquier simulador para probar su funcionamiento. En este caso se puede usar Proteus. Figura 5. Simulación en Proteus (circuito 1) Con estos elementos podemos armar sin problema el circuito en el protoboard Circuito 2 Para realizar el ejercicio primero debemos realizar el diagrama de flujo que se muestra en la figura 1 Figura 6. Diagrama de flujo Se realizó la programación en el software de miKroC para generar un menú de operaciones de secuencias de leds. El menú de operaciones se lo realizó mediante un switch case, en el cual cada vez q el dipswitch marque un determinado caso se realizará lo que se encuentre dentro de cada CASE. La primera condición es que se encienden los leds pares de uno en uno desde el LSB hasta el MSB, infinitamente. En donde se utiliza un bucle For para recorrer las posiciones pares del puerto B, donde están los leds y también se aprovecha el desplazamiento de bits hacia la izquierda para empezar desde el LSB hasta el MSB. Figura7.- caso 1 En el segundo caso se encienden los leds impares de uno en uno desde el MSB hasta el LSB, infinitamente. En donde se utiliza un bucle For para recorrer las posiciones impares del puerto B, donde están los leds y también se aprovecha el desplazamiento de bits hacia la derecha para empezar desde el MSB hasta el LSB. Figura8.- caso 2 En el tercer caso titilaran los leds pares cinco veces. Par lo cual se utilizó un ciclo while para que ejecute la instrucción 5 veces. El puerto B está configurado para que enciendan las posiciones pares. Figura9.- caso 3 En el cuarto caso titilaran los leds impares cinco veces. Par lo cual se utilizó un ciclo while para que ejecute la instrucción 5 veces. El puerto B está configurado para que enciendan las posiciones impares. Figura10.- caso 4 En el default refrescamos las variables para poder salir de cada caso, sin esperar a que la secuencia termine. Figura 11.- opción de default Luego se procedió a realizar la simulación en Proteus para verificar el funcionamiento del circuito. Figura 12. Simulación en Proteus Circuito 3 Mediante un pulsador encender y apagar un led en base de eventos, es decir, cuando presiona una vez enciende el led, cuando presiona por segunda vez apaga el led, cuando presiona por tercera vez vuelve a encender y así sucesivamente Para realizar el ejercicio primero debemos realizar el diagrama de flujo que se muestra en la figura 1. Figura 13. Diagrama de flujo del ejercicio 3 Escogimos el puerto B como entrada y salida de datos, donde del pin 0 será salida aquí irá conectado un led, con su respectiva resistencia limitadora de corriente, y el pin 7 será configurado entrada, aquí deberá ir un pulsador en lógica directa. El código para que el mismo pulsador prenda y apaga el led es el siguiente: a=portb.b7; if(a==1) { x=x+1; delay_ms(200); b= x%2; if(b==0)portb.f0=1; else portb.f0=0; } Toda la programación anterior tiene que estar encerrado en un bucle while, esto hará que el programa funcione de una manera infinita. Para la simulación del programa utilizamos el software proteus, en el cual realizamos todas las conexiones necesarias, como lo son el master clear, circuito oscilador, la conexión del pulsador en este caso en lógica directa y la conexión de un led de igual manera en lógica directa, las cuales indicamos en la figura 2. Figura 14. Simulación en proteus del ejercicio 5. Circuito 4 Comenzamos elaborando el diagrama de flujo del circuito propuesto que tiene las siguientes condiciones. Mediante dos pulsadores encender y apagar tres Leds con las siguientes condiciones: - Si presiona P1 enciende el Led 1 durante 1s. - Si presiona P2 enciende el Led durante 1s. - Si presiona P1 y P2 al mismo tiempo enciende el Led 3 durante 5 s. Figura 15. Diagrama de flujo (circuito 4). Para la elaboración del código hacemos uso de mikroc, dadas las condiciones de que elementos usar y puertos el código que se formulo es el siguiente Figura 16. Código del circuito 1 Hay que tener en cuenta en la programación que una persona no puede pulsar al mismo tiempo, así que se debe poner un retraso para que pueda funcionar eficientemente. Figura 17. Simulación en Proteus ANALISIS Y RESULTADOS Circuito 1 Se programó el microcontrolador y se pudo observar cómo se encendió las 6 veces y parando esa secuencia hasta esperar otro pulso Figura18.-Led Circuito 2 Se programó al pic 16f877A para que realice una secuencia, encendiendo los leds pares desde el LSB hasta el MSB. Los leds se encuentran conectados en el puerto B. Figura19.- secuencia desde el LBS-MSB Se programó al pic 16f877A para que realice una secuencia, encendiendo los leds impares desde el MSB hasta el LSB. Los leds se encuentran conectados en el puerto B Figura20.- secuencia desde el MBS-LSB Encendido y apagado de leds pares 5 veces Figura21.- titilan leds pares Encendido y apagado de leds impares 5 veces Figura22.- titilan leds impares Circuito 3 Al presionar el pulsador el led colocado en el pin 0 del puerto b queda activado, al dar un segundo pulso el mismo led se apaga, al dar un tercer pulso el mismo led vuelve a prender y así sucesivamente el ciclo se hace infinito. Figura 23. Funcionamiento físico en protoboard del ejercicio 3. Circuito 4 El circuito funciona con las especificaciones dadas Cuando pulsa p1 se enciende el led 1, cuando es presionado el p2 se enciende el led 2 y se presiona los dos al mismo tiempo se enciende el led 3 Figura 24. Funcionamiento físico en protoboard Conclusión: Es importante refrescar las variables que se utilizan dentro de los bucles while para evitar que las secuencias se vuelvan infinitas. Además cuando utilizamos el Switch Case nos permite crear menús para realizar diferentes operaciones o secuencias, las cuales pueden cambiar sin esperar a que alguna de ellas termine su ciclo, esto se logra por medio del BREAK, la cual obliga a salir del caso en el que se encuentre la ejecución realizándose. Para el encendido y apagado de un led con un mismo pulsador, es necesario utilizar operaciones aritméticas que nos brinda micro c y la utilización de contadores. -Optimar el código es importante ya que el principal limitante del microcontrolador es su limitada memoria. También en el mundo real no se puede tener una pulsación exactamente igual y para ayudarnos con este detalle es bueno poner un pequeño retraso. Referencias [1] El Microcontrolador PIC16F877a , Resumen de hoja de datos Disponible en: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf [2]Sentencias de control, Programación 1-teoria,[online] blog Disponible: https://programacion1-teoria.wikispaces.com/C.+Sentencias+de+Control NIVERSIDAD POLITÉCNICA SALESIANA LABORATORIO DE SISTEMAS MICROPROCESADOS Fecha: 13/11/2015 4