COMO CREAR LIBRERIAS EN MPLAB PARA MICROCONTROLADORES PIC

0

 Autor: Mauro Montoya Arenas

CREACION DE LIBRERIAS EN MPAB PARA MICROCONTROLADORES PIC

📝 Marcas de tiempo:

En esta oportunidad, vamos a hacer el proceso de como crear una librería en microcontroladores PIC usando MPLAB. Desde ya te adelanto, que hay muchas formas de como crear librerías para un solo dispositivo, el nombre de las variables y funciones pueden cambiar de una librería a otra. Nosotros en esta oportunidad, veremos una de estas formas.

Para este ejemplo, vamos a crear la librería del display multiplexado. Este dispositivo ya lo hemos usado en otro video y hemos explicado su programación. La idea de crear la librería de este dispositivo, es para poder usarlo en cualquier otro proyecto. 


Display multiplexado

Primero que todo voy a explicar este dispositivo. El display multiplexado es un display que recibe la información de un numero a través de sus pines A, B, C, D, E, F y G. Estos pines controlan cada led que forma un número. Dependiendo del número, esos leds pueden estar prendidos o apagados. Ahora, los pines ena prenden y apagan los números que pertenecen a las decenas y unidades.


Básicamente ocurre lo siguiente:
El display multiplexado del ejemplo es uno de ánodo común. Supongamos que queremos mandar un 12 al display. Primero ena1 (que controla las unidades) estará en 0, y ena2 (que controla las decenas) estará en 1. Como el display es ánodo común, ena1 estará deshabilitado y ena2 estará habilitado. Entonces, en el tiempo 1 el numero 2 (que pertenece a la unidad) estará encendido. 


Para el tiempo 2, el ena1=1 y ena2=0. Es decir que, ena1 estará habilitado y ena2 deshabilitado. En ese momento, se mostrará el número de la decena. En este caso, el 1. 


Ahora, si hacemos que el tiempo 1 y 2 sean muy pequeños, vamos a conmutar muy rápido el número que se mostrará en el display multiplexado, de tal manera que parecerá que aparecen los 2 números al mismo tiempo. Lo que comúnmente se conoce como el efecto POV. El efecto POV es un fenómeno visual que demuestra que una imagen permanece en la retina humana una décima de segundo antes de desaparecer completamente.

¿Conoces la diferencia entre Hardware, Software y Firmware?. Quizás te puede interesar: https://educatronicosisc.blogspot.com/2022/03/hardware-software-y-firmware.html


Programación del proyecto

Bien, ya que conocemos este dispositivo, vamos con la programación. En este proyecto voy a crear un contador del 0 al 15. Bien, primero creo la cabecera del programa. Esto ya lo explique en videos anteriores. Después voy a definir la variable Puerto_Display, que va a ser igual al registro TRISD. Para poder igualar una variable a un registro, necesitamos del #define. Esto no se podría hacer usando una variable global. Después defino la variable Puerto_Ena, que es igual al TRISE. Display va a ser igual al registro LATD. Ena va a ser igual al registro LATE. ena1 va a ser 0 y ena2 va a ser 1.

Después defino una variable global llamada display7a, que es un array que va a contener los números del 0 al 9 que se mostraran en el display multiplexado. Estos números están en su forma hexadecimal.


Después declaro la función "mostrarDisplay". Esta función va a tener como entrada el numero que se mostrara en el display. Dentro de la función mostrarDisplay separamos la decena y unidad del número que introducimos. La unidad se mostrará durante 1 ms, y la decena se mostrará durante otro milisegundo. Esta secuencia se repite 200 veces. Es decir que, cada número completo se mostrará durante 400 milisegundos antes que aparezca el siguiente numero. 

En el int main primero declaramos la variable cuenta como un entero de 8 bits cuyo valor de inicio será de 0. Declaramos también el registro ADCON1=0x0F y el registro OSCCON igual a 0x72 (estos registros ya lo explicamos en videos pasados). En la cabecera habíamos declarado que la variable Puerto_Ena era el registro TRISD. Si a esa variable yo la defino como 0, básicamente estoy diciendo que todos los pines del puerto D son salidas.
Los pines ena1 y ena2, que están conectados al puerto E también serán salidas y los declararemos como deshabilitados. Dentro del while aumentaremos en 1 el valor de la variable cuenta, de tal manera que cuando llegue a 15, el contador se resetee a 0.
Ahora le vamos a dar a compilar, copiamos la ruta del proyecto. Lo pegamos en el microcontrolador del proteus. Ahora le damos a correr y notaremos que el proyecto funciona correctamente. Programar el funcionamiento de un dispositivo de esta manera tiene una desventaja. Si quisieras volver a usar ese dispositivo en otro proyecto, tendrías que crear todo el código de funcionamiento desde 0. 
Por eso, vamos a crear una librería que contenga el modo de funcionamiento del display multiplexado. De tal manera que pueda ser reutilizable para cualquier otro proyecto.


/*Cabecera del programa*/
#include "config.h" /*Cabecera con la configuracion de fuses*/
#define _XTAL_FREQ 8000000 /*Definicion del oscilador del CPU*/
#include <stdint.h>  /*Libreria para los enteros no estandar*/
#include <xc.h>

#define Puerto_Display TRISD
#define Puerto_Ena     TRISE
#define Display        LATD
#define Ena            LATE
#define ena1           0
#define ena2           1

/*Variables globales*/
uint8_t display7a[10]={0xC0,0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

/*Declaracion de funciones*/
void mostrarDisplay(uint8_t numero);

/*Funcion principal*/
int main(void) {
    
    uint8_t cuenta=0;
    OSCCON=0x72; /*Configura Oscilador interno a 8 MHz*/
    ADCON1=0x0F; /*Configura los pines ANx a digital*/
    Puerto_Display = 0; /*Configura el puerto D como salida*/
    /*Salida para los Ena*/
    Puerto_Ena &=~ ((1<<ena1)|(1<<ena2));
    /*Deshabilitamos los 2 displays*/
    Ena |= ((1<<ena1)|(1<<ena2));
    
    while (1){
        
        cuenta++;
        mostrarDisplay(cuenta);
        
        if(cuenta==15){
            cuenta=0;
        }
        
    }

    return 0;
}


/*Definicion de funciones */
void mostrarDisplay(uint8_t numero){
    
    uint8_t uni,dec,j;
    uni=numero%10; /*Obtengo las unidades*/
    dec=numero/10; /*Obtengo las decenas*/
    
    for(j=0;j<200;j++){
        /*Mostramos las unidades*/
        Display = display7a[uni];
        /*Habilitamos el display corrspondiente*/
        Ena &=~ (1<<ena2);
        __delay_ms(1);
        /*Desabilitamos el display*/
        Ena |= (1<<ena2);
        /*Mostramos las decenas*/
        Display=display7a[dec];
        /*Habilitamos el display*/
        Ena &=~(1<<ena1);
        __delay_ms(1);
        /*Deshabilitamos el display*/
        Ena |= (1<<ena1);
    }
}



¿Sabes que son y para que se usan las máscaras en la programación de microcontroladores?. Quizás te puede interesar: https://educatronicosisc.blogspot.com/2022/05/uso-de-las-mascaras-en-la-programacion.html


Creación de la librería

Bien, para crear una librería tenemos que crear un archivo .h en la sección del header del proyecto, y un archivo .c en la sección Source del proyecto. 
Empezamos creando el archivo header .h. Le pondré de nombre Display_mult


Ahora se nos generó un archivo .h. Voy a borrar esta parte del código que no me sirve. Ahora, me dirijo al archivo main.c. Voy a cortar esta parte, y la voy a pegar en mi archivo Display_mult.h. 


Ahora, en la variable display7a voy a colocar que dicha variable sea un extern. De esa manera podré usar esta variable en un archivo fuera de la sección del Header. 


Ahora creamos el archivo .c. Para ello, tenemos que elegir la opción C Source File. 


Al nombre de ese archivo, también le pondré Display_mult, solo que ahora, su extensión será .c. Bien, primero voy a incluir el archivo Display_mult.h para continuar con la programación. Después regreso al archivo main.c y corto las funciones relacionadas a mi dispositivo. En este caso, solo cortaría la función mostrarDisplay, y lo pego en mi archivo Display_mult.c. Con estos pasos, ya tenemos nuestra librería creada.
Por ultimo, en la cabecera de mi programa main, voy a añadir la librería Display_mult para poder usarlo. Ahora le damos a compilar y nos vamos a la simulación en proteus. No es necesario pegar nuevamente la ruta del archivo en el PIC del proteus. Ya que se actualizará automáticamente.
Le damos a correr a la simulación, y comprobamos que nuestro proyecto funciona correctamente.


Visita nuestro canal de YouTube para mas contenido: https://www.youtube.com/channel/UC93Nt6sA-7r_S7EtGO44GeA


🔥 En la descripción del video encontraras el código del proyecto:

Entradas que pueden interesarte

Sin comentarios

Artículos populares

Procesamiento digital de señales (ejemplos usando matlab)

Procesamiento digital de señales (ejemplos usando matlab)

Autor: Mauro Montoya Arenas   PROCESAMIENTO DIGITAL DE SEÑA…

¿Como configurar un microcontrolador PIC? - Primer Hola Mundo

¿Como configurar un microcontrolador PIC? - Primer Hola Mundo

Configuración de un PIC - Hola Mundo En esta oportunidad ap…

PROYECTO: SISTEMA DE TRÁFICO VEHICULAR UTILIZANDO EL PIC 18F4550

PROYECTO: SISTEMA DE TRÁFICO VEHICULAR UTILIZANDO EL PIC 18F4550

Autor: Alexis                                       Contac…

¿Qué son los Sistemas embebidos?

¿Qué son los Sistemas embebidos?

Sistemas embebidos  🔴 En este articulo encontrarás: - Func…