viernes, 21 de diciembre de 2012

watchdog y arduino , el fin de los cuelgues inesperados


WatchDog , o perro guardian , es una funcion que nos permite,  mediante un temporizador/contador , asegurar que ante un problema en la placa arduino como por ejemplo , un bucle infinito, o alfun fallo en alguna rutina que nos congele la placa y no avance, esta se reinicie de forma autonoma.

Esto nos asegura una alta disponibilidad y seguridad de que la placa no se va a quedar "pillada" .

Su uso esta restringido a arduino UNO o las nuevas placas  mega 2560 o leonardo.

Pero tambien puedes usarlo en duemilanove, simplemente actualizando la placa a el bootloader de UNO mediante el tutorial que se encuentra en esta pagina.

Es muy sencillo de usar y nos permite seleccionar el tiempo maximo de espera antes del reinicio.

Los posibles tiempos son:

<li>WDTO_15MS</li>
<li>WDTO_30MS</li>
<li>WDTO_60MS</li>
<li>WDTO_120MS</li>
<li>WDTO_250MS</li>
<li>WDTO_500MS</li>
<li>WDTO_1S</li>
<li>WDTO_2S</li>
<li>WDTO_4S</li>
<li>WDTO_8S</li>

Necesitaremos añadir la libreria que contiene todas las funciones.

#include &lt;avr/wdt.h&gt;

En el setup del sketch colocaremos al principio  la llamada<strong> <span style="text-decoration: underline;">wdt_disable(); </span> </strong>
Al final del setup configuraremos el intervalo deseado añadiendo<span style="text-decoration: underline;"><strong> wdt_enable(WDTO_250MS); </strong></span>

cuidado con  poner un valor muy bajo o no dara tiempo a poder procesar y ejecutar la llamada que reinicie la cuenta atras.

Por ultimo, debemos llamar a la funcion wdt_reset();  dentro de la función loop
Esto reiniciara la cuenta atras evitando que se reinicie la placa.
importante llamarla, si no se reiniciara!


si veis que se queda reiniciando AUMENTAR EL TIEMPO, normalmente con un par de segundos sobra para reinicios en aplicaciones normales.. Y CUIDADO CON PAUSAR y esperar  con los DELAYS.

No hay comentarios:

Publicar un comentario