Watchdog timer de Arduino

La tecnología moderna tiene un sin fin de beneficios, nadie puede negarlo. Sin embargo, con grandes beneficios vienen grandes bugs. Windows tiene el famosísimo pantallazo azul, Mac (aunque sus usuarios lo oculten) también crashea de vez en cuando. A más de uno le ha pasado que el celular se vuelve lento cuando tiene muchos días funcionando sin ser reiniciado. Dentro del mundo de Arduino este tipo de problemas no son excepción. Afortunadamente, contamos con una opción para resetear o reiniciar un programa en caso de que no responda, que es el caso de la herramienta watchdog.

¿Qué es un Watchdog?

watchdog

Es una herramienta que poseen algunos microcontroladores (como el ATMega328p del arduino), que permite un «monitoreo» de la función que se está ejecutando para que, si ésta llegara a fallar, el watchdog se encargue de reiniciar el programa para eliminar la falla.

Mediante un timer físico, el watchdog mantiene una cuenta que aumenta en paralelo al programa. Si la cuenta acumula un cierto valor, se enviará una interrupción que resetee el sistema.

En operación normal, el valor del timer es por lo general cero, pero si el programa falla, el reset no ocurre y el watchdog lanza acciones para solucionar el problema.

Cuando utilizamos el watchdog de arduino, requerimos el uso de registros de bits para seleccionar el comportamiento del chip. Los correspondientes registros y su significado se describen en el datasheet del microcontrolador que se encuentra en el arduino. Sin embargo, el IDE de arduino vine con algunas funciones y macros para facilitar el proceso, que pueden ser importadas mediante el comando #include <avr/wdt.h> . De esta manera, podemos inizializarlo llamando a la función wdt_enable(). El argumento de esta función indica el tiempo antes de que la placa se reinicie, en caso de que el timer no se haya reseteado.

Tiempos del watchdog.

Tiempo antes de que se dispare el watchdog.

15mS
30mS
60mS
120mS
250mS
500mS
1S
2S
4S
8S

Argumento de wtd_enable()


WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S

Código del watchdog

Como podemos observar, las tres funciones principales que se utilizan son:
wdt_disable() para desactivar el timer mientras se configura el arduino,
wdt_enable(tiempo) para asignar un intervalo al timer e iniciarlo,
wdt_reset() para renovar el intervalo asignado y que el programa no se reinicie.

Escríbenos tus dudas o comentarios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Usamos Cookies en nuestro sitio WEB

Por favor confirma, si aceptas nuestras cookies de rastreo. También puedes negar el uso de cookies de rastreo y seguir navegando sin que ninguna información sea enviada a servicios de terceros.