miércoles, 21 de marzo de 2012

Llegó mi Pingüino

Ya me ha llegado la placa PIC32-Pinguino-OTG (Rev C) de Farnell.

PIC32-Pinguino-OTG

Para quien no sepa lo que es, la placa PIC32-Pinguino es como un Arduino pero a lo bestia. Por casi el mismo precio de un Arduino tenemos una placa bastante compatible con éste, demasiado para mi gusto, que dispone de más líneas de E/S y toda la potencia de un procesador de 32bits trabajando a 80MHz.

Los Pingüinos ya vienen de lejos. Empezaron siendo una alternativa a Arduino usando un procesador PIC18F2550 de microchip. El PIC32-Pinguino es un salto adelante a los procesadores de 32 bits.


Alternativas de Arduino bajo 32 bits

Cuando se popularizó la plataforma Arduino no tardó la gente en pensar en hacer lo mismo usando procesadores mas potentes. Entre las plataformas de 32 bits que pretenden emular el éxito de Arduino se hallan:

  •  Maple: Usa un microcontrolador STM32F103RB. De la misma familia STM32F1 que el que usa la placa STM32VLDiscovery pero algo más completo.

Especificaciones

No voy a ponerme a hacer comparativas entre estas opciones y pasaré a hablar del Pingüino en particular. Empezaré por hablar de sus especificaciones comparándolas con las del Arduino UNO. Si en alguna línea no se habla de Arduino es porque esa característica no la tiene.

  • Memoria Flash de 256kB frente a 32kB de Arduino UNO
  • Memoria RAM de 32kB frente a 2kB de Arduino UNO
  • No tiene memoria EEPROM de datos
  • Frecuencia de reloj de 80MHz frente a los 16MHz de Arduino UNO
  • 8 Entradas analógicas frente a 6 de Arduino UNO
  • 26 Salidas digitales frente a 14 de Arduino UNO
  • 3 Salidas digitales con PWM frente a 6 de Arduino UNO
  • Un pulsador de usuario
  • 2 Leds de usuario frente a uno de Arduino UNO 
  • Conector para tarjeta SD/MMC micro
  • Cristal de cuarzo de 32768 Hz para reloj de tiempo real
  • Alimentación de 9V a 24V frente a de 7V a  12V en Arduino UNO
  • Alimentación opcional con batería de Litio
  • Puerto USB OTG

Después de las especificaciones hablaré de algunos aspectos concretos de esta placa.


Alimentación

La alimentación, usando el conector redondo puede ir de 9V a 24V. Eso hace un poco más difícil de alimentar, a priori, que el Arduino en aplicaciones portátiles. No obstante, Pigüino usa un convertidor conmutado para alimentarse, esto es, la eficiencia es de prácticamente el 100% pasado desde cualquier tensión de entrada a los 5V internos de la placa.

De iqzuierda a derecha: Conector para batería de Litio y conector de Alimentación normal
 

Para aplicaciones portálites, la placa proporciona un conector para baterías de Litio de 3.7V. El circuito de carga de la batería se halla incluido dentro de la placa por lo que, para cargar la batería, basta usar el conector general de alimentación mientras ésta se halla conectada.
Lo único que me falta en la placa es una manera sencilla de usar alimentaciones  portátiles que no sea recurriendo a las caras y peligrosas baterías de Litio. Tendré que investigarlo.


Conectores de entrada/salida

Para conservar la compatibilidad con Arduino, la placa tiene conectores de E/S iguales que los de Arduino por lo que son compatibles, al menos físicamente, con los accesorios diseñados para Arduino. Eso hace que los conectores arrastren el mismo defecto de Arduino que hace que no sea fácil de conectar placas de protoboard dado que algunos pines no se hallan espaciados un múltiplo entero de 0.1"

Detalle de la doble hilera de pines

Para paliar este problema, la placa incorpora una doble hilera de pines. Los conectores ya soldados pertenecen a las especificaciones de Arduino, mientra que la segunda fila que no lleva conector soldado, tiene un espaciado compatible con placas de protoboard.
Me resulta curioso que los conectores del otro lado de la placa que incluso en Arduino están correctamente espaciados, también tienen una doble hilera de pines.

Usando las hileras de pines de Arduino sólo podemos acceder al mismo número de líneas que Arduino. A parte de los conectores compatibles con arduino encontramos también dos conectores más de E/S.





En la parte trasera de la placa tenemos el conector UEXT. Este conector se ha incorporado para hacerlo compatible con otros accesorios de la casa Olimex que es quien fabrica el Pingüino. Este conector no aporta gran cosa en cuanto a señales ya que casi todas las señales que lleva ya están disponibles en los conectores compatibles con Arduino.

Conector Con3
La mayor parte de señales de I/O adicionales a las compatibles con Arduino se hallan en el Conector Con3, a la izquierda del puerto USB. Lamentáblemente este conector sólo tiene una huella sobre la placa PCB por lo que tendremos que buscale un conector adecuado y soldarlo si deseamos hacer uso de las 10 líneas de E/S que incluye.

Hubiera preferido que sacrificaran la compatibilidad con Arduino y hubieran puesto las señales adicionales aprovechando la doble hileras de conectores a ambos lados de la placa, pero es lo que hay.


Conector de programación ICSP

La placa cuenta, igual que otros Arduinos, con un conector especial para programar el microcontrolador sin usar el Bootloader ni el puerto USB. Ello requiere de disponer una herramienta específica de programación por lo que dudo que lo usen muchos de los usuarios que buscan algo parecido a Arduino en esta placa. Además, el conector ICSP de PIC32-Pinguino es no standard, a difrerencia del que incorpora Arduino UNO.

Dos osciladores de cuarzo y un conector de programación   

Tarjeta SD

 La placa incorpora, el la cara inferior, un conector para tarjetas SD/MMC micro. Con el software adecuado tendremos acceso a memoria de almacenamiento masivo en la placa.

SD/MMC micro



Pulsadores y leds

La placa incorpora dos pulsadores. Uno de Reset y otro de Usuario. Para evitar el problema típico con Arduino que se da en que las placas que se montan encima ocultan el pulsador de reset, en la placa Pingüino los pulsadores se hallan en el borde de la placa, pulsándose de lado, de manera que siempre son accesibles.

Pulsador y leds de usuario

 Por el mismo motivo, los dos leds de usuario, también se hallan en el borde de la placa.


USB OTG

Arduino usa un bootloader basado en el puerto serie del microcontrolador, el cual, se comunica con el PC usando un chip convertidor USB-Serie específico. En el caso de Arduino UNO, la conversión Serie-USB la realiza un microcontrolador ATmega8u2. De todo ello, el conector USB de la placa Arduino UNO, únicamente puede usarse con el convertidor USB-Serie incluido en la placa por lo que el único perfil posible para el puerto USB es el de puerto COM.
En teoría, el microcontrolador ATmega8u2 es reprogramable, pero ese tipo de modificaciones va mucho mas allá de lo que suele hacer un usuario típico de Arduino.

El microcontrolador PIC-32 usado en la placa Pingüino es capaz de gestionar directamente el interfaz USB por lo que no necesita ningún conversor USB-Serie para su bootloader. Las funcionalidades USB del chip, además, no se restringen a las de actuar como esclavo. El puerto USB es de tipo USB OTG y, por tanto, puede actuar también como master.


Probando el Software

El sortware de Pingüino se puede obtener, igual que en el caso de Arduino, gratuitamente. La página del proyecto Pinguino se halla en www.pinguino.cc Las descargas depende de Google Code y se hallan en este vínculo.

Nos bajamos el fichero .exe de instalación e instalamos el software Pinguino 32, en mi caso la version 305, en el ordenador.

Instalando el Software



El entorno de trabajo es muy similar al de Arduino y, como éste, es muy fácil de usar. Igual que en el caso de Arduino se proporcionan algunos ejemplos. Lamentablemente algunos no están actualizados aún para la versión PIC32-Pinguino y sólo funcionan en el Pinguino original.

Entorno de programacion

Pese a que el entorno es sencillo, no siempre es fácil. A modo de ejemplo, la instalación ha de hacerse en directorios que no incluyan espacios en sus nombres o, de otro modo, la compilación fallará con un error críptico que no es fácil asociar al motivo real del problema. Esto es algo general a Arduino y todas sus variantes. Funcionan porque son fáciles, pero cuando hay problemas son más difíciles de depurar que otros entornos mas serios.

A partir del ejemplo blik.pde que viene como ejemplo y que usa únicamente un led que hace parpadear, he realizado mi primer programa que usa los dos leds y el pulsador de usuario.

Programa de test

Al arrancar el programa los dos leds parpadean a distintas frecuencias. Si pulsamos el botón de usuario se paran hasta que se suelta. No es mucha funcionalidad pero para probar la placa ya basta.


Carga del programa

En todas las placas basadas en bootloader, después del reset, el bootloader toma el control. En el caso de Arduino UNO, el bootloader se pone a "escuchar" en el puerto serie a la espera de un programa para cargar. Si pasa un tiempo sin recibirse nada, el control pasa al programa de usuario previamente cargado. Eso hace que la placa siempre tarde un poco en arrancar. Adicionalmente, para simplificar las cosas, el establecimiento de una conexión a través de USB provoca un reset en la placa de manera que no es necesario tocar nada para cargar un nuevo programa en una placa Arduino UNO. Este reset automático se puede eliminar modificando la placa para volver al método de otros Arduinos que se tenían que resetear manualmente antes de cargar un nuevo programa.

El procedimiento en PIC32-Pinguino es distinto al de los Arduinos. Al arrancar después del reset se detecta el estado del pulsador de usuario. Si no está pulsado, se salta directamente al programa de usuario previamente cargado. Si está pulsado, salta el control al programador del bootloader que se pone a "escuchar" en el puerto USB.
Una vez que el bootloader entra en estado de escucha, lo señaliza con el parpadeo alternativo de los dos leds y se queda en ese estado tanto tiempo como haga falta hasta que se reciba el programa a grabar. Si deseásemos volver al programa de usuario sería necesario hacer un reset.

El procedimiento para cargar un programa es, pues, dejar pulsado el botón de usuario y, mientras tanto, pulsar brevemente el botón de reset. Una vez entramos en modo de escucha ya no hace falta seguir pulsando el botón de usuario. Con el modo de escucha en marcha, ya podemos pulsar el botón de carga del programa del entorno de programación.

Una consecuencia de este método es que no se puede diseñar un sistema que use la linea digital 2, asociada al pulsador de usuario, que permita que ésta se halle a nivel bajo cuando se hace reset del sistema ya que eso haría que el bootloader interrumpiera el arranque normal del programa.


 Conclusiones finales

Estoy bastante contento con la placa PIC32-Pinguino. Por el mismo precio que un Arduino UNO tiene mucha más funcionalidad. Por ese mismo motivo la placa se ver realmente recargada de componentes que ocupan, incluso, algunos espacios de la cara inferior.
El software es funcional pero se nota que aún se han de añadir librerías para hacer uso fácil de todos los periféricos que incorpora la placa.
En todo caso es una placa que promete mucho.
































1 comentario: