Autor Tema: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.  (Leído 33400 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5362
    • Picmania by Redraven
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:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1497
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #1 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 !

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #2 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?
.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3490
    • http://www.todopicelectronica.com.ar
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #3 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
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1497
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #4 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 !

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #5 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
.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5362
    • Picmania by Redraven
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #6 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.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17452
    • MicroPIC
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #7 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.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1497
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #8 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 !

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #9 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
Lo que no me destruye, me fortalece

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17452
    • MicroPIC
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #10 en: 21 de Junio de 2012, 14:24:08 »
¿Qué micro y cristal tienes puesto?
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #11 en: 21 de Junio de 2012, 14:42:05 »
PIC18F2420

20 MHz

 :)
Lo que no me destruye, me fortalece

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17452
    • MicroPIC
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #12 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.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #13 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
Lo que no me destruye, me fortalece

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1497
Re: ¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC.
« Respuesta #14 en: 22 de Junio de 2012, 21:43:58 »
Nocturno es Yoda en este foro !!!!

Saludos !


 

anything