Bueno, en realidad me falto proporcionar un poco de información, realmente el firmware del PIC no lo escribí yo, ya que esos programas para realizar bootloader son algo complejos, la intención de este post es describir paso a paso el proceso de puesta a punto del sistema de booteo desde donde conseguir los archivos necesarios, hasta grabar programas serialmente.
Ahora si, a lo que nos compete, primero que nada, espero que sepan lo que es un bootloader, a grandes rasgos es una interfaz que permite programarle directamente al micro los datos que conforman el programa, por medio de un puerto, en este caso el puerto serial, como el PIC 16F877a trae USART, solamente es necesario dotarlo de conectividad y a programar, (no se preocupen, posteriormente abordaré a detalle el circuito), dicha interfaz programa directamente la memoria flash del PIC, por lo que no es necesario un programador, funcional no creen?
Para poder programar dicho firmware en el PIC, necesitaremos programarlo una sola vez por el método convensional del programador, una vez que el firmware se encuentra cargado, ya podemos botar a la basura el programador jajaja, no se crean!.
Necesitamos 2 cosas:
1.- El
firmware en formato hexadecimal, listo para grabarlo en nuestro PIC.
2.- El
programa para PC desde donde cargaremos los programas.
todos los archivos necesarios se encuentran en la página de Microchipc (ojo, no Microchip), y se encuentra en el siguiente enlace
bootloader 16F7877AEl nombre del archivo es Shane Tolmie PIC16F87xA bootloader v9-60, dentro de la página mencionada lo encontrarán dentro del cuadro rojo:
Una vez que lo bajaron y lo descomprimieron, van a encontrar que en su interior hay muchas carpetas, unas referente al codigo fuente en ensamblador para el 16F87x y otra para el 16F87xA, otras dos referentes al codigo fuente en hexadecimal igual, para ambos PICs, en este caso, abriremos la que dice "bootloader hex files for 16F87xA compatible bootloader", despues la carpeta legacy y allí dentro encontraran varias versiones distintas:
como se observa hay para el 16F873A, 16F876A y 16F877A, para cristal de 16 y de 20 MHz, y para velocidades de transmision de datos de 38400 baudios y de 56000 baudios, escojan la que se adecue más a sus necesidades. Yo escojí el cristal de 20 MHz y la velocidad de transmision de 56000 baudios. La velocidad de transmision que escojan, es la que le tienen que poner a todos sus programas que utilicen comunicación serial para que funcionen adecuadamente.
Bueno, pues lo que restaria es cargar el firmware que seleccionaron con el programador de su preferencia y dejar el PIC listo con dicho software, espero que en este tema no haya dudas.
Una vez que hemos cargado el firmware, toca hablar del software para la PC, también se encuentra dentro de los archivos que bajaron, como yo tengo Windows, hablare solamente del programa para windows, que se encuentra en la carpeta "Downloader Windows in BC++ plus terminal", es el "PICbootPlus", cuyo ícono es un micro. Aquí tienen una captura del programa:
Como se puede ver es sumamente sencillo, y además trae incluida una hiperterminal de comunicación serial, solamente seleccionan su puerto (en mi caso es el COM1), la velocidad del Baudrate que debe ser la misma que en sus programas (por lo general yo manejo 56000) y finalmente escoger su programa para cargarlo por rs-232. Esta parte la veré más a fondo después de hablarles del circuito que ocupo.
Tengo que ser franco con ustedes, no he usado el programa al 100%, por lo que no se para que son algunas funciones, como EEPROM, o las casillas CR->CR+LF in y out, la casilla Local eccho regresa el valor que se envia al PIC, para comprobar si llego bien.
Con estos pasos ya deberían de estar listos para programar por el bootloader, pero falta hablar sobre el circuito.
CIRCUITO DE PRUEBA
Debido a que yo buscaba una tarjeta que me sirviera para múltiples propósitos, me diseñé una propia, que se basa en el MAX232 para la comunicación, además le agregué algunas cosillas como 8 leds para jugar con las teclas, un puerto para LCD, para mostrar lo que está pasando y 9 conectores para servos, para que en el futuro pueda controlar un robot, claro, que para poder utilizarlos, hay que cargarle un programa adecuado.
Esta es la placa que diseñe y sus módulos:
Solamente hubo un pequeño problema al hacer mi placa, y es que la hice antes de meterme con el bootloader, por lo que no le deje un boton para cargarle el programa, lo cual es facilmente corregible.
Debido a que ya no pienso volver a hacer la placa, no corregí lo del boton, más sin embargo, les entrego los archivos del esquemático y del PCB en Eagle y les diré donde va el botón.
Archivos Eagle PCB y esquematico de interfaz RS232 PIC16F877APara ponerle el botón de carga del programa, se tiene que hacer lo siguiente:
debido a que cuando se programa por bootloader no se utiliza el conector ICSP, se pueden poner en los pines correspondientes a VPP, GND y VCC el botón y la resistencia de 10k.
OJO!!!! ES MUY IMPORTANTE QUE SE PONGA EL JUMPER QUE ESTÁ SEÑALADO EN LA IMAGEN, DEL LADO DE VPP, DE LO CONTRARIO EL BOOTLOADER NO SERVIRÁ.
A los que quieran utilizar otro hardware, pueden buscar algunos otros en internet.
Bueno, ya llegamos a la recta final, y esta es proceder a programar cualquier programa por bootloader, lo que hay que hacer es conectar la alimentación de 5 volts a la placa (la alimentación de salida es para alimentar otras placas), con lo que el LED verde se debe prender, luego, si disponemos de un LCD, lo podemos poner el el puerto para dicho fin, abrir el PICbootPlus, escoger todos los parámetros adecuados, escoger el programa, y presionar el boton "write", con lo que el programa se pondrá a la espera del bootloader, a continuacion vamos a la placa y presionamos una vez el boton que instalamos y se verá una barra de progreso, en poco tiempo y si no hay problemas, el programa se cargará adecuadamente y empeza a correr de inmediato.
Captura durante la programación y con el programa corriendo, mostrando información en la hyperteminal incluida
Y bueno, a grandes rasgos eso es todo para poder programar por bootloader, espero poder poner un video pronto del mismo en funcionamiento, pueden ver en los archivos del Eagle la configuración de los pines del LCD por si quieren usar mi placa.
Cualquier duda, será bienvenida.