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;