Bootloader para PIC16F87XA

D@rkbytes

Moderador general
Hace tiempo estuve buscando un programa Bootloader que fuera compatible con varios lenguajes de programación.
Me puse en la búsqueda de algunos de los que existen y me di cuenta que disponen de poca información, algunos son complejos de usar y requieren siempre un MAX232 para funcionar.

Si bien este Bootloader que realicé también puede funcionar con un MAX232, he diseñado la interfaz con tan solo tres transistores NPN para llevar a cabo la comunicación con el programa Downloader.

El programa Downloader está diseñado en base al código fuente de Petr Kolomaznik.
Y los programas Bootloader están basados en los códigos fuente de Peter Huemer.

La interfaz del programa Downloader está completamente en español y su uso es intuitivo.
PIC16 Downloader.jpg

Para aquellas personas que no sepan lo que es un programa Bootloader, daré una breve descripción.
Un Bootloader es un programa que se aloja en las últimas direcciones de memoria del microcontrolador.
Reservando de esta forma la mayor parte de espacio disponible en memoria para alojar el programa de usuario.
El programa Bootloader es grabado al microcontrolador de forma ordinaria con cualquier programador.
Lo interesante de tener un programa de arranque en el microcontrolador, es que podemos reprogramarlo en tiempo real como si se tratase de una programación ICSP pero sin la necesidad de apagar nuestro circuito.
Con esta ventaja se puede reprogramar el microcontrolador y ver inmediatamente los cambios realizados.
Para realizar la reprogramación del microcontrolador, se requiere de un programa Downloader que ingrese el código de usuario al chip, esto se hace ya sea por medio de comunicación a través del módulo USB del microcontrolador o como en este caso por medio de comunicación serial RS-232.

Una de las principales ventajas del Bootloader es para aquellas personas que realizan programas donde se requiere el uso de comunicación serial RS-232, ya que se puede modificar el programa e inmediatamente ver reflejados los cambios sobre la interfaz de monitoreo sin necesidad de desconectar el circuito.

En mi caso particular este sistema me ha permitido el desarrollo de un programa de monitoreo de temperatura y humedad basado en un sensor DHT11 del cual no existe un modelo simulable en ISIS.

Adjunto los archivos HEX para el Bootloader, el esquema de la interfaz y el programa Downloader.

Espero que esta información y los programas sean de utilidad.

Por ahora únicamente adjunto 4 archivos HEX compatibles para este programa en 4MHz y 20MHz.
Si requieren algún archivo hex para otra frecuencia de trabajo, pueden solicitarlo y lo adjunto.
También adjunto algunos programas sencillos para probar el sistema en varios lenguajes de programación.
PICC de CCS, Ensamblador, BoostC, PICBasic Pro 3 y PICBasic de Proton.

Suerte.
 

Adjuntos

  • Bootdownloader Interface SCH.jpg
    Bootdownloader Interface SCH.jpg
    65.4 KB · Visitas: 98
  • Archivos HEX.rar
    3.8 KB · Visitas: 60
  • 16F877A BootLoader Test.rar
    75.4 KB · Visitas: 58
  • PIC16 Downloader.rar
    224.2 KB · Visitas: 10
Hola amigo Darkbytes, muy buen aporte. te cuento que por algun motivo no me ha funcionado, estoy usando win7 y un convertidor puerto usb a serie basado en el ch340g. saludosss
 
Que interesante !!! Se puede hacer con cualquier gama de micros ??? Uso frecuentemente los de gama media...16F628A...!!!

Dario, tenés confirmado que el convertidos anda ??? yo compré alguna vez alguno, con chip FT232 (creo que era ese) y anda para algunos periféricos solamente.
 
Última edición:
Que interesante !!! Se puede hacer con cualquier gama de micros ??? Uso frecuentemente los de gama media...16F628A...!!!

Dario, tenés confirmado que el convertidos anda ??? yo compré alguna vez alguno, con chip FT232 (creo que era ese) y anda para algunos periféricos solamente.

Hola amigo, el que yo tengo funciona perfecto. tengo entendido que los ft tienen algun problema, no recuerdo en este momento que era, pero los ch340g si funcionan y muy bien.:D(y) creo que el bootloader solo permite hasta pic16f88. saludosss
 
Hola amigo D@rkbytes, muy buen aporte. Te cuento que por algún motivo no me ha funcionado, estoy usando win7 y un convertidor puerto usb a serie basado en el ch340g.
Debe ser porque este Bootloader por comodidad para la detección de carga del programa, usa el pin RTS del puerto serial para hacer el reset del microcontrolador, pero se puede hacer manualmente como en otros sistemas de Bootloader.
Ahora, cuando se usa un adaptador de USB a TTL, ya no son necesarios los transistores para adaptar los niveles.
De esa forma ya se puede realizar la conexión directamente a los pines Tx y Rx del microcontrolador.
¡Que interesante! ¿Se puede hacer con cualquier gama de micros?
Uso frecuentemente los de gama media. 16F628A.
Un Bootloader se puede cargar en cualquier PIC que tenga la capacidad de auto escribir su memoria Flash.
(Self-programming mechanism for Flash program memory)
También se tiene que considerar un PIC con al menos unos 4 KB de memoria Flash para permitir el alojamiento del programa Bootloader y disponer de espacio para el programa de usuario.

Cabe destacar que mientras más liviano sea el programa Bootloader, se dispondrá de más memoria para el programa que se desea cargar.
Sin embargo, los programas Bootloader livianos, por poseer menos instrucciones de comprobación de carga, también son más propensos a fallas.
 
Última edición:
Hola D@rkbytes, de hecho estoy conectando directamente el adaptador al micro, pero no me funciona... seguramente estoy haciendo algo mal... saludosss ;)
 
OK. Seguramente sí estás haciendo algo mal.
Yo he he utilizado un FT232RL, también un PL2303 y con ambos funciona perfectamente.

Adjunto los archivos .hex para el Bootloader y un programa de prueba para encender y apagar un LED con un PIC16F876A.
Va incluido el diagrama de conexiones para usar un adaptador.

Notas de arranque para los archivos de prueba:

  • Ya grabado el programa del Bootloader en el microcontrolador, se ejecuta el programa "PIC16 Downloader.exe"

  • Se selecciona un Baudrate de 38400 y el puerto en donde esté el adaptador de USB a RS-232
  • (Ver el administrador de dispositivos de Windows para determinar el puerto COM)

  • A continuación se selecciona el programa de prueba a cargar en el microcontrolador. "Bootloader_Test.hex"

  • Presionar el botón "Grabar [F4]" (F4 significa que también se puede presionar la tecla F4 del teclado)

  • Dar reset al microcontrolador y se deberá establecer la comunicación para cargar el programa.
Si la carga del programa fue exitosa, se mostrará un aviso en el programa.
BL Carga exitosa.jpg

Enseguida debe empezar a destellar el LED en el pin RB7 (Pin 28 del PIC16F876A)

Eso es todo, no debe haber problema si se siguen bien las instrucciones y el montaje es correcto.

Suerte.
 

Adjuntos

  • Archivos Prueba Bootloader.rar
    6.2 KB · Visitas: 41
Última edición:
Hace tiempo estuve buscando un programa Bootloader que fuera compatible con varios lenguajes de programación.
Me puse en la búsqueda de algunos de los que existen y me di cuenta que disponen de poca información, algunos son complejos de usar y requieren siempre un MAX232 para funcionar.

Si bien este Bootloader que realicé también puede funcionar con un MAX232, he diseñado la interfaz con tan solo tres transistores NPN para llevar a cabo la comunicación con el programa Downloader.

El programa Downloader está diseñado en base al código fuente de Petr Kolomaznik.
Y los programas Bootloader están basados en los códigos fuente de Peter Huemer.

La interfaz del programa Downloader está completamente en español y su uso es intuitivo.
Ver el archivo adjunto 103304

Para aquellas personas que no sepan lo que es un programa Bootloader, daré una breve descripción.
Un Bootloader es un programa que se aloja en las últimas direcciones de memoria del microcontrolador.
Reservando de esta forma la mayor parte de espacio disponible en memoria para alojar el programa de usuario.
El programa Bootloader es grabado al microcontrolador de forma ordinaria con cualquier programador.
Lo interesante de tener un programa de arranque en el microcontrolador, es que podemos reprogramarlo en tiempo real como si se tratase de una programación ICSP pero sin la necesidad de apagar nuestro circuito.
Con esta ventaja se puede reprogramar el microcontrolador y ver inmediatamente los cambios realizados.
Para realizar la reprogramación del microcontrolador, se requiere de un programa Downloader que ingrese el código de usuario al chip, esto se hace ya sea por medio de comunicación a través del módulo USB del microcontrolador o como en este caso por medio de comunicación serial RS-232.

Una de las principales ventajas del Bootloader es para aquellas personas que realizan programas donde se requiere el uso de comunicación serial RS-232, ya que se puede modificar el programa e inmediatamente ver reflejados los cambios sobre la interfaz de monitoreo sin necesidad de desconectar el circuito.

En mi caso particular este sistema me ha permitido el desarrollo de un programa de monitoreo de temperatura y humedad basado en un sensor DHT11 del cual no existe un modelo simulable en ISIS.

Adjunto los archivos HEX para el Bootloader, el esquema de la interfaz y el programa Downloader.

Espero que esta información y los programas sean de utilidad.

Por ahora únicamente adjunto 4 archivos HEX compatibles para este programa en 4MHz y 20MHz.
Si requieren algún archivo hex para otra frecuencia de trabajo, pueden solicitarlo y lo adjunto.
También adjunto algunos programas sencillos para probar el sistema en varios lenguajes de programación.
PICC de CCS, Ensamblador, BoostC, PICBasic Pro 3 y PICBasic de Proton.

Suerte.

Mi enhorabuena D@rkbytes con esta aplicacion, me estaba volviendo loco y no conseguia grabar con todas las que habia probado, pensaba que lo estaba haciendo mal y buscando por el foro encontrado esta que creaste tu, es una pasada carga a una velocidad impresionante, gracias por tu aporte.

Una pregunta hago, si por necesidad necesito utilizar, en este caso un 16F877A, los pines C6 y C7 que son los de transmision y recepcion, para realizar otras funciones, como se deve hacer, si es que se puede?
 
Última edición por un moderador:
Entendido, gracias.
Era por si cabia alguna posibilidad.

D@rkbytes te hago 2 preguntas, para saber el porque, son con referencia a las siguientes linias de codigo.
Código:
#org 0x1F00, 0X1FFF {}
#use rs232(baud=38400, xmit=PIN_C6, rcv=PIN_C7)
La primera linia, por lo que leido, da a entender que lo que hace es comprobar si el codigo que se va a cargar en el micro, tiene suficiente espacio, si no lo tiene, se supone que no lo deja cargar y te avisa no es asi?.

La segunda linia, es obligado cargarla para que las proximas veces, si se necesita cargar otros codigos, te deje cargarlos?, digo esto porque haciendo pruebas me deja cargar otros codigos, entonces cual es su funcion enconcreto?.
 
Este booloader hace ostento de ocupar unos 100bytes... Está disponible el código fuente, para personalizarlo, Yo lo mire rapidamente a ver si corria en un 16F819...
Para la mísma época finalmente logre que mis pequeños proyectos corran en los Atmega328p, con bootloader a 1, 4 y 8mhz asi que me olvide del asunto en los microchips pic.
En los Atmega empleo una de esas interfaces usb con ft232 tx, rx y una tercer linea para hacer el reset...

http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
 
Te puedo decir que lo he probado y no consigo hacerlo funcionar.

Es cierto que utiliza menos bytes que con los de microchip y el de D@rkbytes, pero sinceramente con el de D@rbytes me va de lujo y el de microchip ya descubri por que no me hiba, era que no pulsaba bien el reset cuando le daba a cargar el programa, ahora con el de microchip tambien me va de lujo.

Los he comprobado los 2 y van como un tiro de rapidos.

Hola buenos dias, D@rkbytes o quien lo sepa, quiero hacer una pregunta, con los programas que uso para grabar el pic, tanto el de D@rkbytes como el de microchip, me dado cuenta, o eso creo yo, que no se puede leer lo que se graba en el pic, solo deja grabar.

La pregunta es simple,¿con que programa puedo leer lo grabado? es que estado mirando y no veo algo que me diga como leerlos sin tener que sacarlos de la tarjeta.
 
Un Bootloader sólo escribe el programa en la memoria flash del microcontrolador, por eso no requiere del voltaje VPP, y no está hecho para leer.
Si quieres leer el microcontrolador sin quitarlo de la tarjeta, realiza la lectura por las terminales ICSP.

A final de cuentas, podrás notar que ICSP es una mejor opción para grabar el PIC, pero de ésta forma sí se requiere el voltaje de +13 V para VPP.
 
Vale. Gracias, D@rbytes. Probaré a aprender hacerlo por ICSP, que veo que no es complicado.
Lo único, es que tendré que modificar los programas y las tarjetas para grabar y leer por ICSP.
Ya te cuento. De nuevo gracias por estar ahí chicarrón. Un saludote.

---------- Actualizado después de 3 horas ----------

Te comento, D@rkbytes. Ya he hecho mis primeras pruebas por ICSP y sinceramente me gusta más que por puerto serie, es una pasada lo bien que graba y todo funciona correctamente.

Nuevamente, gracias por tu ayuda.
 
Última edición por un moderador:
El bootloader sirve para cargar un programa al microcontrolador vía RS-232 directa o con un chip que lo emule y adapte.
Si solo quieres tener comunicación del microcontrolador con la PC, no hace falta el bootloader.
Puedes realizar dicha comunicación por hardware o por software si el microcontrolador no dispone de un puerto RS-232 físico.
El circuito de la segunda foto es para adaptar niveles RS-232 a TLL (5V) y evita el uso del MAX232
Si es otra cosa a lo que te refieres, te pido por favor que seas más explícito en tu consulta.
 
Para terminos generales, nada tecnico y lo mas simple y basico del mundo, digo;
- El bootloader sirve como un "ayuda a cargar el programa".
- Cada bootloader tiene una forma específica de ingresar a él o saltar al programa grabado por nosotros, mayormente es llevar un pin a 1 lógico (mayormente 5V), antes de siquiera alimentar al PIC u otro microcontrolador.
- Una vez dentro del bootloader, éste se queda esperando a que desde alguna conexión pre-programada (mayormente el puerto serie físico/hardware del microcontrolador) a que le ingrese los datos a grabar en el microcontrolador.
- Si ese pin para ingresar al bootloader no está seteado (mayormente dejarlo en 0 lógico = 0V), salta a la posicion predeterminada del programa nuestro.
- Cada bootloader ocupa un espacio minimo en la memoria del programa, eso quiere decir que TU programa NO puede iniciar en la posicion 0x0000 (primera posicion de la memoria), sino que el mismo bootloader te dice a partir de qué posicion debe grabarse e iniciarse (gracias al bootloader, que va apuntar ahi si no se ingresa al mismo).
- En algunos bootloader te permiten adjuntarlos o colocar un archivo aparte del mismo para tener esa reserva del mismo, asi no tienes que apuntar directamente, otros deberás indicar en tu programa la posicion a grabarse.

Algo a tener en cuenta, cada bootloader se maneja de forma diferente, asi que hay que leer la documentacion SI O SI!!!
 
PIC no, Atmel si.

PIC no, ya que la mayoria necesita un alto voltaje (mas de 12Vcc) para ser programado.

Obvio, hay excepciones en algunos PIC con programación de bajo voltaje, pero no se si se podrá con ese integrado
pic 16f883 o 16f886, se que se pueden los esp, pero pic no sabia que no se podía, por que en el esquema se ve un atmel.
 

Adjuntos

  • CH340-USB-INTERFACE.jpg
    CH340-USB-INTERFACE.jpg
    151.6 KB · Visitas: 7
Última edición:
Atrás
Arriba