Paso 3: Cómo configurar el temporizador de vigilante interno de Arduino
Resumen: En el paso 3 de este Instructable, veremos cómo configurar el temporizador de vigilante interno de Arduino. También hablamos de los temas con el temporizador de vigilante interno de Arduino y explicar por qué un temporizador WatchDog externo, es una mejor opción en sistemas de muchos pero no todos.
Configurar el temporizador de vigilante interno de Arduino
Arduino es una máquina mucho más simple que un Raspberry Pi. Sin embargo, es realmente más fácil colgar un Arduino que es una frambuesa Pi porque todo el código es único en el Arduino. Solo roscada significa que hay solamente un programa corriendo en un momento en el Arudino (a excepción de interrupciones, de manera de pensar). El punto es que si sólo tienes un hilo en un momento, cualquiera colgar en que hilo detendrá el equipo. Naturalmente, hay otros problemas que pueden causar su código a crash y Arduino a encerrar. Tiempos de espera en los periféricos, energía cuestiones, RFI, etc., etc.. Mal código utilizando la función millis() es un problema clásico. Es necesario manejar el rollover a 49,5 días si no está utilizando un reloj en tiempo real.
Cómo utilizar el WatchDog interno de Arduino (si puede hacer que funcione)
En primer lugar de una definición. OMC se define como la cantidad máxima de tiempo que el temporizador del vigilante puede contar antes de que necesite ser reajustada (en otras palabras, cuando reiniciará el equipo si el equipo desaparece).
Hay un montón de cosas que mantendrá la vigilancia interna del trabajo en el Arduino, así que ten cuidado.
Aquí es una manera de trabajar con el temporizador interno del vigilante de Arduino. En primer lugar, la OMC de todos los modelos de Arduino es un máximo de 8 segundos. Tener en cuenta. Tener una más OMC cubre pecados mucho más en mi opinión (OMC es 16 segundos en el interior frambuesa Pi perro guardián – que todavía no es tiempo suficiente para nuestro gusto), por lo que la OMC del Arduino es un poco corto. A menudo tenemos serie procesos que se ejecutan más de 8 segundos en nuestros diseños. Sí, usted puede incorporar toques en el código, pero cuando se utiliza bibliotecas externas, es un dolor.
Para experimentar con tu Arduino WDT, construir un esquema nuevo en el IDE de Arudino. ADVERTENCIA: Si utiliza un ArduinoMega 2560 o dispositivo similar, usted puede "ladrillo suave" su dispositivo. Ver comentarios en la sección de problemas a continuación. Mi Arduino UNO de SainSmart funcionaba bien con este sketch. Comenzar con
Ejecutar el sketch y déjela funcionar durante 30 segundos o menos. Nunca debería ver el mensaje "Reinicie Arduino" otra vez después de reiniciar el sistema. A continuación, comente la declaración de RESETWATCHDOG como este:
#define RESETWATCHDOG
Ahora cuando ejecute el bosquejo, si el vigilante está trabajando, entonces usted debe ver el reinicio de Arduino cada 8 segundos o menos en el monitor serial.
Problemas con el temporizador de vigilante interno de Arduino
Uso de la Arduino interna WatchDogTimer es problemático en el mejor. El temporizador de vigilancia de Arduino tiene una OMC de 8 segundos para si estás descargando un bosquejo nuevo y el viejo bosquejo tiene activado el dispositivo de vigilancia, entonces usted puede entrar en una secuencia de reinicio infinito. Esto se llama "bricking suave". El Arduino es entonces prácticamente sin valor (sin mucho trabajo), pero sigue funcionando. Perro guardián vence, gestor de arranque se inicia, bootload obras por un tiempo, perro guardián caduca, etc., etc. etc.. Algunos cargadores de arranque ahora deshabilita el WatchDog adecuadamente, pero ten cuidado hay un montón de Arduinos por ahí (como el Mega 2560 - de que somos grandes fans) que todavía no funcionan. Puede actualizar el gestor de arranque pero no es una tarea fácil. Este es un problema que nos hemos topado varias veces.
- El vigilante interno de Arduino no ciclo de la energía del sistema. Reinicia el Arduino a través de la línea de Reset. Esto significa que no se reinicia en todas las condiciones. Especialmente en baja potencia / condiciones de apagón experimentan con Sistemas de energía Solar. He visto esto en Proyecto de Curazao.
- Hay problemas con el gestor de arranque (véase arriba)
- El temporizador de vigilancia interna no es totalmente independiente de la Arduino. Si el código salta a un pedazo de código desactiva el WDT, estás acabado. Tratar de sobreescribir el stack para ver qué cosas interesantes pueden pasar al código en un pequeño sistema integrado como el Arduino.
- La máxima OMC es de 8 segundos. Usted puede fácilmente en rutinas, tales como la comunicación serial para más de 8 segundos. Descubrir todas las posibilidades y poner llamadas wdt_reset() en el lugar correcto es difícil y con algunas rutinas seriales, imposibles.