viernes, 11 de marzo de 2011

Arduino programación wireless con Xbee oficial. Segunda parte.

Seguimos con los posts que intentarán crear un sistema para programar remotamente un Arduino a través de los shields oficiales Xbee. En el último post planteamos que ibamos a utilizar la aproximación al problema que ya había hecho Sparkfun.

3. Mecanismo de Reset

De Sparkfun no puedo aprovechar su mecanismo de reset remoto. Sparkfun activa la señal Ready to Send (RTS) a través del programa Screamer, justo antes de enviar el programa hex  por el USB hasta la UART del AVR del Arduino.
Esta señal de RTS en la implementación de Sparkfun se conecta a un pin del modulo Xbee que con una determinada configuración de los módulos, se transforma en el reset remoto.
Comunicándonos a través de Arduino no se puede aprovechar este procedimiento, es más, tenemos que modificar el Arduino Master para evitar que se nos resetee el Arduino cada vez que enviamos un fichero. Tenemos que cortar el puente de DRT del Arduino, y ponemos un jumper "aéreo" para poder habilitar o deshabilitar este puente cuando nos interese.



Corto la pista que hay en el jumper RESET_EN del Arduino Duemilanove "víctima" de las fechorías.
Atención, nos interesa poner el jumper aereo cuando querramos programar este Arduino master, y tendremos que quitar el jumper cuando querramos programar remotamente el Arduino Slave. Hay que tenerlo en cuenta.

4. Xbee oficial vs Reset remoto
En el caso del Xbee oficial, el pin DIO7 del módulo Xbee está conectado a la señal de Reset, de forma que para resetar el Arduino Slave, hay que activar ese pin de forma remota. ¿Cómo podemos hacer eso?, mediante los comandos API del módulo Xbee y más concretamente, el "Remote AT Command Request", los comandos remotos AT. Enviamos un comando AT desde el Master para que se ejecute en el Slave.
Por tanto, el programa que utilicemos para hacer la programación remota tendrá que comenzar configurando tanto el Xbee del Master y del Slave en modo API.
Pero eso lo veremos en detalle más adelante, antes hay otro asunto que tratar.

5. Softserial
¿Cómo podemos enviar por un canal serie al modulo Xbee del Master el programa hex, al mismo tiempo que lo estamos recibiendo?, sólo hay un canal serie, el que viene del USB. La solución es utilizando una UART de software, un software-serial.
La librería que utilizo para implementar esta UART soft es la librería Newsoftserial.
La recepción del softserial (ssRX) la asigno al pin digital 6, y la transmisión (ssTX) al pin digital 7. Basta con tres comandos en el programa para la inicialización:

#include
uint8_t ssRX = 6;
uint8_t ssTX = 7;
NewSoftSerial nss(ssRX, ssTX);


En la función setup del sketch configuraremos la soft UART de la forma:
XBeeNSS.begin( 19200, ssRX, ssTX );

6. Xbee en modo API
Recordad que queremos hacer ese comando remoto para activar el pin DIO7 del modulo Xbee Slave y  de esa forma resetearlo para que se inicie el bootloader. La secuencia será la siguiente:

La softserial comunicación nos obliga a llevar dos cables de las UART soft desde el conector a los jumpers, tal como ilustra la siguiente foto:
 
En siguientes posts sigo explicando la implementación.

Hasta pronto.

jueves, 10 de marzo de 2011

Arduino programación wireless con Xbee oficial. Primera parte.

El objetivo de esta serie de posts es presentar un sketch para programar remotamente un Arduino utilizando los shields Xbee "oficiales".
En su momento me sorprendió no encontrar en la web una solución para esta funcionalidad. La encontré con los Xbee shields de Adafruit y de SparkFun, pero no para los Xbee shield oficial de Arduino. Finalmente desistí de seguir buscando, y me puse manos a la obra.
El proyecto consiste en lo siguiente:

1. Objetivo
Tenemos dos Arduinos con shields Xbee oficiales de Libelium, con módulos del tipo S1. A uno lo llamo Master y al otro Slave. El objetivo es programar desde el Master, remotamente, el Arduino Slave.

2. Herramientas disponibles
Esta funcionalidad está ampliamente comentada en la web para los shields de Adafruit y de Sparkfun. En ambas implementaciones utilizan la señal de Ready to Send (RTS) para resetear remotamente el Arduino Slave y cargar durante el arranque de su bootloader la aplicación por el puerto serie. De esta forma estamos simulando el serial bootloader pero sustituyendo el puerto serie-USB convencional del Arduino, por un puerto serie "virtual" a través del modulo Xbee.
A grandes trazos la solución de Adafruit tiene una serie de potenciales problemas:
- tenemos que tener el módulo Xbee que proporciona Adafruit o Sparkfun, que incorpora la posibilidad de conectar un I/O del modulo Xbee al reset de Arduino;
- la comunicación vía radio no es robusta, ruidos, mala recepción, ... puede provocar que finalmente no grabemos la aplicación correctamente en el Arduino Slave.

Sparkfun lo mejoró creando un bootloader que implementaba un control de errores en la comunicación.  A través de un programa software en PC se envía el programa binario en paquetes, y el bootloader del Slave, comprueba que el CRC es correcto. Si el paquete recibido no tiene el CRC correcto solicita que se le reenvie el paquete de nuevo. De esta forma la comunicación se hace más robusta.

Me decanto por la opción de Sparkfun, aprovechando el software (Screamer) para fragmentar el fichero hex a enviar. La extensión de la compilación de un programa tiene típicamente la extensión hex. Es el fichero binario, que se graba en la memoria Flash del microcontrolador.  No es fácil encontrar el fichero hex después de la compilación en el entorno de Arduino. Las instrucciones para encontrarlo están aquí.

Utilizo el bootloader diseñado por Sparkfun para el Arduino Slave, incorporando de esa forma, el cálculo del CRC y los mensajes de conformidad.

En siguientes posts sigo con la historia.

Hasta pronto.

jueves, 24 de febrero de 2011

Próximo lanzamiento web

Os podemos informar que dentro de poco tendremos online una primera versión de la web de lynxing en la que podréis ver los servicios que ofrecemos y los próximos productos.

Esperamos tener lista la primera versión en breve y anunciaros el lanzamiento en breve, estad atentos!!! ;)

jueves, 3 de febrero de 2011

Eagle PCB tutorial video

Farnell compró Cadsoft, la empresa propietaria de Eagle, el editor PCB más popular en el mundo de HW libre. Aquí va:

Farnell and CadSoft Webinar from element14 on Vimeo.

Hasta pronto

martes, 1 de febrero de 2011

open source ecology

El open source ha llegado al mundo granjero:


El video tiene música de Carl Orff.
Hasta pronto.

lunes, 31 de enero de 2011

Quadrotors

Hay un grupo de trabajo en la universidad de Pensilvania que trabaja en la programación de robots, es el  GRASP Lab. Aquí van algunos de sus logros en video:





domingo, 30 de enero de 2011

Arduino documental

En su día ya me hice eco del proyecto sobre un documental de Arduino. Pues bien, finalmente el documental dió a luz hará unas semanas.
Aquí está:

Arduino The Documentary (2010) Spanish HD from gnd on Vimeo.

Hasta pronto.