2. El Primer Programa 2 EL PRIMER PROGRAMA En este capítulo se explicará como realizar un proyecto en MPLAB usando lenguaje C32 para el PIC32MX534F064H existente en la MINI-32. Primeramente necesita descargar el software MPLAB y el compilador C32 de la página de Microchip. Ambos se encuentran de manera gratuita. Instale el MPLAB y luego instale el C32 en las rutas predeterminadas. Creación del Proyecto 1. Abra el MPLAB. 2. Haga clic Project->Project Wizard para abrir el asistente de creación de proyecto (Figura 2-1). De clic en Siguiente. Figura 2-1. Asistente de creación de Proyecto 3. En el Step One seleccione el PIC32MX534F064H de la lista. De clic en Siguiente. 4. En Step Two seleccione Microchip PIC32 C-Compiler Toolsuite de la lista Active Toolsuite. De clic en Siguiente. Ing. Juan Ramon Terven Salinas 16 2. El Primer Programa 5. En Step Three debe crear un archivo de proyecto. Se recomienda guardar cada proyecto en un directorio diferente, ya que cada proyecto está formado por varios archivos. Este archivo de proyecto es un archivo con extensión .mcp el cual englobará todos los archivos que componen el proyecto. Haga clic en el botón Browse y navegue hasta el directorio donde se desea guardar el archivo de proyecto. Una vez en el directorio proporcione un nombre al archivo de proyecto y de clic en Guardar. En la Figura 2-2 se creó un archivo de proyecto llamado PrimerPrograma en la ruta mostrada. Figura 2-2. Creación de archivo de proyecto 6. En Step Four se agregan archivos existentes a nuestro proyecto. En este primer proyecto no agregaremos ningún archivo existente. Haga clic en Siguiente. 7. Listo! El proyecto ha sido creado, se muestra una ventana de Summary donde se muestran las características de nuestro proyecto. Haga clic en Finalizar. Una vez terminado el asistente se muestra la ventana principal del MPLAB con el proyecto vacío (Figura 2-3). La ventana que se muestra a la izquierda es la ventana del proyecto. En esta se muestran todos los archivos que componen nuestro proyecto. Ing. Juan Ramon Terven Salinas 17 2. El Primer Programa Todos los archivos fuente (con extensión .c) que componen nuestro proyecto deben agregarse a la carpetita llamada Source Files. Los archivos de cabecera de librerías ajenas a las contenidas en el lenguaje C32 deben ser agregados en la carpetita Header Files. Figura 2-3. Proyecto Vacío Creación del archivo fuente El siguiente paso es crear el archivo fuente en el cual escribiremos el código de nuestro primer programa. 1. Haga clic en File->New. Aparecerá un documento en blanco. Escriba el siguiente código. Si usted ha programado PICs antes observará que el código anterior es muy similar al de un PIC de 16 bits en lenguaje C30 e incluso a un PIC de 8 bits en C18. Programa 2-1. Primer Programa #include <p32xxxx.h> //Bits de configuracion #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20 #pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1 #pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON #pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON #pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD // Prototipo de función Ing. Juan Ramon Terven Salinas 18 2. El Primer Programa void retardoms(short x); int main(void) { AD1PCFG = 0xFFFF; _TRISD6=0; _TRISG6=0; while(1) { _LATD6 = 0; _LATG6 = 0; retardoms(100); _LATD6 = 1; _LATG6 = 1; retardoms(100); } return 0; // configura AN pins como digitales // pin RD6 como salida // pin RG6 como salida // // // // // // Apaga LED amarillo de MINI-32 Apaga LED rojo de MINI-32 retardo de aproximadamente 100ms Prende LED amarillo de MINI-32 Prende LED rojo de MINI-32 retardo de aproximadamente 100ms } //Función para generar un retardo void retardoms(short x) { int i, j; for(i=0; i<9000; i++) for(j=x; j>0; j--); } 2. Guarde el documento (File->Save) con el nombre codigo.c Debe especificar la extensión, ya que un proyecto puede tener muchos tipos de archivos. Figura 2-4. Código fuente listo 3. Ahora agregue el archivo fuente al proyecto en la carpetita de Source Files y seleccione Release. Vea la Figura 2-4. Ing. Juan Ramon Terven Salinas 19 2. El Primer Programa 4. Una vez hecho esto compile el proyecto haciendo clic en el botón Build All mostrado en la Figura 2-4. 5. Al compilar el proyecto debe mostrar BUILD SUCCEEDED. Esto indica que compiló sin errores y se generó el archivo .hex que será grabado en el PIC32. Grabación del PIC32 usando el Bootloader El siguiente paso es grabar el archivo hex en el PIC32 usando el software mikroBootloader. Este programa lo puede descargar de la siguiente página: http://www.mikroe.com/eng/products/view/711/mini-32-board/ El mikroBootloader es un programa desarrollado por MikroElectronika utilizado para comunicarse con el bootloader del PIC32 que contiene la tarjeta MINI-32 y grabar el código hexadecimal generado al compilar con MPLAB. Esta comunicación y grabación se realiza por medio de un cable USB con conector Mini-B de 5 pines en un extremo y conector tipo A en el otro extremo como el mostrado en la Figura 2-5. Figura 2-5. Cable USB requerido Ing. Juan Ramon Terven Salinas 20 2. El Primer Programa El procedimiento para grabar usando mikroBootloader es el siguiente: 1. Abra el mikroBootloader (vea la Figura 2-6). 2. Conecte el cable USB al PIC32 y a la computadora. Al hacer esto, el software del mikroBootloader reconocerá la MINI-32. 3. Siempre que se alimenta la MINI-32 o se resetea con el push-button entra a modo bootloader y dura 5 segundos esperando a que el usuario pulse el botón Connect del mikroBootloader. Si no se pulsa el botón Connect el PIC32 iniciará el programa que tiene grabado. Figura 2-6. mikroBootloader 4. Una vez que pulsa el botón Connect, debe indicar Connected en la History Window del mikroBootloader, ahora pulse el botón Browse for Hex y busque el archivo .hex generado cuando se compilo el proyecto. Por default, este archivo se encuentra en el mismo directorio del proyecto. 5. Pulse el botón Begin uploading. Al hacer esto, se grabará el programa en el PIC32, luego se reseteará el PIC32 y 5 segundos después iniciará la ejecución del programa grabado. ¡Listo! ¡Ya grabó su primer programa en un PIC32! Ing. Juan Ramon Terven Salinas 21 2. El Primer Programa Creación de librerías En el ejemplo anterior se creó una función de retardo llamada retardoms, la cual nos genera un retardo haciendo que el microcontrolador pierda tiempo. Esta función de retardos puede ser útil en muchos programas y para esto, tendríamos que copiar el código de la función en cada programa que la utilice. Para no tener que duplicar el código en cada programa que hagamos, la mejor solución es crear una librería que contenga la función retardoms y simplemente agregar la librería en cada programa que haga uso de esta función, de esta forma fomentamos la “reutilización de código”. Entonces crearemos una librería llamada retardos.h. Cada librería está formada por un archivo con extensión .h y uno o más archivos con extensión .c. En el archivo .h se escriben los prototipos de las funciones, variables globales usadas por la función y definiciones de constantes. En el archivo .c se escribe el cuerpo de las funciones cuyos prototipos se encuentran en el archivo .h. Los siguientes programas muestran el contenido de los archivos retardos.h y retardos.c respectivamente. Programa 2-2. Archivo retardos.h #ifndef _RETARDOS_H #define _RETARDOS_H void retardoms(short); #endif Programa 2-3. Archivo retardos.c #include "retardos.h" void retardoms(short x) { int i, j; for(i=0; i<9000; i++) for(j=x; j>0; j--); } Ing. Juan Ramon Terven Salinas 22 2. El Primer Programa Estos 2 archivos los guardaremos en un directorio llamado retardos el cual estará dentro de un directorio llamado librerias como se muestra en la Figura 2-7. El Primer programa se encuentra dentro del directorio Cap2 Primer Programa que se muestra en la figura. Figura 2-7. Estructura de directorios Ahora modificaremos el primer programa para incluir la librería retardos y quitar la función de retardo del archivo principal. A continuación se muestra el primer programa modificado con la librería retardos.h mostrada con azul. Programa 2-4. Primer Programa con librería de retardos #include <p32xxxx.h> #include "../librerias/retardos/retardos.h" //Bits de configuracion #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20 #pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1 #pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON #pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON #pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD int main(void) { AD1PCFG = 0xFFFF; _TRISD6=0; _TRISG6=0; while(1) { _LATD6 = 0; _LATG6 = 0; retardoms(100); _LATD6 = 1; _LATG6 = 1; retardoms(100); } return 0; // configura AN pins como digitales // pin RD6 como salida // pin RG6 como salida // // // // // // Apaga LED amarillo de MINI-32 Apaga LED rojo de MINI-32 retardo de aproximadamente 100ms Prende LED amarillo de MINI-32 Prende LED rojo de MINI-32 retardo de aproximadamente 100ms } Ing. Juan Ramon Terven Salinas 23 2. El Primer Programa Observe en la línea que agrega la librería: #include "../librerias/retardos/retardos.h" El uso de “../”, se refiere a que se regrese un directorio arriba de la posición actual (directorio Cap2 Primer Programa) . Es decir, esta forma de especificar la dirección de la librería es relativa a la ubicación del archivo fuente del programa. Para que el código compile sin errores, se deben agregar al proyecto los archivos retardos.c y retardos.h, de tal forma que la ventana de proyecto se vea como la Figura 2-8. Figura 2-8. Proyecto con librería incluida Ing. Juan Ramon Terven Salinas 24 2. El Primer Programa Bits Configuración Los bits de configuración proveen la configuración inicial del dispositivo. Estos bits están almacenados en memoria Flash en los llamados “Registros Fusible”. Los bits de configuración pueden ser configurados en el código como en el Programa 2-1. A continuación se repite el código de los bits de configuración: //Bits de configuracion #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20 #pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1 #pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON #pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON #pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD También pueden ser configurados en el entorno MPLAB en Configure>Configuration Bits… Se recomienda especificar los bits de configuración en el código por rapidez, ya que si se configuran en la opción de Configuration Bits, esto se debe hacer con cada proyecto nuevo; pero si se usa código solamente copia y pega el código de los Bits de Configuración. Para saber que bits de configuración tiene nuestro PIC y que valores podemos asignarles vamos a Help->Topics…->PIC32MX Config Settings (Vea la Figura 2-9). Aquí aparece la ayuda con la lista de todos los dispositivos que componen la familia PIC32. Figura 2-9. Ayuda de Config Settings El porque de estos bits de configuración se explicará a lo largo del curso cuando se explique el tema correspondiente. Ing. Juan Ramon Terven Salinas 25