¿Como configurar un microcontrolador PIC? - Primer Hola Mundo

0

Configuración de un PIC - Hola Mundo

En esta oportunidad aprenderemos a como configurar un microcontrolador PIC18F4550 para su funcionamiento. Estas configuraciones se pueden replicar en otros microcontroladores.

📝En este artículo encontrarás:



Creación de los archivos del proyecto

Bien para empezar vamos a crear un nuevo proyecto. Seleccionamos file>>New Project

Ahora seleccionamos Standalone Project y le damos a next

Ahora seleccionamos el PIC que vamos a utilizar (PIC18F4550), también voy a usar proteus para la simulación, por eso en tool selecciono Simulator. Ahora le damos a next.

En esta parte debemos escoger la herramienta de compilación. En mi caso, yo he instalado el xc8 que contiene las toolchains (herramientas). Selecciono esa opción y le doy a next.

Ahora debo colocar el nombre a mi proyecto en project name, en nuestro caso se llamará HolaMundo. Además debo seleccionar la carpeta en la que se guardara nuestro archivo (project location). Hay que procurar que las carpetas que pertenecen a la ruta de nuestro proyecto no contengan en su nombre ningún espacio en blanco, esto nos puede traer problemas a la hora de compilar nuestro proyecto. Si todo esta conforme le damos a next.

Siguiendo estos pasos, ya hemos creado nuestro proyecto:

Ahora vamos a crear los archivos fuente (config.h y main.c). Los archivos fuente son los archivos de texto donde vamos a escribir el código. 
Empezamos por el main.c (los archivos fuente en c). Los archivos .c se guardan en la sección "Source File".  Primero tenemos que darle clic derecho a "Source File", escogemos "New" y le damos a la opción "C Main File" 

Si no encontramos esta opción, tenemos que darle a "Other". Después nos vamos a "c" y le damos clic a "C MainFile". Ahora le damos next.



Para terminar. Nos pedirá que le introduzca un nombre a mi archivo .c. Le pondremos que se llame main. Y le damos a Finish. De esa manera creamos nuestro archivo main.c



Ahora crearemos el archivo de cabecera "config.h". Los archivos .h se guardan en la sección "Header File". Para crear este archivo hacemos el mismo procedimiento anterior pero ahora con la sección "Header File". Clic derecho, "New" y le damos a la opción C header File.

Si no nos aparece esta opción, nos vamos a la opción otros. Le damos clic a "c" y seleccionamos la opción "C Header File". Después, colocamos como nombre del archivo "config". Le puedes poner otro nombre, pero en mi caso, elegiré ese. Le damos a finish y listo.



La razón por la que le hemos colocado el nombre config. Es porque, en esta carpeta realizaremos las configuraciones para las condiciones iniciales de nuestro microcontrolador.

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


Condiciones iniciales de un microcontrolador

Las condiciones iniciales a las que nos referimos son, por ejemplo: definir si usaremos un oscilador interno o externo. Si el reset va a estar habilitado o deshabilitado. Contar con una protección a los sobrevoltajes, etc. 
Hay muchas formas de configurar un microcontrolador, pero nosotros solo modificaremos 5 valores, para hacer que nuestro microcontrolador funcione. Se podría decir que esta es la forma más básica de configurar las condiciones iniciales.
Para hacer esto, nos vamos a Window >> Target Memory Views >> Configuration Bits. Con esto, aparecerá en la parte de abajo la configuración de los bits.


Con la configuración tal cual está (sin hacerle cambios), el microcontrolador no va a funcionar. Lo mínimo para que funcione el microcontrolador es hacerle 5 modificaciones. Para condiciones mas avanzadas se le puede aplicar bits de protección de código. En un posterior video hablaré sobre esto.
Bien, para configurar las condiciones iniciales hacemos lo siguiente:
Primero modificamos el campo de FOSC (la frecuencia del oscilador). Nosotros trabajaremos con el oscilador interno. Por eso, en la columna del option o en la columna del setting, vamos a seleccionar la opción de INTOSCIO_EC.

También debemos configurar el WDT (watchdog timer), por ahora se encuentra en ON. Pero lo pasaremos a OFF (es decir, deshabilitado). El watchdog o perro guardián es un temporizador interno de la unidad de control (UC), que dispone de su propio oscilador RC interno, que provoca un reset del sistema en caso de que éste se haya bloqueado. Por ahora no lo vamos a usar.


Ahora, cambiamos la opción del PBADEN de ON a OFF. Para que los pines sean digitales aunque ocurra un reset.

Ahora, pasamos a cambiar el Master clear. Este paso es opcional, lo podemos dejar en ON. Pero prefiero que se encuentre en OFF. 

Por ultimo, también pondremos en off, el bit de programación en bajo voltaje. No vamos a usar esa opción con este microcontrolador, por eso lo pasamos a OFF.

Esas fueron las 5 configuraciones que cambiamos. Después de esto, le damos a la opción de generar código.

Aparecerá lo siguiente: 

Copiamos ese código con control+C y nos vamos a nuestro archivo config.h. Borramos todo y pegamos el código que habíamos copiado. Después de esto, procederemos a programar el código de nuestra aplicación en el main.c.

¿Sabes que son los sistemas embebidos?. Quizás te gustaría revisar: https://educatronicosisc.blogspot.com/2022/03/que-son-los-sistemas-embebidos.html

Programación del main.c

Para nuestro primer programa vamos a hacer que un led conectado al puerto RB0 se enciende y apague cada 0.5 segundos. 

Empiezo definiendo la cabecera del programa, pongo un include y añado el archivo config.h que contiene las condiciones iniciales de trabajo de nuestro microcontrolador. Después definimos la frecuencia del oscilador del CPU, para nuestro caso será de 8MHz. Después incluimos <stdint.h>, la librería para los enteros no estándar. <stdio.h> es la librería que contiene la definición de las constantes y declaración de funciones, esta ya viene incluida, al igual que <stdlib.h>, la librería para la gestión de la memoria dinámica y control de procesos. 

Ahora nos dirigimos a la función principal, el int main. Dentro de las llaves tenemos que programar el código de instrucciones del PIC. Primero vamos a dejar vacío los paréntesis que se encuentran al costado del main. Estas variables no influyen en la programación. Y en el return vamos a quitarle todo dentro del paréntesis y en su lugar colocamos un 0. 

Ahora sí, primero colocamos OSCCON igual a 0x72. El OSCCON configura el oscilador interno. Este numero esta en hexadecimal. Lo que significa, en lenguaje binario es OSCCON=01110010. Nosotros en las condiciones iniciales habíamos declarado que íbamos a usar un oscilador interno a 8 MHz. Con el OSCCON introducimos esta frecuencia a nuestro sistema. Como dije, nuestra frecuencia de trabajo será de 8MHz, esto lo configuramos con los bits 4,5 y 6 del registro OSCCON, también declaramos un oscilador interno, esto lo hacemos con los bits 0 y 1 del registro  OSCCON. Es por eso que declaramos OSCCON=0x72.

Después declaramos el  pin RB0 como salida, esto lo hacemos colocando un TRISB, símbolo de ampersand, igual, símbolo de la virgulilla, que en programación significa negado. Entre paréntesis colocamos un 1 << 0. De esta manera hacemos lo que se llama un desplazamiento de bits. Básicamente le estamos diciendo al PIC que el pin RB0 va a ser una salida, porque los leds son periféricos de salida.

Ahora colocamos un while, el while es un blucle, todo lo que este dentro del while se va a repetir infinitamente. Dentro del while, primero ponemos en nivel alto el puerto RB0, dejamos que pase 500 ms o medio segundo. Después pasamos a nivel bajo el puerto RB0, y dejamos que pase medio segundo. Como estamos dentro del bucle while, esta secuencia se va a repetir. Ahora le damos al símbolo del martillo con la escoba para compilar nuestro proyecto. Si no hay errores, en la parte inferior aparecerá un mensaje que diga que la programación fue exitosa. Después de esto pasamos a la simulación en proteus.

/*Cabecera del programa*/
#include "config.h" //Cabecera de la configuracion de las cond. inic.
#define _XTAL_FREQ 8000000 //Definicion del oscilador del CPU
#include <stdint.h> //Libreria para los enteros no estandar
#include <stdio.h> //Libreria que contiene la definic. de las constantes y declar. de func.
#include <stdlib.h> //Libreria para la gestion de la memoria dinamica y control de procesos

/*Funcion principal*/
int main() {
    
    OSCCON =0x72; //Configura el oscilador interno a 8MHz
    TRISB &=~(1<<0); //Configura el RB0 como salida
    
    while(1){
        
        LATB |=(1<<0); //Encendemos el led en RB0
        __delay_ms(500); //Esperamos 500 ms
        LATB &=~(1<<0); //Apagamos el led RB0
        __delay_ms(500); //Esperamos 500 ms
    }

    return 0;
}


Simulación en Proteus

¿Sabes que son los sistemas embebidos?. Quizás te gustaría revisar: https://educatronicosisc.blogspot.com/2022/03/que-son-los-sistemas-embebidos.html

Para la simulación en Proteus es necesario copiar la ruta que aparece debajo del BUILD SUCCESSFUL. Copiamos desde la letra C, hasta la letra x.

Ahora, nos dirigimos a Proteus, le damos clic al PIC, y pegamos esta ruta, en la parte del "Program File". La frecuencia del oscilador es de 8 MHz. Por eso, en el "Processor clock frequency" cambiamos el 4 por un 8. Le damos a OK, y después le damos a play. Podemos ver como el led se prende y se apaga cada medio segundo.

¿Tengo que crear los archivos config.h y main.c desde 0 si hago otro proyecto?

Si tienes pensado hacer otro proyecto. No es necesario, que vuelvas a crear el archivo config.h y main.c desde 0. Por ejemplo, ahora voy a crear otro proyecto que se llame HolaMundo2. Este proyecto hará lo mismo que el HolaMundo. Prenderá y apagará un led en el pin RB0, pero esta vez cada 2 segundos.

Para no crear todo desde 0, copiaremos las carpetas de config.h y main.c del proyecto HolaMundo, y lo pegaremos en el archivo del proyecto HolaMundo2. 

Ahora, nos dirigimos al mplab. Y en la seccion Header File le damos clic derecho, y nos vamos a la opción "Add Existing Item". Y debemos seleccionar el archivo config.h. De esa manera, ya no necesitaremos configurar desde 0 las condiciones iniciales de nuestro proyecto.

Con el archivo main hacemos algo parecido. E
n la sección Source File le damos clic derecho, y nos vamos a la opción "Add Existing Item". Y debemos seleccionar el archivo main.c. De esa manera, estamos reusando el archivo main del primer proyecto que creamos.

Como para este caso, vamos a prender y apagar cada 2 segundos, el led conectado al pin RB0. Lo único que haremos es cambiar el valor del delay y colocaremos 2000. Después le damos a compilar. Pegamos la ruta del archivo en el PIC del proteus y listo.





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


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…