Watchdog

Hola amigos:

Quisiera consejos o sugerencias sobre el uso del watchdog en Arduino mano, realizo proyectos en ambientes con mucho ruido eléctrico y ante eventuales “cuelgues” me gustaría saber como reponer el micro en el lugar donde se “quedo” o al menos lo mas cerca posible. Gracias

Watchdog, básicamente, lo que hace es reiniciar el arduino, si no se le llama, dentro del tiempo especificado, de forma que, que reinicie en el mismo sitio donde se quedó, dependerá de la programación que se le haga, de las variables de las que dependa...

Gracias carmeloco por tu respuesta, no he encontrado librerías que simplifiquen esta tarea que mencionas, quizas sea mas simple de lo que creo, pero no se como implementar el watchdog sobre un loop, quisiera saber si estoy acertado pensando:

"el watchdog es un contador independiente, y lo que debo hacer es comparar variables de tiempo para saber si ocurrio un "cuelgue", cuantificar donde ocurrio, resetear y volver al punto donde ocurrió el evento."

dime si estoy acertado.

Gracias

La llamada al watchdog, se hace en un punto en el loop, de forma que se llame cada vez que se repite el loop. Dependiendo de lo que hayamos programado, el loop puede tardar más o menos tiempo en repetirse, así que el whatchdog, debe configurarse en un tiempo superior al que tarda en repetirse el loop. Si se supera ese tiempo y no se ha llamado al whatcdog, significa que algo pasa, o sea, un bloqueo, porque el loop no se ha repetido en el tiempo normal o esperado, de forma que whatchdog, reinicia el microcontrolador.

Una vez reiniciado, empieza todo de nuevo. Empezar donde se quedó antes del reinicio, puede requerir que el valor de alguna, algunas o todas las variables, estén en el valor que estaban en ese momento, lo que puede hacer necesario su guardado periódico en algún tipo de memoria no volátil.

Como no especificas ni código ni aplicación específica, mi respuesta es tan genérica como lo es la pregunta.

Que precauciones extra has tomado o estas tomando para evitar el ruido eléctrico?
El watchdog es indiscutible, así que de el no te salvas y es una resguardo para evitar que nuestro operación continúe.
Pero debes considerar usar optoacopladores para entradas, salidas e incluso entradas analógicas si las hubiere. Una especie de barrera intrínsica sin serlo.
Todo esto además de usar una fuente con filtro RFI.

Hay un buen hilo al respecto en Proyectos sobre Arduino como PLC que puede darte una idea de por donde apuntar.

Repito. Yo estoy de acuerdo con el watchdog pero un diseño cuidadoso debería minimizar su necesidad, aunque minimizar no quiere decir excluir.

Gracias Carmeloco y Surbyte por sus respuestas, son genéricas y acertadas, ya que no tengo un código para describir, sino que mi intención es formar un "criterio de uso" del watchdog.

Surbyte, gracias por los consejos, siempre tomo la precaución que dices, filtro entradas con optos, filtro fuentes y las entradas analogicas las suleo filtrar con capacitores de 0.1mf, lo cual estabilizaza las lecturas.

Aprovecho para compartir que, en algunas ocasiones he tenido que reforzar el pullup del reset y filtrarlo, ya que con los pines al "aire" se reseteaba o colgaba el micro aleatoriamente, aclaro que era un ambiente con muchas válvulas solenoides de AC, que aun estando aisladas, inducian en su apertura una FEM que recorria toda la estructura, gnd, vcc, etc., la "veia" hasta con el osciloscopio desconectado. Por ello es que me surgió el interés del del watchdog, como media adicional para reinicio en caso de fuerza mayor. Saludos.

Puedes informar como filtraste o endureciste ese RESET, siempre sirven todas las experiencias

Me ha resultado efectivo conectar al Reset pin una resistencia de 10k a 5vcc y un capacitor cerámico de 100nF a Gnd, con esto, al menos en mi caso, he filtrado pulsos. Con esta configuración hay un inconveniente, no se resetea el micro cuando iniciamos una conexión serie con un terminal, solo se resetea presionado el botón correspondiente.Slds.