Tercera parte del post sobre cómo programar remotamente un Arduino con los Xbee oficiales.
7. Consideraciones slave bootloader
Hay que grabar el bootloader de Sparkfun, ya sea para el ATMEGA168 o el ATMEGA328 en el Arduino Slave, el que queremos reprogramar remotamente.
A diferencia del bootloader que proporciona SparkFun, en nuestro caso hay cierto delay entre el reset del Slave y el envio del programa. Es el tiempo necesario para pasar los módulos Xbee a modo AT y enviar el primer caracter de programación (ASCII 0x05) para comunicarle al bootloader remoto que queremos reprogramar el microcontrolador.
A diferencia del bootloader que proporciona SparkFun, en nuestro caso hay cierto delay entre el reset del Slave y el envio del programa. Es el tiempo necesario para pasar los módulos Xbee a modo AT y enviar el primer caracter de programación (ASCII 0x05) para comunicarle al bootloader remoto que queremos reprogramar el microcontrolador.
Para evitar que este delay sea demasiado grande para que el bootloader entienda que NO debe entrar en modo programación, modificamos ligeramente el bootloader de Sparkfun en el Arduino Slave alargando el tiempo de espera antes de iniciar el programa.
En el bootloader de Sparkfun está definida la variable MAX_WAIT_IN_CYCLES:
MAX_WAIT_IN_CYCLES = [(MAX_CHARACTER_WAIT)*8]*CPU_SPEED / BAUDPor tanto por defecto:
Por defecto:
MAX_CHARACTER_WAIT = 15
CPU_SPEED = 16MHz
BAUD= 19200 bps
MAX_WAIT_IN_CYCLES = 100E3 ciclos , siendo 1/16MHz = 1ciclo, el tiempo maximo espera 6.25 mseg
Modificando el bootloader encuentro que el máximo valor de MAX_CHARACTER_WAIT que puedo utilizar sin afectar el funcionamientodel bootloader es 75. Con ese valor conseguimos un tiempo máximo de espera de 31.25 mseg. A la práctica resulta suficiente.
Así la modificación que recomiendo sobre el bootloader es:
// #define MAX_CHARACTER_WAIT 15
#define MAX_CHARACTER_WAIT 75
Se compila el bootloader con avrdude, y se graba en el Arduino Slave. Para grabar el bootloader, si no disponéis de un grabador ISP, se puede utilizar un Arduino Duemilanove, las instrucciones de cómo hacerlo están en la web Burning the Bootloader without external AVR-Writer.
Si a alguien le interesa, le puedo enviar el bootloader compilado, enviadme un mail.
En el siguiente post pondré el código del sketch.
Hasta pronto.
No hay comentarios:
Publicar un comentario