Autor Tema: ¿Como emulo o creo algo que funcione como un watchdog?  (Leído 1793 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
¿Como emulo o creo algo que funcione como un watchdog?
« en: 29 de Julio de 2009, 22:01:05 »
Hola compañeros. :P

Les expongo el caso para que se imaginen lo que pregunto:
El PIC (16F628A) a través de RS232 manda un string a un dispositivo y éste en consecuencia, manda un string de respuesta al PIC. La cuestión es ¿qué sucede con el PIC si el dispositivo no envía algun dato?, por ejemplo si se queda "colgado" o no está energizado.

Este es el código...
Código: C
  1. void inicio()
  2. {
  3.  printf("string al dispositivo");
  4.  dispositivo=getch();
  5.  .
  6.  .

Si no hay respuesta del dispositivo, entonces el PIC queda en un infinito por el getch(), la idea es que si no hay respuesta y pasan X segundos salga del getch() o se ejecute otra función.

Espero haber expresado bien la interrogante y gracias por sus opiniones.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ¿Como emulo o creo algo que funcione como un watchdog?
« Respuesta #1 en: 30 de Julio de 2009, 09:35:44 »
Revisa el siguiente hilo, creo que te va a ayudar en el problema que presentas!

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: ¿Como emulo o creo algo que funcione como un watchdog?
« Respuesta #2 en: 11 de Agosto de 2009, 20:29:32 »
Revisa el siguiente hilo, creo que te va a ayudar en el problema que presentas!

Vale, justo como anillo al dedo esa información, fíjate que antes de leer esa info, había hecho este codigo...

Código: C
  1. inicios: printf("CODIGO AL DISPOSITIVO"); //Esto pide al dispositivo que de una respuesta inmediata
  2.  sigue: if(kbhit())
  3.   {
  4.    numreset=getch();
  5.   }
  6.    else
  7.     {
  8.      ++cont;
  9.      if(cont==400000)
  10.      {
  11.       cont=0;
  12.       ++ver;
  13.       if(ver==5)
  14.        {
  15.         ver=0;
  16.         dispositivo_nofunciona();
  17.        }
  18.       else
  19.       {
  20.        reset_dispositivo();
  21.        goto inicios;
  22.       }
  23.      }
  24.      else
  25.       goto sigue;

No es nada elegante y es inexacto, pero se puede decir que funcionó. Mi gran duda era el numero del registro CONT, ya que le puse 400000 que es como 8 segundos (visto en simulación), supongo que ese valor es el retardo de cada ciclo de reloj por las instrucciones.

De todas maneras voy a usar el código del compañero RedPic que es mucho mejor :)

Gracias compañero Suky :mrgreen:

Desconectado alexysar

  • PIC16
  • ***
  • Mensajes: 206
    • e-Kit
Re: ¿Como emulo o creo algo que funcione como un watchdog?
« Respuesta #3 en: 12 de Agosto de 2009, 00:57:25 »
que raro que te haya funcionado. 400000 es un entero de 3 bytes. Cómo lo declaraste?
Si lo declaraste como int no deberia funcionar
si lo declaraste como long int si funciona.

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: ¿Como emulo o creo algo que funcione como un watchdog?
« Respuesta #4 en: 12 de Agosto de 2009, 03:36:22 »
que raro que te haya funcionado. 400000 es un entero de 3 bytes. Cómo lo declaraste?
Si lo declaraste como int no deberia funcionar
si lo declaraste como long int si funciona.

Claro, lo declaré como unsigned int16

Desconectado XAVICOROSS

  • PIC12
  • **
  • Mensajes: 93
Re: ¿Como emulo o creo algo que funcione como un watchdog?
« Respuesta #5 en: 12 de Agosto de 2009, 04:35:30 »
estuvo muy buena la informacion, en mi caso habria esperado la recepcion dentro de un for y cuando este haya terminado, el programa seguia su curso...

Desconectado alexysar

  • PIC16
  • ***
  • Mensajes: 206
    • e-Kit
Re: ¿Como emulo o creo algo que funcione como un watchdog?
« Respuesta #6 en: 12 de Agosto de 2009, 18:06:18 »
Buena info.
« Última modificación: 12 de Agosto de 2009, 18:29:58 por alexysar »