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.

No hay comentarios:

Publicar un comentario