lunes, 1 de junio de 2020

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

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 los bits (Parte 1)




Capitulo 02.

Bifurcaciones y bucles

Continuando con la serie de tutoriales , 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 if...else (si ... entonces)

Este primer tipo de instrucción nos permite la ejecución de las instrucciones1 si la condición es verdadera, de lo contrario se ejecutan las instrucciones2. Las llaves { } no son necesarias cuando hay una sola instrucción.

                    if (condición) {

                        instrucciones1;

                    } else {

                        instrucciones2;

                    }

Existen diferentes variantes de la anterior instrucción, por lo que vamos a mostrar las diferentes maneras de trabajar con la instrucción de decisión if...else entonces empecemos:


Ejemplo A: Si el contenido de la variable ‘ codigo ’ es igual al contenido de la variable ‘ clave ’, se ejecutan las primeras cuatro instrucciones; de lo contrario se ejecutan únicamente las últimas cuatro instrucciones.

                        if (codigo==clave) {

                            RA0_bit=1;

                            Delay_ms(500);

                            RA0_bit=0;

                            Delay_ms(500);

                        } else {

                            RA2_bit=1

                            Delay_ms(200);

                            RA2_bit=0

                            Delay_ms(200);

                       }

Vemos fragmento del código que iremos implementando en el siguiente ejemplo:


Problema 01.- Realizar un programa que analice el estado del nibble alto (clave) y estado del nibble bajo (codigo) del puerto B de tal modo que cuando sean iguales por el puerto A se muestre por el bit RA0 un pulso 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 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 nuestras o bien para que otra persona, tenga información sobre como funciona nuestro código. 


Ahora que tenemos nuestro diagrama de flujo podemos empezar a escribir nuestro codigo en C ,escribamos el siguiente código según nuestra receta anterior, para facilitar 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 copiaremos y compilar:



 Una breve explicación de como sigue la secuencia del anterior programa:


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 en el nibble bajo (codigo) y el nibble alto (clave) por medio de la instrucción PORT de esta manera recuperaremos el valor del puerto en las variables codigo y clave , una vez tengamos estos datos lo compararemos en la instrucción de decisión if else de modo que podemos tomar decisiones .

6).- Por ultimo se muestra el pulso con un periodo de 0,5 seg o 0,2 seg hacia el exterior, según la toma de decisiones de codigo igual a clave.


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 lab07.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 lab07.hex y lab06.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 lab07.hex a proteus 8,2.



Terminando tenemos:


 Es momento de simular, vamos para verificar que lo que hemos programado esta bien. Recordemos que estamos utilizando el nibble alto (clave) y bajo (codigo) del puerto B para realizar una comparación de modo que cuando son iguales hay un pulso de 0,5 seg en cambio cuando son diferentes hay un pulso de 0,2 seg .

Veamos algunas imagenes de la simulacion en Proteus:

Cuando ambos nibbles son iguales:


 Ahora cuando son diferentes:



 Vemos el cambio que existe al momento de la simulacion cuando son iguales y cuando son diferentes los nibbles para nuestro programa.


Algunas observaciones

Tenemos que tener en mente lo siguientes:

1).- Ya aprendimos en el anterior tutorial como manejar un bit , pero nos damos cuenta que para manejar datos de mayor dimensión nos puede ser de utilidad manejar nibbles enteros como el alto y bajo por lo que cuando recuperamos dichos valores podemos guardarlos en las variables las cuales luego podemos procesar con nuestro microcontrolador para realizar cálculos y análisis de fenómenos físicos como cálculos matemáticos. Etc...

2).- la facilidad con que podemos recuperar dichos datos del exterior hacia el microcontrolador depende de la capacidad para elaborar programas acordes a las capacidades de nuestro microcontrolador , por lo que a medida que aprendamos mas de las capacidades de estos microcontroladores podremos resolver varias necesidades.


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

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...