TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: RedPic en 27 de Febrero de 2009, 18:53:01

Título: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: RedPic en 27 de Febrero de 2009, 18:53:01
El "Watch Dog Timer" o "Temporizador Perro guardián" es un artificio que se utiliza de antiguo para evitar que los microprocesadores se queden "colgados".

No es extraño que en microelectrónica se den circunstancias de hardware o firmware no previstas por el diseñador en las que un microprocesador se quede en un estado indeterminado del que le sea imposible salir sin una ayuda externa.

El WDT lo que hace fundamentalmente es resetear el micro tras un periodo de tiempo determinado. Su funcionamiento es similar a la Interrupción por Desbordamiento de un Timer, que se produce cuando un Timer que es incrementado continuamente pasa de su valor máximo al mínimo para comenzar de nuevo a contar.

En el caso del WDT en lugar de saltar una interrupción se genera un reset automático en el momento de producirse dicho desbordamiento.

Pero evidentemente en condiciones normales, nuestro micro funcionando correctamente, no debería producirse dicho reset automático.

Para evitar que el reset se dispare es para lo que aplicamos el restart_wdt(); o sea que "restauramos" el timer del WDT, o lo que es lo mismo: lo volvemos a poner a 0 "a mano" y vuelve de nuevo a iniciar su cuenta para acercarse al abismo y amenazarnos con resetear el micro si antes no lo "restauramos" de nuevo.

Un ejemplo tonto:

Configuramos nuestro WDT para que salte cada 5 ms, por ejemplo.

Entramos en una rutina que espera a que le lleguen una docena de caracteres vía rs232, y cada vez que le llega uno hace un restart_wdt().

Al recibir el doceavo carácter sale de la rutina y continua su ejecución normal.

Por manos del demonio se nos escapa el hacha que con la que estábamos haciendo juegos malabares y corta accidentalmente el cable de la rs232, justo cuando el PIC había recibido el carácter número 11 de los 12 que esperaba.

Por lo tanto nuestro programa se queda esperando un carácter que nunca le va a llegar, al menos durante el tiempo en que tardemos en sustituir el cable accidentado.

¿Y qué ocurre entonces con el resto de del programa que debía estar funcionando? pues que todo está detenido indefinidamente.

Pero, para eso está el WDT. Como restaurábamos el contador cada vez que recibíamos un carácter y estos iban llegando, uno a uno en su cadencia natural, el WDT no se desbordaba y todo iba bien. Pero tras recibir nuestro 11 carácter y quedarse esperando el 12 nadie ha restaurado el WDT por lo que este camina, paso a paso, tick a tick, hasta el temible desbordamiento ... y éste se produce indefectiblemente 5 ms después de haber recibido el onceavo carácter.

El PIC se resetea y todo vuelve a comenzar de nuevo.

Si hemos sido lo suficientemente inteligentes como para escribir un 1 en la EEPROM al iniciar la recepción de los susodichos 12 bytes, y teníamos previsto escribir un 0 en la EEPROM en el mismo sitio para indicar que la última recepción de 12 bytes fue un completo éxito tendremos disponible un indicador veraz y seguro de que al reiniciarse nuestro PIC sabremos fehacientemente que la última recepción fue bien o por el contrario se convirtió en un completo, total y rotundo fracaso y, por lo menos, nos tomaremos con precaución el asunto de la RS232.

Nuestro programa podrá seguir su curso evitando los terrenos pantanosos y habilitando los medios para solventar los problemas que nos hemos encontrado.

Un saludo. Mañana más.  :mrgreen:
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: RICHI777 en 28 de Febrero de 2009, 14:16:14
Hola Maestro, perdon pero me parece que el ejemplo que pusiste del Watch Dog no es la mejor manera de hacer eso, todas las rutinas series deberan manejar la no llegada de caracteres via time-out y no restearse por Wacth-Dog.

Saludos !
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Cryn en 28 de Febrero de 2009, 15:11:54
me parece que ya leí esto por algún lado :mrgreen:

que rutinas son las típicas para colocar el WDT?
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: todopic en 28 de Febrero de 2009, 15:48:47
Hola Diego, interesante aporte!
En lenguage ensamblador, seria  CLRWDT  la instrucción que borra al WDT, y ya que estamos, creo que es valido indicar que es un oscilador RC que está independiente del oscilador del micro....

Un abrazo!

Norberto
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: RICHI777 en 28 de Febrero de 2009, 16:45:23
Hola, segun mi entender ninguna rutina deberia manejar watch-dog, las llamadas al reset del mismo solo deberian colocarse en lugares estrategicos del código y que se ejecuten en forma periodica para garantizar el refresco del mismo, pero esto solo es para garantizar la estabilidad del sistema.

Saludos !
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Cryn en 28 de Febrero de 2009, 17:12:36
yo siempre encuentro solo un lugar estratégico :mrgreen:, pero me queda la duda de que si debe estar por lo menos 2 o 3 veces para que funcione mejor
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: RedPic en 28 de Febrero de 2009, 17:53:53
No. El ejemplo que he puesto es como dije un "ejemplo tonto" para ver cómo nuestro programa puede quedarse dentro de un bucle sin salida y cómo el Watchdog puede sacarlo de ahí.

Es muy importante depurar al límite el programa antes de activar el Wachtdog. Éste puede enmascarar errores de diseño de nuestro programa que deberían contemplarse por si mismos y no recurrir al Watchdog para sacarnos de ellos.

En mis programas solo activo el Watchdog solo cuando estoy razonablemente seguro de que no tengo trozos de programa como pozos donde si entro no salgo.

Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Nocturno en 01 de Marzo de 2009, 03:32:52
A mí no me parece equivocado usar un reset a propósito si la aplicación así lo requiere. Una vez vi un dimmer que se reseteaba 50 veces por segundo para gestionar el encendido del triac y luego se ponía en SLEEP. Y era un ejemplo de la propia Microchip.

En tu ejemplo "tonto", que no lo es tanto Don Diego, podríamos incluso usar una variable RAM en vez de la eeprom como marcador de tarea incompleta puesto que al resetear no se inicializan.
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: RICHI777 en 01 de Marzo de 2009, 19:44:37
Bueno, esta bien, no es lo que haria yo pero tambien reconozco que es una buena solución.

Saludos !
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Palomino86 en 21 de Junio de 2012, 12:27:15
Que tal?

Veo que están hablando del watchdog timer, actualmente estoy tratando de implementarlo en mi código. Estoy usando C18 compiler y lo activo de la siguiente manera:

Código: [Seleccionar]
#pragma config OSC=HS,FCMEN=OFF,IESO=OFF,PWRT=ON
#pragma config BOREN=ON,BORV=3,WDT=ON,WDTPS=32768,MCLRE=ON,LPT1OSC=OFF,PBADEN=OFF
#pragma config CCP2MX=PORTC,STVREN=ON,LVP=OFF,XINST=OFF,DEBUG=OFF,CP0=OFF,CP1=OFF
#pragma config CPB=OFF,CPD=OFF,WRT0=OFF,WRT1=OFF
#pragma config WRTB=OFF,WRTC=OFF,WRTD=OFF,EBTR0=OFF,EBTR1=OFF,EBTRB=OFF

y reseteo el contador con la instrucción:

Código: [Seleccionar]
ClrWdt();
Mi única duda es cual es la formula para realizar el calculo del contador del WDT.... Ojala puedan ayudarme con esto....  :?

Saludos
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Nocturno en 21 de Junio de 2012, 14:24:08
¿Qué micro y cristal tienes puesto?
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Palomino86 en 21 de Junio de 2012, 14:42:05
PIC18F2420

20 MHz

 :)
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Nocturno en 21 de Junio de 2012, 16:57:53
El periodo nominal del watchdog es de 4ms, y puedes prolongarlo hasta 131.072 segundos usando el postscaler.

No conozco C18, pero supongo que el postscaler lo fijas poniendo una cifra en el fuse WDTPS que has puesto en tu ejemplo.
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Palomino86 en 22 de Junio de 2012, 21:40:15
Muchas gracias nocturno, es correcto lo que me dices  :) , ya hice la prueba y funciono correctamente

Saludos
Título: Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: RICHI777 en 22 de Junio de 2012, 21:43:58
Nocturno es Yoda en este foro !!!!

Saludos !
Título: Re:¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: C0LM4N en 27 de Noviembre de 2018, 16:40:20
Buenas!!! Consulto si alguien a usado el WDT cono contador de instrucciones, sino hago el calculo para contarlas por tiempo. Lo que quiero hacer es contar un total de 130 instrucciones antes de continuar el programa, para poder programar tranquilo sin necesidad de estar al pendiente de la armonia necesaria para que el display muestre el contenido. El mismo necesita una serie de codigos continuos para mostrar el contenidom y planeo trabajar dentro de esas 130 instrucciones y completarlas usando el WDT. Alguien que me de alguna idea de como lograrlo?? Utilizo el pic 18F45k22 con 8MHz o 16 en su defecto...

AAAYYYUUUUUUUUDDDAAAAAA!!!!!!
Título: Re:¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: KILLERJC en 27 de Noviembre de 2018, 16:59:25
el WDT es como un Timer, nomas que el unico resultado es el reinicio del micro (Al menos en los PICs).... Lo que estas buscando vos es un Timer, un Timer cuenta ciclos de reloj, al igual que el WDT, no instrucciones.

Las instrucciones pueden demorar 1 o 2 ciclos, dependiendo cual sea. De allí podes contar para saber cuando es que paso el tiempo.

Pero pienso que te estas complicando demasiado la vida con el tema de las "130 instrucciones" pensa que 130 instrucciones a 16Mhz es MUY poco tiempo, son 32.5us, actualizar un display a cada rato en ese intervalo de tiempo es algo un poco absurdo.
Título: Re:¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: C0LM4N en 28 de Noviembre de 2018, 08:37:11
"el WDT es como un Timer, nomas que el unico resultado es el reinicio del micro (Al menos en los PICs).... Lo que estas buscando vos es un Timer, un Timer cuenta ciclos de reloj, al igual que el WDT, no instrucciones." Exactamente lo que necesito es un timer jaja

"Las instrucciones pueden demorar 1 o 2 ciclos, dependiendo cual sea. De allí podes contar para saber cuando es que paso el tiempo." Me vendria al pelo asi

"Pero pienso que te estas complicando demasiado la vida con el tema de las "130 instrucciones" pensa que 130 instrucciones a 16Mhz es MUY poco tiempo, son 32.5us, actualizar un display a cada rato en ese intervalo de tiempo es algo un poco absurdo." Es verdad que me estoy complicando bastante, pero la placa trabaja un con display de 7 segmentos, en el cual mando 20 paquetes prefabricados con lapsos de 65 us entre cada paquete. Un codigo completo del dis´lay son 30 ms aprox. En cambio si tardo mas que eso, se me despelota el otro display, uno de liquido, por la armonia D:
Título: Re:¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
Publicado por: Robert76 en 28 de Noviembre de 2018, 10:41:41
Hola, mejor comenta detalladamente lo que deseas hacer.