Blog

July 27, 2015

Blinky RGB con CEX Board PIC18F

Para este proyecto se utiliza el compilador XC8 de Microchip y el MPLABX IDE, como editor. Las dos herramientas se pueden descargar de la página e instalar directamente en cualquier computador compatible

Los enlaces para descarga:

http://www.microchip.com/pagehandler/en_us/devtools/mplabxc/

En las pestañas Downloads se pueden descargar tanto el IDE como el compilador.

Una vez descargados e instalados se procede a abrir el MPLABX             , es en este editor donde se configurará todo el proyecto, se debe tener muy en cuenta en qué carpeta quedarán guardados los archivos del proyecto ya que ahí es donde se encuentra los archivos generados para programar el PIC.

Una vez abierto el MPLABX click en File -> New Project ó Archivo -> Nuevo proyecto y se despliega la siguiente ventana:

MPLABNEWPROJECT1

Se escoge esta opción: Microchip Embedded -> Standalone Project, click en next o siguiente.

En la siguiente ventana se debe escoger el dispositivo a programar o el PIC utilizado, en este caso como la CEX Board tiene un PIC18F25K50, se escoge esta opción:

 

 

 

MPLABNEWPROJECT2

Una vez elegido, click en siguiente.

En la siguiente ventana se debe elegir el programador, como la CEX Board ya contiene bootloader para su programación este paso casi no tiene importancia, sin embargo también podría programarse con cualquier otro programador, se puede escoger Pickit3 y continuar:

MPLABNEWPROJECT3

Click en next y aparecerá la ventana donde se debe elegir el compilador, en este caso se hará uso del compilador XC8 de Microchip:

MPLABNEWPROJECT4

Click en siguiente, y se abre una nueva ventana donde se le debe dar un nombre al proyecto y elegir la carpeta en donde se guardará dicho proyecto. Se debe tener en cuenta en dónde queda guardado el proyecto para luego buscar el archivo .hex generado.

MPLABNEWPROJECT5

En este caso se le da el nombre al proyecto: RGB-Blink-PIC18F25K50, y se guarda en la carpeta C:\MPLAB\

Por ahora, se dejan las demás opciones por defecto y click en Finalizar o Finish.

Ahora se observan las nuevas carpetas creadas en el visor de proyectos de MPLABX

MPLABNEWPROJECT6

Para este sencillo proyecto sólo necesitamos un archivo para configurar, donde se encuentra la función main() para el programa principal que vamos a descargar en el PIC.

Click derecho sobre la pequeña carpetica Source Files, click en New -> C Source File:

MPLABNEWPROJECT7

Y se le da nombre al nuevo archivo, en este caso se llamó main:

MPLABNEWPROJECT8

Click en Finish y deberá aparecer dentro de la carpeta Sources el archivo main.c:

MPLABNEWPROJECT9

Doble click sobre el archivo para abrirlo y deberá aparecer a la derecha:

 

MPLABNEWPROJECT10

 

Este es el archivo donde se creará el programa principal.

En primer lugar se deben configurar unos bits de control propios de cada PIC, entre ellos se encuentra elegir la fuente de reloj, habilitar reset, habilitar watchdog, low power reset, etc. El código para la configuración de estos bits se puede obtener mediante una herramienta de MPLABX. Para ello click en la barra de menús Window -> PIC Memory Views -> Configuration Bits:

MPLABNEWPROJECT11

En la parte de abajo aparecen varios campos configurables, por ahora sólo se selecciona el oscilador interno y se deshabilita el watchdog, por ahora no se necesita profundizar en los demás bits de configuración y se pueden dejar por defecto

MPLABNEWPROJECT12

Click en Generate Source Code to Output y se copia sólo el código hasta CONFIG2H y se puede omitir de ahí en adelante ya que no se mueve nada más que se configure en el PIC que venga así por defecto

MPLABNEWPROJECT13

Se pega este código dentro del archivo main.c creado anteriormente:

MPLABNEWPROJECT14

Creamos una pequeña función de delay, que lo único que consiste es en generar un pequeño retardo haciendo que el procesador no haga nada en este rato:

void delay(void);

 

void delay(void){

long int i=0;

for(i=0;i<10000;i++);

return;

}

 

Y luego se crea la función main, que es donde se ejecuta todo el programa:

void main(void){

TRISAbits.TRISA2 = 0;           //Pin RA2 como salida

TRISAbits.TRISA3 = 0;           //Pin RA3 como salida

TRISAbits.TRISA4 = 0;           //Pin RA4 como salida

 

ANSELA = 0;                     //Pines puerto A como digitales

 

PORTAbits.RA1 = 1;              //Apagar todos los leds (ánodo común -> 1 apagado, 0 encendido)

PORTAbits.RA2 = 1;

PORTAbits.RA3 = 1;

 

while(1){

PORTAbits.RA2 = 0;

PORTAbits.RA3 = 1;

PORTAbits.RA4 = 1;

delay();

PORTAbits.RA2 = 1;

PORTAbits.RA3 = 0;

PORTAbits.RA4 = 1;

delay();

PORTAbits.RA2 = 1;

PORTAbits.RA3 = 1;

PORTAbits.RA4 = 0;

delay();

}

}

 

El código quedará algo como:

MPLABNEWPROJECT15

Ahora se pasa a explicar lo que hay dentro de la función main():

 

TRISXbits sirve para configurar los puertos X del pic, en este caso se configura el puerto A del PIC. Si se le da el valor de ‘0’ el puerto quedará configurado como salida, si se le da el valor de ‘1’ el puerto será una entrada (0 -> Output, 1 -> Input), así la instrucción TRISAbits.TRISA2 = 0; indica que el pin 2 del puerto A (RA2) se configura como salida. Así lo mismo para los puertos RA3 y RA4, y estos serán los encargados de encender y apagar cada uno de los LEDs del RGB. Así que se deberá hacer la conexión adecuada para que correspondan, esto es conectar estos puertos a cada uno de los LEDs del RGB.

 

La siguiente instrucción ANSELA = 0; sirve para establecer que el puerto A será puerto de entrada digital, aunque el puerto no está configurado como entrada, es bueno declararlo así digital para evitar inconvenientes.

 

Las siguientes tres instrucciones, PORTAbits.RAX = 1;  lo único que harán será darle valor al respectivo pin X, es decir si se le da valor ‘0’ habrá un cero lógico a la salida del pin (~0V) y si se le da el valor ‘1’ habrá un 1 lógico a la salida del pin (~+5V con el PIC que usa la CEX ó ~+3.3V en otros PICs). Luego estas instrucciones lo que hacen es apagar todos los leds poniendo 5V a cada uno de los tres puertos. Los leds se apagan ya que son de ánodo común, luego si en el cátodo hay +5V el led estará apagado y si hay 0V el led encenderá.

 

Por último se encuentra el bucle infinito while(1) que es donde el procesador se quedará ejecutando por siempre, el código dentro del bucle es bastante sencillo y consiste en que se enciende uno de los colores o led del RGB y se apagan los otros y se deja un rato así encendido mientras se ejecuta la función delay() luego el siguiente color hasta el último y el ciclo vuelve a comenzar con el color que se inicia. Primero se le da a RA2 = 0 para encenderlo y apagar los otros, luego RA3 = 0 y lo mismo para RA4 cerrando el ciclo.

 

Una vez realizado todo el código se le da click en compilar o clean and build:

MPLABNEWPROJECT16

 

Con cualquiera de los dos se compila el proyecto y no debería haber errores si todo se realizó correctamente. En caso de errores revisar bien el código. Para descargar el programa en el PIC, es necesario saber dónde quedó el archivo .hex generado. Este se busca en la carpeta donde se creó el proyecto al inicio, después en la carpeta dist/default/production. En este caso el archivo quedó en la carpeta:

 

C:\MPLAB\RGB-Blink-PIC18F25K50.X\dist\default\production

 

Y el archivo se llama:

 

RGB-Blink-PIC18F25K50.X.production.hex

 

Para proceder a descargar el programa dentro del PIC se procede con el bootloader, y para esto hay otro tutorial.

 

Se debe tener en cuenta que en la CEX Board no todos los leds del RGB están conectados a un puerto del PIC, solo hay uno conectado directamente, para los otros dos habrá que realizar la respectiva conexión al puerto digital correspondiente.

 

MPLABNEWPROJECT17

 

Sólo el D2 está conectado directamente a la salida digital de uno de los pines del PIC, RA4:

 

MPLABNEWPROJECT18

Como el programa está hecho con RA2 y RA3 habrá que hacer la conexión respectiva:

 

A0 con D9 y A1 con D6

 

DSC06871 DSC06873 DSC06872

Aprende, Tutoriales Básicos
About Jose Daniel

Leave a Reply

Your email address will not be published. Required fields are marked *