domingo, 15 de febrero de 2015

TELECOMUNICACIONES

Bootloader para PIC16F87X

Introducción

Una vez tengamos un boostrap en el PIC podremos "descargar" rápidamente (en cuestión de segundos) un nuevo programa .hex en el PIC.
Además, la mayoría de los programas no necesitan ningún tipo de adaptación para que funcionen con el bootloader y podremos descargar .hex que tengamos compilados sin modificarlos.
No podemos utilizar el bootloader sin primero programar el archivo .hex que lo implementa en el PIC (el boostrap) utilizándo un programador hardware. Esto sólo debemos hacerlo la primera vez. El boostrap se comunicará con el programa bootloader en el PC y permitirá que el PIC se reprograme a si mismo.
El boostrap utiliza las 4 primeras y las 255 últimas instrucciones de la memoria de programa del PIC. Para el PIC16F876/7, con 8K de memoria, el boostrap se coloca de la posición 0x1F00 a la 0x1FFF. Para el PIC16F873/4, con 4K de memoria, el boostrap se coloca de la posición 0x0F00 a la 0x0FFF.
Cuando reseteamos el PIC, a partir del vector de reset (dirección 0x0000), se produce un salto a la dirección donde reside el código principal del boostrap.
El boostrap permanece activo durante 200 milisegundos después del reset del PIC para permitirnos la posibilidad de descargar un nuevo código, lo que ocurrirá si el PIC está conectado al PC y la aplicación Bootloader del PC está lista para la descarga. Después de este tiempo (o de una actualización del programa) se ejecuta el programa principal del PIC y podría utilizarse el puerto serie normalmente.
Conviene destacar que el fabricante Microchip está sustituyendo algunos PIC, como el PIC16F876A por otros mas actuales, como el PIC16F886. Sería necesario comprobar el bootloader es estos modelos.

Adaptador TTL / RS232

El puerto serie RS232 del PC opera con +12V para el 0 lógico y -12V para el 1 lógico y el puerto serie del PIC opera con niveles TTL, +5V/0V.
Para utilizar un bootloader necesitamos un adaptador que conecte el puerto serie COM del PC con el PIC. El adaptador serie, por ejemplo con un max232, convierte los niveles RS232 a TTL y TTL a RS232:
  • De -3 a -15V que es un "1" en RS232 a los +5V, "1" en TTL.
  • De +15V a +3 que es un "0" en RS232 a 0V.
  • De +5V en TTL a -10V en RS232.
  • De 0V en TTL a +10V en RS232.
El PIC lee o escribe estos niveles TTL mediante el hardware de su puerto serie. Podemos utilizar un c.i. adaptador de nivel MAX232, MAX3222, o SIPEX232, siendo lo mas usual utilizar el c.i. MAX232 y sus componentes asociados. Ver Comunicación serie, el MAX232.
Existe también otra posibilidad muy interesante, utilizar un FT232 con USB y un puerto serie virtual. Ver FT232.
mejorar comserie.htm, sacar max232 y poner pcb.
El bootloader que aquí tratamos sólo necesita 2 señales, TX y RX.
Puede utilizarse un adaptador externo o uno integrado en la aplicación. En este último caso la aplicación principal del PIC podrá utilizar la comunicación serie para otros usos.

Bootloader para Windows

A través de Internet podemos conseguir bootloader para Windows o Linux y también bajo Java.
Para Windows, entre otros, tenemos:
  • "Bootloader de Microchip". Es un sistema gratuito muy completo, con boostrap para todos los PIC que lo soportan y abundante información (en inglés) para su uso. Puede conseguirse en www.microchip.com
  • "PIC bootloader". Escrito en Delphi por el checo Petr Kolomaznik de EHL elektronika, (www.ehl.cz/pic, email: kolomaznik@ehl.cz)
  • "PICBoot Plus". Basado en el anterior y desarrollado en Borland C++ Builder por el holandés Herman Aartsen. Incluye un terminal de consola para pruebas inspirado en uno sencillo de www.castlesoft.de
La aplicación bootloader comprueba antes de descargar el archivo en el PIC si el programa es demasiado grande como para sobreescribir el boostrap en cuyo caso se muestra un aviso.
Se ha desarrollado un bootloader para Windows con Borland C++ Builder basado en el desarrollo de Herman Aartsen. Ver PicBootDPE.

Boostrap para PIC16F87X

Aquí nos centraremos en boostrap para los PIC16F87X con RS232 pero también pueden hacerse para el PIC16F628 con RS232 o los PIC18F con USB.
En Internet hay varios boostrap disponibles. Aquí nos basaremos en el desarrollado para PIC16F87X por Shane Tolmie y Petr Kolomaznik de www.microchipC.com ywww.ehl.cz/pic.
Existen incluso bootloader que permiten actualizar automáticamente el programa principal del PIC a través de Internet a la última versión disponible.
descarga Boostrap para PIC16F87X. En este archivo está disponible el código fuente en ensamblador, comentado, así como los .hex listos para programar cada PIC según la frecuencia de reloj y velocidad de comunicación serie que se utilice.
Contenido del archivo comprimido:
  • asm para pic16F87x
    • boot16F87x_261.asm
    • creahex.bat
  • asm para pic16F87xA
    • boot16F87xa_281.asm
    • creahex.bat
  • hex para pic16F87x
    • 63619 - bootldr-16F876-77-03.6864Mhz-19200bps.hex
    • 60419 - bootldr-16F876-77-04Mhz-9600bps.hex
    • 60419 - bootldr-16F876-77-04Mhz-19200bps.hex
    • 61019 - bootldr-16F876-77-10Mhz-19200bps.hex
    • 61619 - bootldr-16F876-77-16Mhz-19200bps.hex
    • 62019 - bootldr-16F876-77-20Mhz-19200bps.hex
    • 33619 - bootldr-16F873-74-03.6864Mhz-19200bps.hex
    • 30419 - bootldr-16F873-74-04Mhz-9600bps.hex
    • 30419 - bootldr-16F873-74-04Mhz-19200bps.hex
    • 31019 - bootldr-16F873-74-10Mhz-19200bps.hex
    • 31619 - bootldr-16F873-74-16Mhz-19200bps.hex
    • 32019 - bootldr-16F873-74-20Mhz-19200bps.hex
    • 03619 - bootldr-16F870-71-03.6864Mhz-19200bps.hex
    • 00419 - bootldr-16F870-71-04Mhz-9600bps.hex
    • 00419 - bootldr-16F870-71-04Mhz-19200bps.hex
    • 01019 - bootldr-16F870-71-10Mhz-19200bps.hex
    • 01619 - bootldr-16F870-71-16Mhz-19200bps.hex
    • 02019 - bootldr-16F870-71-20Mhz-19200bps.hex
  • hex para pic16F87xA
    • bootldr-16F873A-16MHz-38400bps.hex
    • bootldr-16F873A-20MHz-38400bps.hex
    • bootldr-16F873A-20MHz-56000bps.hex
    • bootldr-16F876A-16MHz-38400bps.hex
    • bootldr-16F876A-20MHz-38400bps.hex
    • bootldr-16F876A-20MHz-56000bps.hex
    • bootldr-16F877A-16MHz-38400bps.hex
    • bootldr-16F877A-20MHz-38400bps.hex
    • bootldr-16F877A-20MHz-56000bps.hex
Notas:
  • PIC16F87XA: El archivo para 16MHz/38400bps puede utilizarse para 8MHz/19200bps o 4MHz/9600bps. Y el archivo para 20MHz/38400bps puede utilizarse para 10MHz/19200bps.
  • En principio, los archivos .hex para 16F87X no sirven para el 16F87XA, pero si al contrario.

Características del boostrap para PIC16F87X:

  • PIC soportados: 16F870, 16F871 (2K flash) 16F872 no soportado al no disponer de UART. 16F873,16F874,16F73,16F74 (4K flash). 16F876,16F877,16F76,16F77 (8K flash). 16F873A, 16F876A y 16F877A. Hay dos versiones de ASM, una para PIC16F87X y otra para PIC16F87XA.
  • Ocupa como máximo 255 instrucciones, que se colocan al final de la memoria de programa.
  • Los ASM utilizan directivas de MPASM para que el ensamblador cree el HEX correspondiente a cada PIC, velocidad de reloj y velocidad de comunicación serie. Arriba, en el apartado "Contenido del archivo comprimido" hay una lista de HEX y sus características.
  • Se incluye un archivo de procesamiento por lotes (creahex.bat) para que, si se modifica el ASM, se creen todos los HEX de forma automática.
  • Es compatible con cualquier circuito previamente diseñado, no necesita pines específicos ni jumpers para activar el bootloader.
  • Velocidades de reloj: 3.6864, 4, 16 y 20Mhz.
  • La descarga se realiza hasta 56000bps. Esto permite completar la programación en unos pocos segundos.
  • Escribe también en la EEPROM del PIC.
  • Soporta cualquier programa, escrito con ensambladores estándar o compiladores Basic, C y Pascal realizándole una pequeña adaptación.

Instalación y uso del bootloader

En lugar de realizar una descripción genérica del proceso vamos a llevar a cabo un ejemplo práctico con un PIC16F876A. Siguiendo estas instrucciones, en 15 minutos conseguiremos que todo funcione.
Comenzamos con un circuito completo como el PIC16F876A-DPE. Este incluye un conector ICSP.
1. Programamos el PIC16F876A con el boostrap adecuado, por ejemplo para la placa PIC16F876A-DPE debemos elegir una velocidad de reloj de 20MHz y la velocidad serie podría ser de 56000bps, así el .hex a utilizar sería el "bootldr-16F876A-20MHz-56000bps.hex". Este archivo .hex corresponde al PIC16F876A a 20Mhz para descargas a 56.000 baudios. Utilizaremos un programador hardware, como el PICStart Plus, el P16PRO o el JDMI, que utiliza ICSP . Esto sólo hay que hacerlo la primera vez.
Como software para el programador podemos utilizar el WinPIC800 o el ic-prog.
Comprobamos que todos los datos para la programación del PIC son correctos, como CP off, WDT off, tipo de reloj, etc.
2. Comprobamos si es necesario adaptar el programa de la aplicación a descargar para utilizarlo con el bootloader y volver a compilarlo. No será necesario hacer nada si no utiliza las 4 primeras posiciones de la memoria de programa y si no es tan grande como para no dejar libres las 255 últimas posiciones de memoria (en este ejemplo, para el PIC16F876A no debe llegar a la posición 0x1F00). El archivo de ejemplo es muy simple, el estado del puerto A, configurado como entrada pasa al puerto B, configurado como salida. Posteriormente iremos viendo otros ejemplos en temas posteriores.
3. Conectamos el PIC con el PC a través del puerto serie RS232. Alimentamos la aplicación del PIC.
4. Ejecutamos como programa bootloader en Windows el desarrollado por Petr Kolomaznik, el "PIC bootloader"
5. Elegimos la velocidad de descarga, en este ejemplo 56000bps. Activamos "write eeprom". Seleccionamos el .hex a descargar en el PIC.
6. Pulsamos el botón "Write" en la aplicación Windows que comenzará a buscar el boostrap en el PIC. Seguidamente reseteamos la aplicación del PIC. El boostrap estará activo 0,2 segundos después del reset. El bootloader de Windows lo detectará y descargará el .hex
Después de este proceso veremos la aplicación principal en funcionamiento normalmente.

No hay comentarios:

Publicar un comentario