Probando el breakout watchdog32


Mejorar la Seguridad y Confianza de Arduino (y Raspberry) con un Watchdog Externo: Probando el breakout watchdog32



En el mundo de Arduino y la electrónica integrada en general, la seguridad y la confiabilidad son dos aspectos fundamentales. Uno de los problemas comunes que los desarrolladores pueden encontrar es el bloqueo inesperado del microcontrolador, lo que puede provocar malfuncionamientos críticos en todo el sistema. En este artículo, exploraremos cómo el uso de un watchdog externo puede contribuir significativamente a prevenir bloqueos no deseados y aumentar la seguridad y confiabilidad del sistema.

Entendiendo el Watchdog Interno de Arduino (qué es y cómo funciona)



El watchdog interno de Arduino es una función de seguridad integrada en el chip que ayuda a prevenir bloqueos o paradas anormales del microcontrolador en caso de errores en el programa o malfuncionamientos eléctricos.

Así es como funciona y cómo habilitarlo: el watchdog interno es esencialmente un temporizador que debe recargarse periódicamente o, dicho en términos técnicos, retriggera, con una función específica llamada wdt_reset() que debe incluirse en nuestro programa. Si el temporizador no se retriggera dentro de un cierto período de tiempo, alcanza su límite de conteo y luego el microcontrolador se reinicia automáticamente tras la generación de un reset. El temporizador del watchdog interno de Arduino está configurado con un período predeterminado, cercano a un segundo.

En resumen, cada vez que se llama a la función wdt_reset(), el temporizador del watchdog se retriggera. Nuestro programa debe retriggerar continuamente el watchdog para que el temporizador no expire. Si el programa se bloquea debido a un error de programación o un bucle infinito, o deja de retriggerar el watchdog debido a una perturbación eléctrica, el microcontrolador se reiniciará tan pronto como termine el tiempo del temporizador del watchdog, ya que genera un reset de hardware.

Para habilitar el watchdog interno en Arduino, sigue estos pasos:

- Incluye la biblioteca del watchdog: #include <avr/wdt.h>
- Configura el temporizador del watchdog con una de las opciones predefinidas, que son WDTO_1S para un tiempo de espera de 1 segundo y WDTO_2S para 2 segundos.
- Luego, retriggera el Watchdog Timer en tu bucle o en las partes del código donde desees hacerlo, insertando la llamada a la función wdt_reset().
Asegúrate de retriggerar regularmente el temporizador del watchdog, de lo contrario, el microcontrolador se reiniciará automáticamente si expira el temporizador.

Usar el watchdog interno es una buena práctica para aumentar la robustez y confiabilidad de tus proyectos de Arduino, especialmente en aplicaciones críticas donde el bloqueo de la CPU podría causar problemas al usuario o afectar la profesionalidad y la imagen del software.

Asegúrate de que cuando la CPU se reinicie después de un reset, este evento se registre, por ejemplo, incrementando una variable no volátil en la EEPROM. Esto será útil para verificar la robustez del sistema incluso después de muchos meses, leyendo el valor de esta variable.

¿Watchdog Interno o Externo?



Aunque el watchdog interno es una ayuda a la seguridad y mejora la confiabilidad, hay varias razones para agregar un watchdog externo al sistema.

- El watchdog interno utiliza uno de los temporizadores del microcontrolador, lo que podría ser una limitación para nuestras necesidades.
- Hay algunas bibliotecas (por ejemplo, las relacionadas con la gestión de pantallas OLED) que entran en conflicto con el watchdog interno debido al uso del mismo temporizador.
- En escenarios altamente críticos o peligrosos, una buena solución, como dictan las certificaciones de seguridad, es tener redundancia en los sistemas de seguridad, preferiblemente construidos con circuitos o tecnologías diferentes. Aquí, un watchdog externo puede complementar al interno.
Personalmente, siempre uso un watchdog externo cuando es posible porque es más manejable. Puedo desconectarlo físicamente del reset mientras tengo el disparador en el osciloscopio para resolver problemas de código más rápidamente, lo que, de lo contrario, reiniciaría continuamente la CPU, causando pérdidas de tiempo significativas.

En la Práctica (Pruebas de la placa WATCHDOG32)



Buscando en Google el término watchdog, te das cuenta de inmediato de cuántos chips disponibles realizan esta función, casi siempre acompañados del control de voltaje de alimentación, uno de los principales problemas que pueden causar bloqueos de la CPU.

Para probar rápidamente uno de estos chips, naturalmente opté por un breakout, una placa preensamblada. Mi elección recayó en un módulo llamado WatchDog32, que encontré en un kit en eBay (https://www.ebay.es/itm/235363182136).

Analizamos un momento el módulo Watchdog32:

- Está disponible en tres versiones: kit de componentes, preensamblado o solo PCB.
- Monta el chip ADM1232 o MAX1232.
- Tiene tres tiempos ajustables (0,15 seg, 0,6 seg y 1,2 seg) configurados cerrando un puente de soldadura.
- Tiene dos umbrales de control de voltaje de alimentación (4,75 V o 4,5 V) configurados cerrando un puente de soldadura.
- Tiene una característica indispensable para ser usada con Arduino: el pin ENABLE y el correspondiente jumper de seccionamiento, que permite excluir el reset generado durante las operaciones preliminares de ajuste del sketch y habilitar el Watchdog solo cuando Arduino ha completado su arranque, evitando un reinicio infinito que no permitiría que arranque. También podemos habilitar el watchdog después de las operaciones de arranque de Arduino, típicamente como la última operación en nuestro SETUP, después de la primera retrigger.
- Tiene un LED verde para indicar la presencia de alimentación.
- Tiene un LED rojo para indicar un reset desde watchdog32. Si el módulo no está habilitado a través del pin ENABLE o tiene el jumper que corta el reset del chip de Arduino, veremos que el LED rojo se enciende, pero Arduino no se reiniciará realmente.
Una vez conectado el breakout (nuestro módulo watchdog32) con los cables Dupont habituales, según el diagrama adjunto, utilicé el sketch disponible en eBay junto con el módulo para probarlo rápidamente. Este sketch tiene un menú donde podemos realizar algunas pruebas:

- Retrigger watchdog32 dentro de los tiempos preestablecidos, donde no se observará ningún reinicio.
- Retrigger watchdog32 con tiempos más largos de lo necesario, donde se producirá un reinicio.
- Retrigger watchdog32 con tiempos crecientes para descubrir el tiempo real de intervención.
Inútil decir que todas estas operaciones deben realizarse a través del terminal serial del Arduino IDE.

Consideraciones Finales y Lógica Externa de Inicio Automático para el Watchdog Externo:



La seguridad y la confiabilidad son prioridades cruciales al desarrollar proyectos con Arduino. Agregar un watchdog externo puede facilitar las operaciones de depuración. Con la comprensión e implementación adecuadas, puedes aumentar la estabilidad y confianza en tus proyectos integrados.

Una buena solución sería habilitar el watchdog externo con un circuito de retardo de hardware, como un NE555 en configuración monoestable, que habilite Watchdog32 después de unos segundos al encenderlo. Esto también cubriría aquellos casos muy raros en los que se produce una perturbación entre el encendido y la habilitación del watchdog, un caso remoto pero no imposible que podría bloquear la CPU sin posibilidad de recuperación, excepto con un reinicio manual; el sistema se reiniciaría automáticamente.


L.Pautasso (contactos: lpautas gmail)


El enlace a la placa https://www.ebay.es/itm/235363182136

Los banners publicitarios en esta página son molestos, pero nos permiten pagar los gastos del servidor. Si haces clic en uno de ellos, también contribuirás al mantenimiento del sitio. GRACIAS




Cerca 


Categorie Articoli

Ultimi articoli

Vantaggi_Alim._Controllo_Corrente   APRI 

Camping-La-Secca-Moneglia   APRI 

Safety-Relays   APRI 

Rele-di-sicurezza   APRI 

Internal-or-External-Watchdog   APRI 

Watchdog-interno-o-esterno   APRI 

Ripetitore-di-allarme-su-Whatsapp   APRI 

Bufala-in-crosta   APRI 

Home-Automation-ESPeriment   APRI 

ESPerimento-Domotica   APRI 

Arduino-measures-liquid-level   APRI 

Arduino-misura-livello-liquidi   APRI 

finder   APRI 

LORA-english-version   APRI 

Pluviometro-LORA   APRI 

Pillole_di_Promessi_Sposi   APRI 

LORA   APRI 

promessisposi-riscrittura   APRI 

Arduino_crashes   APRI 

Arduino_si_blocca   APRI 

Arduino_e_Trenino   APRI 

millis_no_overflow   APRI 

millis   APRI 

Arduino_millis_no_Overflow   APRI 

millis   APRI 

Impara-Giocando   APRI 

Corso-di-elettrotecnica-ed-elettronica-3-volumi   APRI 

Libro-tutto-sull-audio---inglese   APRI 

Libro-ELETTRONICA-FONDAMENTALE   APRI 

Il-timer-NE555   APRI