Microcontroladores PIC – Curso de Programación en MikroC
Hola nuevamente a los tutoriales de Artes Electrónicas Pachani, continuando en este curso vamos a conocer las capacidades del microcontrolador PIC 18F4550, vamos realizar programas en el entorno MikroC ,esta serie de tutoriales esta dirigido para lectores novatos, aficionados (hobbistas) y estudiantes.
Evaluemos el estado de un bit (Parte 2)
Capitulo 02.
Bifurcaciones y bucles
Continuando con la serie de tutoriales 0 y 1 , ya en el anterior tutorial aprendimos como evaluar un bit de modo que cuando este se encuentre en alto (1) se inicie una serie de eventos. Ahora vamos a avanzar un poco mas conociendo las instrucciones de decisión, dichas instrucciones nos serán de mucha utilidad al momento de diseñar programas que impliquen tomar una decisión a partir de un evento. Entonces empecemos a conocer la siguiente instrucción de decisión.
Instrucción de decisión for (para)
Al igual que la anterior instrucción analicemos las características de esta instrucción de la siguiente
manera. “Permite ejecutar un grupo de instrucciones de manera repetitiva, una determinada cantidad de veces.”for (expresión de inicio; expresión de condición, expresión de cambio) {
instrucciones;
}
Ahora muchos se preguntaran cual es la utilidad de esta instrucción, entonces empecemos por describir esta instrucción:
Una expresión de inicio donde consideremos a la variable ‘ i ’ un valor inicial de 4 ( i=4 ) y
expresión de condición de valor de condición final de 1 ( i>=1 ).
expresión de cambio donde esta variable va disminuyendo de 1 en 1 ( i--).
Por lo tanto, las instrucciones se ejecutarán de manera secuencial serán la expresión de inicio y la expresión de cambio . La primera vez cuando i=4, la segunda cuando i=3 y así sucesivamente hasta cuando i=1. Por ultimo se concluirá con la expresión de condición para cuando i>=1 , dicho de otro modo i =1 de modo que salga de la instrucción for y se ejecute la //instruccion2 de manera secuencial , analicemos el siguiente código:
for ( i=4 ; i>=1 ; i-- ) {
PORTB=PORTB<<1;
Delay_ms(500);
}
Problema 01.- Realizar un programa que analice el estado del RB0 del puerto B de tal modo que cuando sean igual 1 se muestre una secuencia bits de derecha a izquierda con un periodo de 0,5 segundos y cuando no lo sean muestre por el RA2 un pulso con un periodo de 0,2 segundos.
Antes de empezar la estructura de un programa en lenguaje C, nosotros seguiremos la siguiente plantilla y la secuencia de pasos para tener una mejor idea para programar y resolver nuestra necesidad:
1er Paso.- Es indispensable declarar las variables globales que consideres necesarias para el funcionamiento del programa, estás variables globales son reconocidas por todos los puntos de código del programa incluidas las funciones propias y la función main.
2do paso.- El paso a seguir es hacer las declaraciones de funciones diseñadas para las tareas específicas en tu programa.
3er paso.- Posteriormente se declara la función main y al comienzo de está se deben declarar las variables que se requieran dentro de la misma. El código que sigue debe configurar e inicializar los puertos y módulos del microcontrolador que sean indispensables en la aplicación.
4to paso.- Por último se edita el código que contiene el aplicativo concreto del programa.
En base a la anterior estructura para un programa, resolvamos el problema:
Solución.- Hagamos uso de un diagrama de flujo donde trataremos de explicar lo mejor posible nuestro código de manera secuencial es decir esto nos ayudara para tener información de nuestro programa tanto para poder hacer modificaciones o bien para que otra persona comprenda mejor sobre el funcionamiento de nuestro código.
Ahora que tenemos nuestro diagrama de flujo podemos empezar a escribir nuestro código en C el siguiente código según nuestra receta anterior facilitara las instrucciones del programa, yo lo muestro primero en un editor de texto (esto es alternativo pues podemos ir directo al IDE MikroC ), luego lo compilaremos :
1).- Primero habilitamos los puertos como entrada / salida digital con ADCON1 ← 0x0Fh , ademas deshabilitamos tanto el comparador análogo CMCON← 0x07h y las interrupciones Globales INTCON ← 0x00h.
2).- Limpiamos el puerto B para que trabaje como puerto de entrada de datos.
3).- Habilitamos a los puertos A como salida de datos por medio de la instrucción TRIS como lo hemos estado haciendo.
4).- Ahora cargamos al registro LATA ← 0x00h, para que en un inicio el puerto A no muestra nada.
5).- Luego que una vez se ha cargado el registro LATA=0x00h , vamos a verificar el estado del puerto B , concretamente para cuando RB1=1 a partir de la instrucción de condición if (PORTB.F1==1), se muestra una secuencia de bits de derecha a izquierda con un periodo de 0,5 seg por el puerto A.
6).- Pero si es la condición else de la anterior condición se muestra un pulso de 0,2 seg hacia el exterior por el puerto A por RA2.
Simulación en MikroC
Una vez tenemos nuestro código copiamos dentro del entorno de MikroC , de modo que luego compilamos:
Una vez obtenido el archivo lab08.hex ahora debemos de comprobar que nuestro código funciona de manera adecuada para ello vamos a usar el simulador proteus.
Simulación en Proteus
Una vez simulado y compilado en MikroC obtendremos los siguientes archivos:
Los archivos mas importantes son el lab08.hex y lab08.asm, el primero para poder instalar en nuestro microcontrolador y simular en Proteus , el segundo es el archivo que facilita crear nuestro archivo para compilar que seria como el archivo *.asm pero para la versión en C.
Para empezar carguemos el archivo lab08.hex a proteus 8,2.
Terminando tenemos:
Es momento de simular, vamos para verificar que lo que hemos programado esta bien. Recordemos que estamos analizando el valor de RB1 del puerto B donde apartir de una comparación tendremos una secuencia de 0,5 seg o bien un pulso de 0,2 seg .
Veamos algunas imágenes de la simulación en Proteus:
Cuando cuando el valor de RB1==0, tendremos un pulso con un periodo de 0.2 seg por el pin RA2.
Ahora cuando el valor de RB1==1 tendremos un corrimiento de bits de derecha a izquierda y veremos los diferentes cambio a intervalos de 0.5 seg:
Veamos un cambio mas:
Dado que la instrucción for tiene como limite hasta i=4 , el bit que alcanza viene a ser hasta la posición RA3, por lo cual cumple con nuestro programa.
Algunas observaciones
Tenemos que tener en mente lo siguientes:
1).- Ya aprendimos en el anterior tutorial como manejar un bit , ahora hemos utilizado dos instrucciones que nos ayudan a resolver de una manera adecuada el programa que se nos pidió diseñar en el principio.
2).- Cuando RB1==0, ha iniciado una pulso de 0.2seg , Pero cuando presionas RB1 hace que RB1==1 , inicia una secuencia de bits de derecha a izquierda pero cuando dejamos de presionar RB1 , es decir RB1==0, la anterior secuencia de desplazamiento de bits continua hasta que termine , en cierto modo es predecible pero aun útil.
3).- Lo anterior en cierto modo es útil pero que pasaría que en medio de una secuencia , nosotros presionáramos RB1==1, pero interrumpiera la secuencia anterior e inicie la nueva secuencia omitiendo lo anterior seria aun mas útil. Eso lo veremos mas adelante con el tema de interrupciones.
Veamos el video resumen de como se configura el microcontrolador para resolver el problema:
Al final
Con todo lo aprendido de los microcontroladores, vemos que podemos aprovechar las capacidades de los mismos para resolver necesidades del dia a dia en nuestras vidas. Para concluir, a medida que suba otro tutorial iré subiendo mas información con otro ejemplo, espero que toda la información te sea de utilidad y los espero en el próximo tutorial.
Todo el material que aquí se encuentra es de mi autoría, ademas de una recopilación de información de Internet de recursos que se pueden descargar como libros en pdf los cuales son usados como referencia para los ejercicios y los ejemplos. Cualquier consulta la puedes realizar en la parte de comentarios.
Bibliografia:
1.- Juan Ricardo Clavijo Mendoza, Diseño y simulación de sistemas microcontrolados en lenguaje C; Publicado el año 2011;[Fecha de consulta 29 de mayo de 2020].
2.-Juan Ricardo Penagos Plazas; Cómo programar en lenguaje C los microcontroladores PIC16F88, 16F628A y 16F877A; Publicado el año 2010; [Fecha de consulta 29 de mayo de 2020].
3.- Eduardo Garcia Breijio; Compilador_C_CCS_y_simulador_PROTEUS_para_microcontroladores_PIC; Publicado el año 2008; [Fecha de consulta 30 de mayo de 2020].
Software utilizados:
1.- MikroC_PRO_PIC_2016_Build.6.6.3 descargado de la pagina oficial de Microchip.
2.- Proteus v 7.5 , simulado en linuxMint 19,4 por medio del programa Wine.
3.- Editor de texto libre, se puede descargar de Internet, es un editor GNU Linux.
4.- OpenProg , programador de microcontroladores PIC-AVR.
Hardware utilizados:
1.- Placa de Programación basado en los esquemas de OpenProg.
2.- Placa entrenadora desarrollado en base al microcontrolador Pic 18F4550.
3.- Placas modulo de leds , botoneras e interruptores.










No hay comentarios.:
Publicar un comentario
Hola, con tu comentario puedes aportar para mejorar la calidad de mi trabajo