Necesito instalarle el watchdog a un arduino Uno ya que se encuentra en un lugar con muchos transitorios debidos a arranques de grandes motores . El arduino se cuelga haciendo cualquier cosa sin responder al teclado e imprimiendo simbolos aleatorios en el lcd. Como nunca utilicé el wdt en arduino la consulta es si aunque el micro esté haciendo cualquier cosa el wdt se dispara igualmente reseteandolo.
Por lo que busqué el wdt ya viene incluido el el IDE y no es necesaria ninguna librería externa, solo el #include <avr/wdt.h>. Esto es asi?. Desde ya muchas gracias
El WDT resetea el micro si no es reiniciado antes de que termine el tiempo indicado.
Por ejemplo, poniendo en loop() la instrucción
wdt_reset();
el WDT se reinicia en cada pasada.
Si por la razón que fuese, esa instrucción no se ejecuta antes del tiempo indicado con
wdt_enable(timeout);
se resetea el micro.
Un "esqueleto" del uso del watchdog es este:
#include <avr/wdt.h>
void setup() {
// ...
wdt_enable(WDTO_8S);
}
void loop() {
// ...
wdt_reset();
}
Donde los puntos suspensivos comentados representan el resto del código.
Básicamente tienes que habilitar el perro guardian en el setup y llamar antes de que se acabe el tiempo a la función reset.
La función wdt_enable acepta los siguientes valores:
#define WDTO_15MS 0
#define WDTO_30MS 1
#define WDTO_60MS 2
#define WDTO_120MS 3
#define WDTO_250MS 4
#define WDTO_500MS 5
#define WDTO_1S 6
#define WDTO_2S 7
#define WDTO_4S 8
#define WDTO_8S 9
Estos son los valores de tiempo que acepta el perro guardian, de 15ms a 8s.
En tu código deberás evitar delay y hacer que tu loop se ejecute dentro del tiempo establecido ya que si no se reiniciará.
Ahora bien, aunque el perro guardian reinicia el arduino mi experiencia me dice que el Arduino se "cuelga" si o si en ambientes de ruido industrial como en tu caso con motores grandes arrancando. Hay que proteger mucho el Arduino para tener un funcionamiento bueno.
Cuando digo "cuelga" es literalmente eso, se queda en un estado que ni el perro guardian es incapaz de despertarlo. Creo que estos cuelgues se producen debido a que algo de ruido entra por la señal del reloj que hace que la lógica interna del reloj se desconfigura y es como si quitaras el cristal de cuarzo, directamente se para porque no tiene pulsos de reloj.
Y ojo con los LCD, sobretodo los de cristal liquido, son muy sensibles a los ruidos.
Exactamente esa es mi duda @victorjam. Por lo visto el micro no se congela porque imprime todo el tiempo caracteres en el lcd y no responde al teclado. Por eso la incognita de si funcionaría el wdt. Supongo será cosa de ensayarlo a ver que pasa. Muchas gracias por sus comentarios.
Si, claro, tenés que probar cual es el mejor momento para hacer el reset.
Por ej., dices que no lee el teclado, entonces puede ser un buen lugar la función que lee el mismo. Si en, por decir, 8 segundos no pasa por ahí, no resetea el WDT y se reinicia el micro.
De todos modos, lo principal es mejorar el aislamiento y alimentación del arduino para evitar los cuelgues. El WDT debería ser el último recurso.
Hi,
Dices que el arduino se friza ya que esta controlando motores etc. Cuando prendes equipos que son inductivos estos producen ruidos electromagneticos que pueden influir en el funcionamiento de control por un micro Creo que aqui deberias de ver como protejer el arduino de estos ruidos y como estas alimentando el arduino para eliminar los ruidos. Estos ruidos se pueden eliminar usando compponentes disenados especialmente para eliminar estos ruidos. Uno que es bien bueno para evitar estos ruidos electromagneticos es el MOC o varistor. Para mi seria mejor tratar de eliminar estos ruidos ya que como estas controlando el fucionamiento de motores que pasa al equipo controlado por el arduino mientras esta frizado o ejecutando el wdt. Para mi si se friza el sistema no esta confiable.
MOV (Metal Oxide Varistor).
Si el sketch del arduino está bien estructurado sería muy raro que la parte que la parte que escribe caracteres funcione y en cambio, la del teclado no.
Que en el lcd se impriman caracteres aleatorios todo el rato no significa que el arduino esté escribiendo cosas raras, si no más bien que es el microcontrolador que controla el LCD está haciendo cosas raras.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.