TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: sauron en 29 de Julio de 2009, 22:01:05

Título: ¿Como emulo o creo algo que funcione como un watchdog?
Publicado por: sauron 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.
Título: Re: ¿Como emulo o creo algo que funcione como un watchdog?
Publicado por: Suky en 30 de Julio de 2009, 09:35:44
Revisa el siguiente hilo (http://www.todopic.com.ar/foros/index.php?topic=26976.msg221417#msg221417), creo que te va a ayudar en el problema que presentas!

Saludos!
Título: Re: ¿Como emulo o creo algo que funcione como un watchdog?
Publicado por: sauron en 11 de Agosto de 2009, 20:29:32
Revisa el siguiente hilo (http://www.todopic.com.ar/foros/index.php?topic=26976.msg221417#msg221417), 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:
Título: Re: ¿Como emulo o creo algo que funcione como un watchdog?
Publicado por: alexysar 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.
Título: Re: ¿Como emulo o creo algo que funcione como un watchdog?
Publicado por: sauron 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
Título: Re: ¿Como emulo o creo algo que funcione como un watchdog?
Publicado por: XAVICOROSS 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...
Título: Re: ¿Como emulo o creo algo que funcione como un watchdog?
Publicado por: alexysar en 12 de Agosto de 2009, 18:06:18
Buena info.