USANDO LOS WDT
Pues es bastante fácil. fácil. Solo hay que usar la librería que los gestiona, que ya viene instalada por defecto con el conjunto estándar de librerías en Arduino. #include
Y después solo tenemos tres instrucciones wdt_enable(timeout)
wdt_disable()
wdt_reset()
!a primera pone en marcha el WDT y hay que pasarle el pla"o de disparo de la alarma. Ya vimos c#mo sin querer en una sesi#n anterior que los pla"o son predeterminados y con un má$imo de % segundos
&'()S'*!+ -!)
/*0S&-0& 0-1)
SPP*(&)+ *0
23 ms
4+&*5231S
-&1ega %, 26%, 78%, 28%9, 8369
79 ms
4+&*5791S
-&1ega %, 26%, 78%, 28%9, 8369
69 ms
4+&*5691S
-&1ega %, 26%, 78%, 28%9, 8369
289 ms
4+&*52891S
-&1ega %, 26%, 78%, 28%9, 8369
839 ms
4+&*58391S
-&1ega %, 26%, 78%, 28%9, 8369
399 ms
4+&*53991S
-&1ega %, 26%, 78%, 28%9, 8369
2s
4+&*52S
-&1ega %, 26%, 78%, 28%9, 8369
8s
4+&*58S
-&1ega %, 26%, 78%, 28%9, 8369
:s
4+&*5:S
-&1ega 26%, 78%, 28%9, 8369
%s
4+&*5%S
-&1ega 26%, 78%, 28%9, 8369
!a segunda, ;dt5disable<=, para el reloj y desautori"a el 4+&. Siempre que uses un 4+& debe ser la primera instrucci#n de tu setup<= void setup()
{
wdt_disable();
……………
}
)sto no es imprescindible, pero es una p recauci#n muy recomendable, porque cuando tu Arduino se resetea, el WDT sigue en marcha, y si has cometido un error de cálculo, tu 4+& puede disparar antes de que te dé tiempo a reaccionar y entrarías en un ciclo mortal de reinicios continuos. Por eso es muy buena política cuando usas 4+&, poner la primera línea de tu c#digo el desactivarlo, haces lo que quieras y luego lo activas con ;dt5enable<=. Por ultimo para dar la vuelta al reloj de arena haces ;dt5reset<= y el tiempo vuelve a empe"ar. 0i que decir tiene que debes aseg>rate de que tu programa pasa a tiempo a dar la vuelta a la clepsidra. 0o te basta con suponerlo, &?)0)S que aseg>rate de que en el
peor caso tienes tiempo de sobra o te vas a encontrar con problemas raros que solo pasan de ve" en cuando, rate de que el tiempo de transmisi#n de los datos no supere el límite del WDT amos con un ejemplo práctico.
PROGRAMANDO UN WDT
amos a usar un programa muy sencillo que provoque un (eset continuo
Y pasamos al setup void setup()
{
wdt_disable();
// o te olvides
!erial.be"in($%%);
!erial.println(&'ntrando….&);
wdt_enable(*+_,!);
}
Seguimos la buena costumbre de empe"ar desautori"ando el 4+&
void loop()
{
wdt_reset();
!erial.println(-*odo bien…);
}
Simplemente empe"amos dando la vuelta al reloj de arena e imprimimos un mensaje. eamos el resultado
Perfecto. 0uestro programa indica que está entrando y luego el ciclo normal del programa saca el mismo mensaje una y otra ve" como era de esperar, porque las dos instrucciones se reali"an mucho antes del segundo que tarda en disparar el Watch Dog.
@Pero qué pasa si cometemos un pequeño error de novato como esteA void loop()
{
dela(,0%%) ;
wdt_reset();
!erial.println(-*odo bien…);
}
0os despistamos y metemos un sencillo delay, con más tiempo del que tarda en disparar el WDT. )! resultado es este
0uestro Arduino entra en un ciclo inmediato de reinicios porque estamos bloqueando la ejecuci#n normal del programa con un delay, que nos impide resetear el 4+& a tiempo. )s muy fácil ver el problema aquí, pero si no hubiéramos tenido la cautela (Que casualidad) de poner un mensaje desde el setup, algo poco frecuente, puede costarte los suyo entender por qué tuArduino se cuelga sin una ra"#n clara y reinicia de continuo sin ra"#n aparente. 0o quiero complicar más el programa. /reo que el ejemplo, por más que sencillo, ilustra muy bien las ideas básicas que gobiernan los WDT.
Si vas a correr un programa a largo pla"o, con baterías o no, pero esperas que funcione de continuo durante muchos meses o semanas, los 4+& son una herramienta imprescindible para garanti"ar la viabilidad de tu proyecto y desde luego os recomiendo que los uséis. Pero a cambio tienen una pequeBa complicaci#n adicional que puede darnos más de un dolor de cabe"a si no usáis la vuestra a la hora de programar.
RESUMEN DE LA SESIÓN
o
o o
'emos presentado la idea detras de los 4atch +og &imers en -rduino, y porqué son imprescindibles para proyectos de larga duracion. imos como se programan Presentamos los problemas que pueden presentar si no se es cuidadoso en su uso.