Review 18F2550Trainer de Microingenia

Hoy vamos a analizar la estupenda 18F2550Trainer que los amigos de Microingenia nos han cedido para este análisis.

Para ello, vamos a desarrollar una práctica paso a paso: la instalación de un bootloader que nos permitirá prescindir del programador en actualizaciones futuras.

La 18F2550Trainer, como su propio nombre indica, es una simple pero completa entrenadora para el microcontrolador 18F2550 de Microchip, que incluye:

  • conector USB
  • oscilador a 8MHz
  • pulsador de reset
  • led bicolor conectable a cualquier par de pines
  • conector ICSP compatible Pickit
  • conector macho y hembra para cada pin del micro, así como líneas de conectores hembra para Vcc y GND
  • incorpora un bootloader USB CDC, lo que permite empezar a utilizarla sin disponer de programador

Su reducido tamaño, el hecho de que pueda alimentarse desde el puerto USB, y la disponibilidad de macho y hembra para cada pin hacen de la 18F2550Trainer muy fácil de usar.

En nuestra práctica únicamente haremos tres conexiones sobre la misma:

  • pulsador entre GND y RB0
  • conexión de RB6 con el led verde
  • conexión de RB7 con el led rojo

Conexiones

Nuestra intención, como ya comentábamos, es cargarle el bootloader de CCS mediante un programador haciendo un tutorial paso a paso que nos permita replicar esta técnica con cualquier otra placa. Es una práctica única y exclusivamente con fines didácticos porque en este caso no sería necesario hacerlo, ya que la 18F2550Trainer ya incorpora bootloader precargado.

El bootloader de CCS que usaremos es el ejemplo ex_usb_bootloader.c de la carpeta Examples. Concretamente usaremos el que viene con la versión 4.093, aunque creo que es el mismo en todas las versiones. No puedo reproducir aquí el código fuente porque su licencia no lo permite, así que sólo indicaré los cambios que hay que hacerle para que funcione con la 18F2550Trainer:

Las líneas 76 y 77 se modifican para cambiar el 18F4550 por el 18F2550, y para cambiar el PLL5 (oscilador de 20MHz) por el PLL2 (oscilador de 8MHz):

#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN

En el main, antes de entrar en el bucle principal del programa, tenemos que activar las pullups del puerto B, lo que nos permitirá detectar que se ha presionado el pulsador, ya que está conectado a masa.

port_b_pullups(true);

Como ya hemos dicho, el pulsador está en B0 en lugar del pin D0 que aparece originalmente en el bootloader. Cambiamos la condición del if por:

if(!input(PIN_B0))

Opcionalmente, podemos hacer que luzca el led cuando la placa esté en modo «bootload» lo que nos indicará que espera la descarga del firmware. Para ello, hay que introducir esta línea

output_high(PIN_B6);

dentro del if anteriormente mencionado, antes de esto: g_InBootloader = TRUE;

Y ya tenemos listo nuestro bootloader para compilarlo y programarlo en la 18F2550Trainer. Aunque dicha placa tiene un conector compatible con Pickit, como lo que yo utilizo es el Frijolito, pues tuve que conectarlo mediante unos cables:

18F2550Trainer y Frijolito

Una vez programada, ya puedes desconectar el programador y enchufar la placa al USB de tu PC:

18F2550Trainer

Cuando la placa se alimenta, directamente ejecuta el programa que tenga cargado. Como ahora mismo no hemos cargado aún ningún ejemplo, lo único que ejecuta es un bucle infinito sin ninguna función.

Para que entre en el modo «bootload» hay que reiniciarla con el botón presionado. Para ello, mantenemos el botón pulsado y hacemos un reset a la placa, para lo cual damos un click al pulsador S1 que ya incorpora. Veremos que se enciende el led verde, indicando que está esperando la descarga del firmware. También veremos que se identifica en Windows como un nuevo dispositivo, concretamente como un puerto COM que aparece en el administrador de dispositivos:

Puerto COM

 

Nuestro firmware de pruebas será este:

#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_bootloader.h>
void main () { while (1) {
output_high(PIN_B7);
output_low(PIN_B6);
delay_ms(500);
output_high(PIN_B6);
output_low(PIN_B7);
delay_ms(500);
}
}

Como se puede observar no es más que un simple parpadeo entre los dos colores del led a razón de 500ms para cada uno.

Todos los programas que queramos meter en la placa a través del bootloader tienen que situarse en posiciones de memoria que no «pisen» el código original del bootloader que permite hacer la descarga. Para garantizar esto, hay que incluir al principio de nuestro programa la cláusula:

#include <usb_bootloader.h>

Para descargar un nuevo software, CCS nos proporciona un terminal serie con capacidad de hacer «Download», llamado SIOW:

Al ejecutarlo por primera vez, tendremos que configurarlo para que utilice el puerto COM que acaba de activarse mediante nuestra placa:

SIOW

Una vez configurado, se nos abre la interfase principal donde vemos el botón «Download software»:

SIOW

Una vez pulsado, sólo nos queda elegir nuestro HEX y aceptar, para que el programa pase hasta la placa:

SIOW

La placa se reiniciará automáticamente y, si no tenemos presionado su pulsador, arrancará el programa. Ya tenemos nuestro led cambiando de color:

En definitiva, da gusto trabajar con esta plaquita, pequeña y compacta, pero con toda la potencia de un 18F2550 a tu disposición.

Realmente cuesta ponerle pegas, pero esto no sería una review completa si no le sacamos algunos contras:

  • el led bicolor luce poco. En ambientes muy luminosos cuesta verlo
  • el pulsador de reset es muy incómodo y requiere de una fuerte presión para funcionar

Pero realmente todo lo demás son verdaderas virtudes, así que no me queda más que recomendarla para poder iniciarse fácilmente en este fascinante hobby.

Espero que el artículo te haya sido útil.

 

Share