Está en la página 1de 3

How to: Bootloader para PIC16F876A

Despus del xito del "Pablin 2 reloaded" haba pensado en disear un programador propio con ICSP, porque algunos detalles del diseo del programador Pablin 2 siguen sin gustarme. Pero he odo hablar del Bootloader y me he decidido por l, para micros con bastante memoria es mucho ms cmodo. Que es un Bootloader? Es un programa muy pequeo (256 bytes en este caso) que permite descargar programas al PIC usando nicamente el puerto serie, sin ningn hardware adicional. Que ventajas tiene? Solo es necesario utilizar un grabador de PIC una vez, para grabar el programa Bootloader. Podemos hacerlo con un grabador prestado. Una vez cargado el Bootloader en el PIC ya podemos descargar en l nuestros programas va serie, sin necesidad de grabador, todas las veces que queramos. Si nuestro hardware incorpora puerto serie no es necesario quitar el PIC de su zcalo: usando el puerto serie de nuestro proyecto hacemos la descarga. Como funciona? El Bootloader se carga en el final de la flash de programa del PIC y coloca el vector de interrupcin de arranque apuntandolo. Arranca cuando alimentamos el procesador y espera un comando por el puerto serie. Si no lo recibe continua con la ejecucin normal de nuestro programa. Si lo recibe comienza a recibir un programa por el puerto serie y a grabarlo en la flash de programa del PIC. Que necesito? Es necesario tener el Bootloader configurado para nuestro hardware y cargado en el PIC, una conexin serie con el PC y el programa descargador (por ejemplo PICbootPlus). Tiene algn inconveniente? Si. Es necesario modificar nuestros programas para que puedan trabajar con el Bootloader. Segn el entorno de desarrollo Mplab, CCS, Hitech-C etc es ms o menos complejo, pero la modificaciones suelen ser incluir unas pocas lneas de cdigo. Adems no podemos usar los ltimos 256 bytes de memoria (en un PIC16F876 de 8K de memoria es el 3,1 % inutilizable) Cmo se hace: Yo he usado el Bootloader de Microchipc: http://www.microchipc.com/PIC16bootload/index.php, he descargado la ltima versin: Download Shane Tolmie PIC bootloader v9-50. Alternativamente pueden descargarse los archivos de mi servidor: Shane Tolmie PIC bootloader v9-50. Una modificacin del software de comunicacin, con mini terminal y alguna opcin para depuracin de protocolo serie (incluye fuentes en Builder 6): picbootplus2.rar Una vez descomprimido el archivo vemos que contiene muchos ficheros. En la carpeta "bootloader hex files for 16F87xA compatible bootloader" hay Bootloaders ya ensamblados y configurados para distintos cristales y velocidades de comunicacin, para el PIC 16F876A, y para el PIC 16F876 en "bootloader hex files for 16F87x compatible bootloader". Sin embargo nos advierten que son versiones antiguas y que es mejor compilar nosotros mismos la ltima con los parmetros adecuados. En "assembly source for 16F87xA compatible bootloader" tenemos un proyecto para MPLAB con un fuente en ensamblador (bootldra.asm) que tenemos que modificar segn nuestras necesidades. Esta es la zona a modificar: ;================== User setting section ====================================== list p=16f877a ; <<< ajusta el tipo de PIC ( por defecto 16F877a, ponerlo a 16F876a )

; poner el mismo PIC en las opciones del proyecto de MPLAB #define ICD_DEBUG 0 ; <<< si se usa el depurador MPLAB ICD, bajar el downloader 256 bytes para hacerle sitio [0|1] #define FOSC D'20000000' ; <<< Poner la frecuencia de nuestro cristal [Hz], max. 20 MHz ;#define BAUD D'38400' ; <<< poner la velocidad de comunicacin con el PC: baud rate [bit/sec] #define BAUD D'19200' ; <<< set baud rate [bit/sec] #define BAUD_ERROR D'4' ; <<< Poner el error de velocidad de comunicacin [%] NO LO HE TOCADO #define TIME ; <<< Poner el mtodo de arranque del bootloadert PIN/TIME ; PIN : arranca al poner el pin de aranque a cero ; TIME: arranca si se recibe el comando IDENT dentro de un tiempo definido por TIMEOUT #define TRIGGER PORTB,7 ; <<< solo si se usa PIN - poner el puerto y el bit: PORT_X,PIN_NR #define TIMEOUT D'2' ; <<< solo si se usa TIME - poner el tiempo [0.1s], max. 25 sec #define WATCHDOGTIMER 0 ; <<< Watchdog timer por defecto a OFF/ON [0|1] Una vez modificado ensamblamos nuestro proyecto (yo he usado el MPLAB 7.01) y obtenemos un " bootldra.hex" que es lo que tenemos que grabar en el PIC, usando un grabador convencional. En las carpetas "Downloader.... " hay varios descargadores para diverss sistemas operativos, segn nuestras necesidades. En "Downloader Windows in BC++ plus terminal" tenemos el "PICbootPlus.exe" que es el descargador que he usado yo. En la seccin de Microchipc Frequently Asked Questions (FAQ) encontramos preguntas y respuestas a problemas comunes con el Bootloader. Yo uso el compilador CCS 3.236, y me informa que para adecuar mis programas al uso del Bootloader tengo que incluir esta lnea en mi fuente en C: #org 0x1F00, 0x1FFF void loader16F876(void) {} //protect bootloader code for the 8k 16F876/7 Que sirve para que el compilador reserve memoria para el Bootloader e informe si mi programa lo va a machacar. Una vez que hemos grabado el PIC con el Bootloader y pinchado en nuestro hardware, con su puerto serie conectado al PC, y hemos compilado nuestro programa con la modificacin correspondiente podemos descargarlo en el PIC. Ejecutamos el "PICbootPlus.exe" y con el botn "search" buscamos el fichero .hex que queremos descargar. El nombre aparecer en la ventana a la izquierda de "search". Ajustamos el puerto COM1 o el que usemos en el apartado Port y la velocidad igual a la que hayamos configurado en el Bootloader en el apartado BaudRate. MArcando EEPROM descargamos tambin en el PIC la eeprom de datos. Estos datos son memorizados en un fichero .ini para la prxima vez que usemos el "PICbootPlus.exe". Pulsamos el botn "Write" y en la ventana "info" aparecer "Reset" ya al momento "Searching for Bootloader". El "PICbootPlus.exe" est enviando el comando IDENT al PIC, y espera contestacin. En este momento alimentamos nuestro PIC y, si la comunicacin es correcta, aparecer "Writing, please wait" y una barra de progreso comenzar a avanzar de izquierda a derecha. Cuando haya terminado aparecer "ALL OK!" y ya est grabado. Cada vez que recompilemos nuestro programa solo tenemos que repetir este proceso y ya estar grabado el PIC de nuevo. En la parte inferior del "PICbootPlus.exe" tenemos un mini terminal serie con el que podemos comunicarnos con nuestro programa una vez que ha sido cargado en el PIC. Solo tenemos que ajustar la velocidad acorde con la que hayamos puesto en nuestro programa (que no tiene nada que ver con la que tena el Bootloader). IMPORTANTE:

Desde que arranca el programa Bootloader hasta que le transfiere el control a nuestro programa, TIMEOUT segundos que por defecto son 0,2 segundos, las patas del PIC estn todas como ENTRADAS lo que significa que, las que tengan que ser salidas, sern vistas por los chips auxiliares como a 1. Durante la carga del programa esta situacin se prolonga TODO EL TIEMPO que dura la carga (varios segundos). En mi caso el L293D que controla los motores "ve" las salidas PWM a 1 durante este tiempo y se conectan los dos motores a la vez, hasta que arranca mi programa y controla las patas del PIC. Hay que tenerlo en cuenta y usar lgica negativa en las salidas (que activen las cosas con un 0), si es posible, o poner un interruptor de corte de potencia para evitar movimientos incontrolados durante este tiempo. Si se coloca un inversor en las salidas PWM para que sean activas a 0 en vez de a 1 en el programa escribir un valor 0 en el PWM dar la mxima salida y un valor 255 (para 8 bit) dar la mnima salida. En C de CCS se puede escribir: unsigned int ciclo; set_pwm1_duty (ciclo): // Para lgica positiva de las salidas set_pwm1_duty(255-ciclo); // Para lgica negativa de las salidas