Watchdog con el 555

Razones para utilizar watchdogs (supervisores) en nuestras aplicaciones embebidas son muchísimas, pero todas tienen como objetivo que los programas se recuperen en caso de haber perdido la ruta, y que el sistema quede en un estado seguro.

¿Qué es y qué necesito?

Un watchdog (perro guardían o supervisor) es un dispositivo de hardware que cuenta hacia abajo a una frecuencia determinada. Cuando la cuenta llega a cero el sistema se reinicia (se resetea); para que no llegue a cero, tu aplicaión debe alimentar al supervisor reiniciando la cuenta. Cuando tu programa se pierde la cuenta no se puede reiniciar, y es entonces que el contador llega a cero.

Los watchdogs pueden ser externos o internos al procesador. Los externos son más seguros porque son completamente independientes al procesador, aunque ocupan espacio en el PCB y tienen un costo económico, y como dicen los que saben, engordan la BOM (Bill of materials, lista de materiales); además requieren pines extras del micro para alimentarlo (uno o dos pines). Los watchdogs internos son parte del chip, por lo que no tienen costo, ni ocupan espacio, ni necesitan pines extras… pero son menos seguros ya que comparten el mismo espacio de silicio. El principal problema es que la señal de reloj podría fallar junto con el programa, y por lo tanto, nunca reiniciarlo. Afortunadamente casi todos los fabricantes incluyen un reloj independiente para el watchdog, lo que en teoría los hace más seguros.

En este post te voy a mostrar cómo hacer un watchdog externo utilizando a uno de nuestros mejores amigos: el 555. Lo hago por dos razones:

  • Es divertido, muy fácil de realizar, y no siempre tenemos a la mano un watchdog propiamente dicho.
  • Podría pasarte que (al primo de un amigo ya le sucedió) mientras desarrollas tu aplicación y afinas los tiempos del watchdog interno dejes inservible a tu micro, lo que conocemos como ladrillo o brick. Por supuesto que podemos recuperarlo, pero perdemos tiempo. El watchdog externo simplemente lo desconectas en caso de que no lo necesites o no esté funcionando como quieres. Esta situación se pone peor si estás desarrollando tu aplicación con un depurador por software.

El circuito

El watchdog es muy sencillo. No es otra cosa que poner al 555 en modo astable, es decir, funcionando como oscilador, pero con tiempos altos y bajos completamente asimétricos: el tiempo en alto, el cual es la cuenta máxima, es del orden de los segundos, unos 15, 20, 30, etc, mientras que el tiempo en bajo, el cual manda la señal de reinicio al micro, es del orden de los milisegundos, lo suficiente para que el micro reconozca la señal de reinicio. Veamos al diagrama y luego lo comentamos:

Da click en la imagen para agrandarla.

Para que este circuito funcione como supervisor tenemos que descargar al capacitor C1 antes de que se cumpla su tiempo, ya que si no lo hacemos, entonces la señal en el pin 3 (OUT) pasa de alto a bajo reiniciando al micro. Esto es, para nuestro watchdog basado en el 555 debemos poner un pulso negativo (alto-bajo-alto) en el nodo de C1 antes de que el tiempo expire.

El diodo que llega al nodo de C1 a través de la resistencia de 100R está ahí para aislar al capacitor de nuestro micro para que no altere el proceso de carga. La etiqueta D4 hace referencia al pin D4 de Arduino, ya que fue en esta plataforma donde desarrollé el circuito, pero obviamente éste funciona con cualquier otro micro.

La señal de salida la tomamos del pin 3 (OUT) y se la inyectamos al chip a través de un diodo. Este diodo está ahí para aislar nuestro watchdog de los componentes del reset normal del chip (resistor-capacitor).

Y ya, eso es todo. Si en un momento dado ya no quieres al watchdog, o necesitas desactivarlo temporalmente, simplemente desconectas el cable que sale del pin 3 (OUT).

Resultados

Con los valores indicados en el diagrama, el tiempo que tienes antes de que el chip se reinicie es de 15 segundos, aunque en la práctica el tiempo que obtuve fue de 20, mientras que la señal de reset dura aproximadamente 150 milisegundos. La siguiente imagen muestra las señales obtenidas

La señal en amarillo es la que proviene de D4 (el pin de alimentación del watchdog), y la azul es la señal de reinicio. Puedes ver que después de dejar de alimentar al watchdog pasan 26 segundos antes de generar la señal de reinicio. Después de esta señal pasan 8 segundos antes de que nuestro programa reinicie, ¿porqué? Porque es el tiempo que tengo programado en mis micros ATmega328 para que cargue el bootloader. Lo normal (el valor de “fábrica”) es un segundo en los Arduino UNO, pero yo lo modifiqué a 8.

En primer plano está el prototipo del watchdog en un protoboard. Al fondo una tarjeta tipo Arduino, UB-1S328 de mi autoría.

Programa de prueba

Desde el punto de vista del programa que estará alimentando al watchdog (o como se le dice en inglés, kicking the dog (pateando al perro)) también es muy simple:

#define PIN_WATCHDOG 4

void setup() 
{
   // inicialización del hardware ...

   pinMode( PIN_WATCHDOG, OUTPUT );
   digitalWrite( PIN_WATCHDOG, HIGH );
}

void loop() 
{
   // hace lo que el programa debe hacer ...

   digitalWrite( PIN_WATCHDOG, LOW );
   delayMicroseconds( 100 );
   digitalWrite( PIN_WATCHDOG, HIGH );
}

Jamás alimentes al watchdog desde una interrupción periódica.

Los gurús de los sistemas embebidos.

¿Qué sigue?

Hoy vimos una aplicación práctica y funcional del 555: un supervisor externo. Algo que podríamos hacer, aunque no es necesario, es colocar un transistor MOSFET (tal vez un 2N7000 o similar) con la terminal DRAIN conectada al nodo de C1, y el pin del microcontrolador a la terminal GATE, para que C1 se descargue a través del transistor y no del micro.

Del lado del software, deberías considerar probar varias condiciones antes de alimentar al supervisor; es decir, asegurarte que el sistema está funcionando al 100% antes de decidir alimentarlo.

(En esta entrada menciono brevemente (en inglés) el watchdog incluído en el ATmega328, y un par de consejos más.)

Espero que esta idea te haya sido útil. Si tienes comentarios, dudas o preguntas, por favor házmelas llegar. También cuéntame si lo realizaste y qué tal te funcionó.

Una respuesta para “Watchdog con el 555”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s