jump to navigation

Primer contacto con Pinguino (MicroChip PIC) 28 enero, 2010

Posted by ubanov in Electrónica.
Tags: , , ,
trackback

En el mundo de la electrónica se ha puesto muy de moda últimamente una placa que se llama “Arduino”. Arduino tiene un microcontrolador, con un bootloader, que se puede programar desde un entorno C, y no necesitas ningún programador especial, sino sólo conectarse a la placa (actualmente por USB). Esto posibilita que casi cualquiera que pueda programar en C, pueda tener un circuito que ejecute un programa diseñado por él, facilitando mucho el diseño de circuitos circuitos.

La plataforma Arduino es una plataforma muy probada, y de ella tienes cientos de programas/circuitos en Internet que se pueden usar.

Arduino está basado en un microcontrolador de Atmel (dependiendo de la versión tiene uno y otro, pero podría ser algo del estilo de un ATMega168). A este micro se le conecta un conversor de serie a puerto USB y todo esto se vende por Internet por unos 30€.

Con esta misma idea se ha desarrollado un proyecto similar, pero basado en un microcontrolador PIC. El proyecto se llama Pinguino (http://www.hackinglab.org/pinguino/).

En esta entrada os cuento mi experiencia con este entorno.
Yo no he llegado a probar arduino, y la principal razón por la que he decidido utilizar Pinguino en lugar de Arduino, es por que una placa de pinguino me la podía fabricar fácilmente yo en casa, mientras que una de arduino no.

Las principales diferencias entre ambos entornos serían las siguientes:
-El procesador Atmel según los datasheets es más potente que el PIC
-El PIC es más fácil de conseguir (he ido a la tienda de electrónica de debajo de mi casa y el PIC si lo podía comprar, el Atmel no), y además hoy en día se puede pedir como samples
-El PIC tiene soporte nativo para USB, con lo que se podría usar para hacer otras cosas
-La placa del pinguino es más sencilla (tiene menos componentes).
-Arduino es un entorno mucho mucho más probado

Apesar de todo esto he montado un par de pinguinos, pondré los diseños en algún sitio y pondré los links.

Mi primer proyecto serio sobre pinguino es el siguiente: https://ubanov.wordpress.com/2010/02/03/control-de-luces-desde-pic-pinguino/

El entorno de pinguino lo he probado sobre una máquina ubuntu. Las cuatro cosas más importantes a saber para montarlo son:
-Descargar el software de pinguino de la página http://www.hackinglab.org/pinguino/download/ (buscas la última beta que tengan, yo he probado con la beta7). Digo de hacer directamente esto por que los links en el resto de páginas no están actualizados.
-Descargar el bootloader el pic del siguiente link http://www.hackinglab.org/pinguino/download/bootloader%2018f-20%20V2/bootloader4550V2-12.hex (aunque ponga 4550 es también para el 2550)
-Descomprimir el directorio del pinguino en algún directorio de tu máquina.

Para ejecutarlo yo he necesitado hacerlo como root (con “sudo python pinguinobeta7.py”), dado que si no lo hacía lo que no funcionaba es la programación del chip. En teoría se debería crear un fichero en /etc/udev/rules.d/26-microchip.rules, en el que dieses permisos a que un grupo nuevo que creases (microchip) pudiese acceder a este dispositivo, pero a mi no me funcionaba. Conclusión: ejecuarlo como root y así te quitas problemas.

Otra solución que he encontrado para no ejecutar el pinguino como root es ejecutar “sudo chown root.root tools/bin/docker” y “sudo chmod 6755 tools/bin/docker”, de esta forma sólo la aplicación de programación se ejecutará como root.

Se necesita tener instalado el paquete python-wxgtk2.8 (en ubuntu puedes hacer “sudo apt-get install python-wxgtk2.8”).

El entorno es sencillito y bastante intuitivo. En la página de pinguino se pueden encontrar algunos ejemplos de programas mínimos para empezar…

Para programar el chip (con la versión 2 de firmware) lo que hay que hacer es resetear la placa y en los cinco primeros segundos, cuando esté apagado el diodo de run, dar al botón de programación de pinguino. En la pantalla de estado nos da un mensaje diciendo algo así como Reading (0x2000-0x7fff) y luego lo mismo con Writting. La programación del chip se hace en menos de 5 segundos!!!

La forma de funcionar pinguino, es:
-tu editas un fichero

-cuando le das a compilar lo que te hace es hacer un preprocesado del archivo (cambia los defines por su valor, cambia algunas cosas para que funcionen como en arduinio, por ejemplo el tratamiento del serial…). Todo lo que se hace está en el fichero pinguino*.py

-con eso lo que nos crea es un fichero source/user.c, y un fichero tmp/include.h (con algunos defines)

-pinguino realmente compila el fichero source/main.c, que siempre es el mismo, pero este tiene un include al user.c. Para compilarlo utiliza el sdcc (no es necesario tenerlo instalado en el sistema, por que lleva una copia en tools/bin/sdcc). La línea que se ejecuta es algo como lo siguiente: “../tools/bin/sdcc -mpic16 –optimize-goto –denable-peeps –obanksel=9 –opt-code-size –optimize-cmp –optimize-df –fstack -p18f2550 -I ../tools/share/sdcc/include/ -I ../include/ -c -c -o main.o main.c” (para ejecutar desde el directorio source)

-Una vez compilado lo linka con varias librerías, obtiene el fichero MAIN.ASM y el MAIN.HEX, para ello se ejecuta la siguiente línea: “../tools/bin/sdcc -o main.hex –optimize-goto –denable-peeps –obanksel=9, –opt-code-size –optimize-cmp –optimize-df –fstack –no-crt -Wl-s../lkr/18f2550.lkr,-m -mpic16 -p18f2550 -l ../lib/libpuf.lib -llibio18f2550.lib -llibc18f.lib ../obj/application_iface.o ../obj/usb_descriptors.o ../obj/crt0ipinguino.o main.o”

-Una vez que genera el fichero hex, lo sube al pic creo que utilizando el programa “sudo ../tools/bin/docker -v 04d8 write main.hex”, que se comunica con el loader. (loader y herramienta en http://freshmeat.net/projects/vasco-puf/)

Si no se quiere utilizar el editor de pinguino (para los raros que nos gusta el vi) desde la versión pinguino beta 8 (que saldrá en breve, pero JP Mandon me lo ha dejado probar antes) será posible compilar cualquier fichero (haciendo el preprocesado, la compilación y el linkado). Para ello se ejecuta “pinguinobeta8.py -nogui fichero.pde”… esto nos permite ejecutar pinguino sin tener las X instaladas.

Para el proyecto pinguino se han desarrollado ciertas rutinas, que sirven para simplificar el desarrollo y hacer que los fuentes sean más o menos compatibles con los de arduino. Los fuentes de estas funciones están en tools/share/sdcc/include/pic16 (es interesarte echarle un ojo si quieres entender qué es lo que se hace cuando se llama a una determinada función, por ejemplo si llamas a digitalWrite, ¿qué ocurre? pues a miras en digitalw.c y lo verás).

Problemas que he encontrado con pinguino:
-De vez en cuando le da el momento tonto y el editor en lugar de escribir donde tienes el cursor te escribe un caracter antes
-Cuando compilas un programa, si da errores es imposible buscar con el editor dónde ha ocurrido (lo mejor es ir al directorio source/user.c y comprobar ahí dónde está el error)
-La implementación que tienen de la directiva “#define” no funciona del todo bien, hace un search&replace de la frase sin importarle qué contenga… un par de ejemplos, si haces un “#define VALOR 5”, y luego escribes CONTRAVALOR, resulta que te lo sustituirá y quedará CONTRA5… lo cual a veces no será lo que quieres…. más grave aún, si escribes “#define VALOR 5 //comentario”, intenta luego hacer por ejemplo “for(a=0;a<VALOR;a++)” ya veréis lo que pasa…

Todos estos errores han sido corregidos en la versión beta8 que saldrá en breve.

El esquema casi-mínimo de lo que yo haría para hacer un pinguino es lo siguiente:

Una sencillo consejo para optimizar el código generado para pinguino es en lugar de usar int para almacenar números, siempre que sea posible utilizar char (o unsigned char). El micro es de 8bits, y un int en pinguino es de 16bits, y un char es de 8. Maneja mucho mejor los segundos. Como ejemplo hacer variable++ con un int cuesta 3 instrucciones, y con un char sólo 1. Hacer un for(a=0;a<10;a++) a=a;, con int lleva 13 instrucciones, y con char sólo 6.

Me parece un proyecto interesante y fácil de hacer en casa. Poniendo al alcance de casi cualquiera el hacer cosas de electrónica.

En breve pondré escribiré una entrada con la descripción de mi primer proyecto de pinguino. Cuando lo haga pondré el link aquí. (Lo he puesto arriba: https://ubanov.wordpress.com/2010/02/03/control-de-luces-desde-pic-pinguino/)

Comentarios»

1. BoOpS - 28 enero, 2010

Bien bien así me gusta sacando conclusiones! A ver si algun dia termino de redactar la comparativa Pinguino-Arduino.

Un saludo!

2. Sphinx - 1 febrero, 2010

Muy buenas las conclusiones.
Los problemas con el compilador, tienen pinta de ser chapucillas al programar en python. En cuanto lo tenga, me lo descargo, lo pruebo, y si puedo lo corrijo.

Saludos.

3. Control de luces desde pic pinguino « El Weblog de Ivan Ricondo (Ubanov) - 3 febrero, 2010

[…] primer proyecto de verdad sobre pinguino (si no sabes lo que es mira el siguiente link: https://ubanov.wordpress.com/2010/01/28/primer-contacto-con-pinguino-microchip-pic/), la semana pasada decidí montar una luces parecidas al ambilight, pero sobre mi tele sony (y […]

4. Guillermo Sieder - 15 octubre, 2010

Aprovecho tu experiencia para decidirme a usar Pinguino o Arduino.
Podrías decirme que memoria Eeprom tiene disponible para guadar datos? Necesito hacer una pequeña base de datos y el Atmega328 tiene 2Kbytes, y me resulta poco.
Muchas gracias por adelantado.

ubanov - 15 octubre, 2010

una base de datos con un microcontrolador?!?

Yo alguna vez he usado un 24C256 (256Kbits, es decir 32Kbytes)… pero no para hacer una base de datos….

Son memorias que se conectan por i2c, y creo que existen de mas capacidad (por ejemplo la 24C1024)

BoOpS - 8 noviembre, 2010

Como bien dice ubanov puedes usar memorias con I2C (un mismo puerto te permite conectar hasta 8 memorias del mismo “tipo” luego si coges de diferentes tipos (para tener direcciones diferentes) puedes reunir mas capacidad.

Otra opcion es usar una tarjeta SD o un Pendrive. Para las tarjetas SD basta con usar su modo SPI y para el pendrive hay un chip VNC1L que te permite leer de un fat32 facilmente por puerto serie.

Ah! Para los que no hayais podido uniros a las tiradas de pinguino o no dispongais de medios para montarlos he colocado unos cuantos en ebay basta con buscarlos por “Pinguino Pic” o “pinguino arde”

5. Ernesto - 14 diciembre, 2012

Hola quisiera preguntar como hago para compilar y cargar el programa al pinguino sin usar la GUI, estoy usando IDE pinguinox.3,

6. Raul - 19 febrero, 2013

Me parece muy interesante el proyecto, sobre todo el precio, baje el IDE 9 y menciona en un documento README que es muy similar a Arduino en la forma de programar, pero si existe mucho menos información, mucha de ella habla de errores. Que tal te va con el proyecto?

7. rey - 19 abril, 2013

hola puedes hacer un tutorial para ver como haces el bootloader del pinguino en linux y la instalacion de otros programas como el ide.

8. Andres Olano - 5 diciembre, 2014

Hola, excelente artículo. Una pregunta, ¿es posible armar un pinguino con PIC diferente a los que uno encuentra en los esquemas (18F2550)? Me gustaría inciarme en el tema y en mi poder tengo algunas cosas de proyectos viejos de la Universidad, entre ellos un PIC 16F877A-I/P, y me preguntaba si era posible aprovecharlo. Alguien conoce un esquema para este tipo de Micro?

Gracias por la info

ubanov - 25 diciembre, 2014

no lo puedes usar con pingüino… ese micro tiene muy poca potencia… pingüino de todas formas ha tenido poca aceptación… yo que tu me compraría en arduino (en china, por ejemplo en dealextream) los puedes comprar por unos 10€… y hay muchísimo más ejemplos y proyectos diseñados con eso…

Andres Olano - 25 diciembre, 2014

Muchas gracias por el dato, me consultare el Arduino entonces para experimentar y ver que proyectos puedo hacer

Un saludo,


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: