Yo comparto mis arhivos en Dropbox.

Grabar el PIC desde el hardware usando el grabador sólo una vez.


1) BOOTLOADER DE SPARKFUN,
mucho más fácil para los PIC 16F87xA.



ENLACE A TUTORIAL

Para utilizarlo con CCS:

Debes comenzar los códigos de tus programas con el siguiente encabezado antes del void main:

#build(reset=0x4)
#ORG 0x0F00, 0x0FFF{}


Enlace a encabezados con otros PIC.

Con este bootloader observè problemas de ejecución cuando cargaba algun código que utilice el puerto UART.


2) BOOTLOADER DE MICROCHIPC,
Mucho más rapido, menos utilizacion de memoria y mas facil de direccionar en CCS.




Solo debes empezar tus códigos con:

#org 0x0F00,0x0FFF {} // (CCS) bootloader resides here

Memory reservation in Microchip MPASM is done like this for a 16F873:

ORG 0x0000 ;User program starts here
...
ORG 0x0F00 ;Bootloader starts here
NOP
END

The last lines will generate a compiler error if the user program goes higher than 0x0EFF.

No tuve problemas de transmisión - recepción con la UART usando éste Bootloader.

3) BOOTLOADER DE TINY,
util para MpASM.


Nunca pensaste que es un trastorno poner el PIC en el grabador, quemar el software, sacar el PIC del grabador, llevarlo al hardware en donde esté implementado, probar el funcionamiento?... Y si necesita alguna modificación o mejora, sacar el PIC del hardware, llevarlo al grabador, quemar el software mejorado, y así sucesivamente las miles o millones de veces que modifiques el soft, con los peligros de doblar las "patas", y lo peor, ya que si no cuentas con zócalos buenos, hasta puedes quebrarlas!
Bueno, aquí te indico la solución, la más sencilla, y efectiva, para que no tengas que sacar al PIC del circuito más que una única vez, y luego sí, hacer las grabaciones que quieras, porque no habrá ninguna clase de inconveniente...

Probado por nosotros y sin ninguna clase de circuito complicado.

Un tutorial integramente en español del tipo paso a paso, con los enlaces a las descargas del software original.

(El tutorial perfecto para los que programan en MPLAB con el compilador de lenguaje ENSAMBLADOR)

LO PRIMERO ES LO PRIMERO

"¿Que es un Bootloader?:

Es un programa muy pequeño (256 bytes en este caso) que permite descargar programas al PIC usando únicamente el puerto serie, sin ningún 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 vía serie, sin necesidad de grabador, todas las veces que queramos. Si nuestro hardware incorpora puerto serie no es necesario quitar el PIC de su zócalo: 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 interrupción de arranque apuntandolo. Arranca cuando alimentamos el procesador y espera un comando por el puerto serie. Si no lo recibe continua con la ejecución 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 conexión serie con el PC (yo uso la conexión serie con el MAX232) y el programa descargador (por ejemplo PICbootPlus)(En éste caso veremos el de Tiny)

¿Tiene algún inconveniente?:

Si. Es necesario modificar nuestros programas para que puedan trabajar con el Bootloader. Según el entorno de desarrollo Mplab, CCS, Hitech-C etc es más o menos complejo, pero la modificaciones suelen ser incluir unas pocas líneas de código. Además no podemos usar los últimos 256 bytes de memoria (en un PIC16F876 de 8K de memoria es el 3,1 % inutilizable)”

Escribió:Heli Tejedor, helitp@arrakis.es, http://www.heli.xbot.es

Cómo se hace?:

Bueno, ahora paso a explicarte que yo usé el Bootloader "Tiny PIC Bootloader"


Tiene una buena interfaz gráfica y es bastante sencillo de utilizar.
Muchas gracias a nuestro amigo creador del Tiny Bootloader.

Pero hay varios más dando vueltas por ahí como por ejemplo:

“Shine Tolmie PIC Bootloader” http://www.microchipc.com/PIC16bootload/index.php

“Bootloader de Kart Lunts”
http://www.seanet.com/~karllunt/picload.htm

“Bootloader de MCJournal”
http://www.mcjournal.com/articles/arc103/arc103.htm

Y muchos muchos más…

Pero yo me voy a referir a éste, que lo usamos y probamos y anduvo en nuestro circuito y que ocupa muy poco espacio de la RAM.

Cuando digo que usé el "Tiny PIC Bootloader" me refiero al programita que utilicé para grabar el PIC desde puerto serie sin necesidad de sacarlo de su circuito original.
Para poder grabar el PIC desde el puerto sin necesidad de sacarlo del circuito primeramente tengo que haber grabado el "bootloader" propiamente dicho en el PIC, y para ello sí utilizaremos un grabador común y corriente (por ej: el JDM, o el que tengas a mano).

Pero bueno, vamos paso a paso:

1- Descargá el ZIP (tinybld198.zip) que viene con el soft y una buena librería de códigos y de includes para el MPLAB.


2- Una vez descargado el archivo, descomprimelo, y allí encontrarás varios ficheros, entre ellos una carpeta que se llama “picsource”, dentro de esa carpeta encontrarás varias carpetas que corresponden a los códigos ASM y HEX para las distinas familias de PIC (16F, 18F, y tambien para los dS, incluso códigos para la implementación del ZigBee!!!)

Bueno, éstos códigos son para valores de cristales y BaudRates predeterminados, si tú utilizas un PIC, por ejemplo, el 16F876A con un cristal de 20MHZ, estás de suerte, porque ya está compilado el HEX allí para tú caso, así que lo único que tienes que hacer es grabar el HEX correspondiente a tu caso como cualquier otro código y en un grabador común y corriente (yo uso el ICProg y un grabador JDM)

3- Pero si para tu caso no coincide el PIC y/o el XT, te recomiendo que sigas éstos pasos:
- Abres un proyecto en el MPLAB, como siempre lo haces, incluyes alguno de los códigos ASM que corresponda a la familia del PIC con el que tú estás trabajando (por ejemplo, yo usé el 16F874A, de manera que me conviene usar el ASM que ya viene en el fichero del Tiny que corresponde al 16F873A ya que son casi los mismos micros).

- Se te abrirá un código que empieza así:






4- Lo unico que deberás modificar del código es las primeras tres lineas:

LIST P=16F873A, F=INHX8M
xtal EQU 20000000
baud EQU 115200
- Y allí definirás el micro con el que trabajas (en mi caso cambié en el list y puse p= 16F874A).
- El cristal con el que trabajas (en mi caso yo cambié con el que trabajaba yo que era uno de 18342000) también seberás declarar si usas un HS_OSC o un XT_OSC en la línea:

__CONFIG _HS_OSC & _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF


- en el BAUD (115200), podrá ser 115200 o 19200 que son los que ya están configurados para el Tiny Bootloader. Es en realidad el baud con el que se va a transmitir el código fuente cada vez que grabes el PIC desde puerto serie, nada tiene que ver éste BAUD con el BAUD con el que quizás estés acosstumbrado a trabajar para aplicaciones de comunicación serie, es decir que nada tiene que ver con la apliación, sólo será la velocidad con el que se transmita el HEX cada vez que llames a grabar la FLASH del PIC.

5- Además, al compilador del MPLAB no le gustan muchos los "chirimbolos simbológicos" así que si tienes problema a la hora de compilarlo, te recomiendo que borres los siguientes símbolos de las líneas del código donde se declaran los includes.
Aquí te muestro las líneas:

#include "../icdpictypes.inc"
#include "../spbrgselect.inc"
#include "../bankswitch.inc"
#define prima_adresa max_flash-100 ; 100 word in size

Borrá los puntos y las barras de manera que quede así:

#include "icdpictypes.inc"
#include "spbrgselect.inc"
#include "bankswitch.inc"
#define prima_adresa max_flash-100 ; 100 word in size

6- Si aun te tira ERROR a la hora de darle el BUILD al proyecto, te recomiendo que hagas lo siguiente:
Dentro de la misma carpeta "picsource" del fichero del tinybld198.rar, encontrarás unos archivos .INC: el icdpictypes.INC, el bankswitch.INC y el spbrgselect.INC.
Todos éstos INC, los copias y luego los pegas en la carpeta de los INC de tu MPLAB. Es decir, te vas a

C:\Archivos de programa\Microchip\MPASM Suite

y los pegas ahí, y LISTO! No debería darte más errores.

7- Ahora, como último paso, utilizas tu grabador y tu programador, el de costumbre para "quemar" el PIC con el código que acabas de compilar, es re cortito, así que no debería tardar demasiado.

USO DEL SOFTWARE
Una vez quemado el PIC con el código del BOOTLOADER estás en condiciones de sacarlo y dejarlo en tú circuito de aplicación listo para ser grabado por puerto serie y ON BOARD por toda la enternidad, jeje....


Como podrás ver, aquí te muestro una impresión de pantalla del soft corriendo. Si sos bueno con el ingles, ésta parte lo puedes leer desde la página del autor en:


PASO A PASO:

1- Bueno, obvio, que lo primero que tienes que hacer es ejecutar el programita que no necesita instalarse y el EXE está en el mismo ficher del tinybld198.rar.

2- Allí se te abrirá la pantalla del software:
-Lo primero que deberás hacer es declarar el puerto COM que estás utilizando COM1,COM2, etc.
-Luego la velocidad de los baudios y aquí es donde tienes que poner lo mismo que pusiste en el código fuente que has modificado (te acuerdas?: baud EQU 115200) si lo dejaste en 115200, entonces quí también lo dejas en 115200, y por defecto es así.

3- Cargas el HEX de tu proyecto de aplicación, así como solías cargarlo en el ICProg o en algún otro "Quemador de PICs"; con el BROWSE vas y lo buscas y lo dejas implícito en la ventana.

4- Es hora de grabar la flash!!!
Con el PIC "APAGADO" das click en Write Flash, inmediatamente enciendes al PIC, y bualá, tu PIC está grabado en unos sencillos milisegundos, los milisegundos que tarda en "pasar" el HEX al PIC y los milisegundos que el BOOTLOADER se toma para darle el control al programa principal que acabas de grabar.

5- Te resta verificar que efectivamente se haya grabado el PIC con el programita, y a disfrutar de la programación ON BOARD!!!
Espero te haya sido útil, si quieres puedes compartirlo desde Share This o enviando un mail con la entrada, cualquier consulta o comentario, puedes hacerlo sin ningún compromiso,
Suscribite y estáte al tanto de los tutoriales de FanaticoDeElectronica.

2 comentarios:

Anónimo dijo...

:O! Exelente utilidad... estas son las pequeñas cosas que te hacen mejorar y entender mejor las cosas... Gracias :)

Unknown dijo...

en el codigo proporcionado al compilarlo con MPlab tengo los siguientes errores
Error[101] C:\USERS\ING SERVIN\DOCUMENTS\MPLAB\PROYECTO CASIAN\PROYECTO CASIAN.ASM 25 : ERROR: (level 1. -305)

esta es la linea donde me lo marca

error level 1, -305 ;supress warning msg that takes as default

y
Error[113] C:\USERS\ING SERVIN\DOCUMENTS\MPLAB\PROYECTO CASIAN\PROYECTO CASIAN.ASM 42 : Symbol not previously defined (IdTypePic)

el otro es en la linea marcada

SendL macro car
---> movlw car
movwf TXREG
endm

si alguien pudiera ayudarme con eso le estaría muy agradecido

Comentarios, al FORO...

Chicos, por las consultas o comentarios, vayamos al FORO asi no tengamos problemas y todos podamos participar...
Alli publiqué unas respuestas.

Entradas populares

guía de empresas