24 de Agosto, 2012

El nuevo Arduino Leonardo

Mi Leonardo
En fotos parece más grande :)

Quizás hubiera sido mejor empezar por algo más probado, pero me decidí por el nuevo Arduino Leonardo, y está complicando las cosas.

El Leonardo está basado en el chip ATmega32u4, que por una parte tiene unas funcionalidades muy atractivas (como gestión del USB integrada, más pins digitales, un PWM extra, 4 timers, ...) y por otra algunos inconvenientes, siendo el más destacable que va montado en superficie (ah, y el conector es micro-USB).

La verdad es que para empezar y cacharrear un poco tampoco es muy importante, hasta que empezamos a tocar librerías y nos damos cuenta que no soportan Leonardo (todavía, imagino que al menos las que van incluidas en el core de Arduino serán actualizadas más adelante).

Por ejemplo: he estado jugando con la idea de reproducir audio PCM (Pulse-Code Modulation) usando uno de los pins PWM para enviar pulsos de 8bits a un altavoz a la frecuencia adecuada, de forma que consigamos una señal analógica reproducible.

Para ello he intentado reprogramar uno de los timers a 8KHz (o 125 microsegundos), de forma que cada vez que el timer genere una interrupción, mi código envíe la correspondiente muestra de 8bits al altavoz.

No he conseguido hacer funcionar ni Tone (en el core de Arduino), ni este ejemplo para reproducir audio PCM, así que pensé en hacerlo yo mismo usando una de las librerías para gestionar los timers descritas en Timer1. Pero nada, no hay forma de hacerlo funcionar :(.

Sospecho que todo está relacionado con los pines y los temporizadores (mirando el código de las librerías -muy sencillo, es solo un fichero en C++-). Le he dado vueltas a la documentación del microcontrolador y a cómo se han montado los pines en Leonardo, pero por ahora es demasiado complicado para mi :P.

Al final he conseguido algo con la librería Timer3 y un Teensy 2.0 (que también usa un ATmega32u4 y mola mucho; lástima que no es Open Source), pero me fastidia no poder jugar con el Leonardo :(.

Es bastante interesante, y no deja de tener gracia que con tres trocitos de cable y una resistencia se pueda reproducir sonido en cualquier altavoz que tengas por casa :).

He subido mi código de prueba a un repositorio, aunque solo lo he probado con el Teensy 2.0: play-pcm-example. Si no le tienes manía a G+, he subido un vídeo de demostración.

Actualización: nada, al final he estado leyendo la especificación del chip (es el fichero doc7766.pdf; ¡no es necesario leer las 433 páginas!). Lo más interesante está en la tabla 14-5, donde describe los modos Fast PWM (estoy usando ahora mismo el modo 7, con un contador de 10 bits y sin prescaler consigo 15625Hz :P).

Anotación por Juan J. Martínez, clasificada en: arduino.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: