lunes, 1 de mayo de 2017

Microcontroladores PIC – Curso de Programación en MikroC (Parte 4 )


Hola nuevamente a los tutoriales de Artes Electrónicas Pachani, continuando con el curso de programacion del microcontrolador Pic16f877A  en lenguaje C, por ello este tutorial está dirigido a lectores novatos, aficionados (hobbistas), estudiantes, que deseen implementar programas para microcontroladores en lenguaje C.

Un lenguaje de alto nivel



Ya en los anteriores tutoriales se menciono que el compilador de alto nivel como el lenguaje C utiliza estructuras que facilitan la programación, optimiza las operaciones matemáticas y los procesos, por medio del uso de funciones predefinidas y las no predefinidas que nosotros mismos podemos crear, así como el uso de un conjunto de variables, de tipo carácter, entero, y punto decimal.

Mis proyectos en C
A medida que el nivel y complejidad de los programas se han hecho hasta el momento aun mantendremos con la estructura de los programas en lenguaje C, este relativamente simple, por lo cual trataremos de respetar esta plantilla que lo veremos un par de tutoriales mas y luego lo dejaremos de lado:

1er Paso.- Es indispensable declarar las variables globales que considere 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 del desarrollador y la función main.

2do paso.- El paso a seguir es hacer las declaraciones de funciones diseñadas por ud. para las tareas específicas en su 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 edite el código que contiene el aplicativo concreto del programa. En el siguiente ejemplo se puede ver cómo hacer una estructura para un programa:

Problema 4.- Un Programa de Juegos nos pide realizar un programa que encienda un juego de luces cuando el jugador coloque la respuesta adecuada o verdadera en el juego de preguntas, ademas cuando el jugador falle en la respuesta, el juego de luces debe estar apagado.

Solución.- De manera similar a nuestros anteriores proyectos primero vamos a etiquetar nuestro proyecto para las instrucciones. Esto nos ayudara para tener información de nuestro programa para poder hacer modificaciones adecuadas y versiones mejoradas de nuestro código.
Como es costumbre debemos de interpretar el problema a nivel del microcontrolador, las lamparas puede ser un bit de cualquier puerto de nuestro microcontrolador de modo que yo escogeré el puerto B como entrada de datos, de modo que cumpla con las características de nuestro programa. En este caso las lamparas de colores lo pondré en la salida del puerto C.
Ahora escribamos el siguiente código según nuestra receta anterior, para facilitar las instrucciones del programa, yo lo muestro primer en un editor de programas llamado Pluma, luego lo copiare en MicroC :



1).- Inicializamos el puerto C de modo que es como ir al banco 1, para llamarlo.
2).- Habilitamos a los puertos B como entrada de datos y puerto C como salida de datos, por medio de la instrucción TRIS como lo hemos estado haciendo.
3).- Acá vemos adicionalmente la instrucción NOT_RBPU_bit=0, debido a que el puerto B es bidireccional de 8 bits. El registro de sentido de datos es TRISB. Al programar un bit de TRISB con un valor de 1 se consigue que el pin correspondiente del puerto B trabaje como entrada es decir, coloca el driver de salida en alta impedancia. Al programar un bit de TRISB con 0 se logra que el pin correspondiente del puerto B opere como salida es decir, coloca el contenido del latch de salida en el pin seleccionado. Cada pin de este puerto tiene un pull up interno (resistencia conectada a V DD ). El bit #RBPU del registro OPTION_REG puede activar o desactivar esta función. Cuando el puerto se configura como salida las pull ups se desactivan automáticamente y también cada vez que se enciende el PIC (Power On Reset POR).
4).- Ahora por medio de la sentencia condicional WHILE (1) , siempre verdad, se cumple que el puerto C es igual al contenido del puerto B, de este modo siempre se mostrara los datos del puerto B en el puerto C.
5).- Adicionalmente para nuestros cálculos hemos añadido una variable num que sirve para guardar datos, en nuestro caso lo hemos inicializado con el valor de num=0, de modo que cuando se realice operaciones este responda a las operaciones basicas dentro del programa,.
6).- Dentro de la sentencia WHILE(1), tenemos otra operación num =PORTB +65; que sirve para realizar una operación de prueba de verdad para la respuesta de la pregunta según requerimiento del Programa de juegos.
7).- Aquí en adelante hacemos uso de la sentencia condicional IF (num==100); la raxon es que queremos verificar que el valor de num se igual a 100, con esta pregunta verificamos el valor de num de modo que si num es igual a 100 el PUERTOC sera igual al hexadecimal 0xFFh es decir todos los bits del PUERTOC se van a encender, cumpliendo con una de las condiciones del programa de juegos.
Ahora que sucede cuando el valor de num no es igual a 100, es decir cuando la suma del valor del PUERTOB no alcanza el valor de 100, por el PUERTOC se muestra el valor de 0x00h , es decir por el PUERTOC solo se muestra ceros, los led’s ( o bien Lamparas) están apagadas.

Por ultimo una ves escrito el archivo en ejer01.c lo copiaremos a nuestro IDE de MikroC, lo compilaremos y luego obtendremos el archivo ejer01.hex. Esto lo veremos en el siguiente punto.

Simulación en MikroC


Aquí nuestro objetivo es verificar que nuestro codigo compila de manera adecuada, una vez compilado tenemos el archivo ejer01.hex . Ya que no hemos tenido problemas dentro de las instrucciones para nuestro programa ahora debemos de comprobar que nuestro código funciona de manera adecuada en el simulador proteus, eso no quiere decir que no haya que realizar modificaciones, para ello primer debemos de similar para luego con los componentes adecuados ya poder implementar.

Simulación en Proteus
Luego de compilar lo que debemos de obtener dentro de nuestra carpeta de trabajo debe de ser lo siguiente, debemos de tener nuestro archivo ejer01.c , ademas de sus archivo ejer01.hex que vendrá a ser para poder instalar en el microcontrolador como también tenemos que tener el archivo ejer001.dsn de proteus para poder realizar la simulación en proteus. 


Los archivos mas importantes son el ejer01.hex y ejer01.c , 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, ya que el interprete se encargar de realizar la traducción para obtener el archivo ejer01.hex


Una vez ingresamos al IDE de Proteus realizamos la carga del archivo ejer01.hex , de manera similar a los anteriores tutoriales, luego es momento de verificar que nuestro archivo ejer01.hex cumple con las necesidades de nuestros clientes:

1.- Cumple con el hecho de que cuando el jugador coloque la respuesta incorrecta por el PUERTOC solo se muestre el valor de 0x00h , es decir que los led’s estén apagados, con ello hemos cumplido con parte del requerimiento del cliente.


2.- El segundo requerimiento por parte de nuestro cliente es que las lampara se enciendan cuando la respuesta sea verdadera o adecuada , ahí todas las lamparas se deben de encender para ello , verificamos nuestra simulación y resulta que cuando sumamos el valor de num = 35 + 65 =100 , con ello la condicional funciona.



Al obtener el valor de num=100; tenemos en el PUERTOC , todos los led encendidos con ello cumplimos el requerimiento de nuestro cliente. Este requerimiento es solo para una pregunta , es decir como nuestro cliente pidió solo para una pregunta este programa cumple con ello.

Algunas observaciones:
1.- Cuando realizamos el programa tenemos en mente que este fuera para solo un juego por ello el valor introducido por el jugador seria de uno a uno es decir solo se utilizaría este programa una sola vez. Con ello no quiero desmerecer nuestro programa, pero que pasaría si este programa lo utilizamos para múltiples juegos ¿como lo podemos hacer? , para el próximo tutorial se realizara un programa para múltiples juegos es decir ahora hemos visto para un solo juego pero eso no quiere decir que nuestro programas se pueda utilizar para mas juegos.

2.- La limitación que ofrece visualmente el simulador en ocasiones puede parecer poco, pero tengamos en mente que el simulador no puede calcular el consumo real de corriente entre las salidas de un pin del microcontrolador y verificar al 100% el comportamiento de los componentes ya que es solo una estimación del comportamiento de un circuito electrónico.

3.- En cuanto al valor de num= 35 + 65; el valor de 65 es solo para hacer notar que dentro de un programa puede haber requerido la suma de cierto valor para verificar el comportamiento del PUERTOB o bien como el valor de num == 100; solo bastaba con verificar que el valor del PUERTOB solo llegase a dicho valor y ahí acababa el Problema, pero mi intención fue que verificáramos algunas de la capacidades con que cuenta la programación en C a diferencia de Ensamblador.

Para finalizar espero sea de utilidad este material para poder aprender con practica los ejercicios sobre programación de microcontroladores y no vemos en una nueva entrega de Artes Electrónicas Pachani.

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 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 27 de Marzo de 2017].
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 27 de Marzo de 2017].

Software utilizados:
1.- MikroC_PRO_PIC_2016_Build.6.6.3 descargado de la pagina oficial de Microchip;
2.- Pluma. Editor de texto libre, se puede descargar de Internet, es un editor GNU Linux;


Microcontroladores PIC – Curso de Programación en MikroC (Parte 6 )

Microcontroladores PIC – Curso de Programación en MikroC Bienvenido nuevamente a los tutoriales de Artes Electrónicas Pachani , con...