Autor Tema: Comunicación bidireccional PIC - PC por RS-232 (temporización)  (Leído 3962 veces)

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

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Hola,

Tengo un pequeño problemilla con la temporización en una comunicación PIC - PC por RS-232. Cuando en el PC envío un comando al PIC (1 único byte) el PIC responde perfectamente pero cuando quiero confirmar si el PIC está listo para recibir un comando y luego enviarlo no me funiona el invento. Sería algo así:

PIC     PC
------------
          ¿Estás listo? (1 byte)
ACK
          Te envío el comando (1 byte)
ACK

Vosotros dejáis un tiempo entre el getc y el putc(ACK) y el nuevo getc y el putc(ACK)? Cuánto?

En el programa del PC (Visual basic) también lo ponéis?

Gracias!!

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Comunicación bidireccional PIC - PC por RS-232 (temporización)
« Respuesta #1 en: 28 de Enero de 2010, 15:25:12 »
SOLUCIÓN:

Usar un timer como timeout:

Código: [Seleccionar]
set_timer0(0);
f_com_tout = 0;

while(!f_com_tout)   //TIMEOUT
{
   restart_wdt();
     
   if(kbhit())
   {
      alr_test = getc();

      putc(ACK);
      return;
   }
}
putc(NAK);

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: Comunicación bidireccional PIC - PC por RS-232 (temporización)
« Respuesta #2 en: 30 de Enero de 2010, 15:48:03 »
SOLUCIÓN:

Usar un timer como timeout:

Código: [Seleccionar]
set_timer0(0);
f_com_tout = 0;

while(!f_com_tout)   //TIMEOUT
{
   restart_wdt();
     
   if(kbhit())
   {
      alr_test = getc();

      putc(ACK);
      return;
   }
}
putc(NAK);

No entendí nada! para que configuras el timer0 si no lo utilizas?
Código: [Seleccionar]
f_com_tout = 0;

while(!f_com_tout)   //TIMEOUT

condición siempre verdadera coloca un

Código: [Seleccionar]
while(true)
me imagino que estas utilizando el wdt en caso que el PIC se pierda o quede esperando un bit perdido.


Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Comunicación bidireccional PIC - PC por RS-232 (temporización)
« Respuesta #3 en: 31 de Enero de 2010, 12:05:09 »
¿Cómo? Claro que utilizo el timer0. Dentro de la ISR del timer0 es donde se coloca f_com_tout a 1 al pasar el tiempo programado como timeout.

Si pones un while(TRUE) y no te mandan ningún caracter te quedas dentro del bucle para siempre.

El restart_wdt() es porque el periodo del watchdog es menor que el timeout de recepción.

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Comunicación bidireccional PIC - PC por RS-232 (temporización)
« Respuesta #4 en: 31 de Enero de 2010, 15:01:13 »
Una consulta Dark en la función putc() el micro se queda esperando en esa linea hasta que se termine de transmitir el byte?
o solo deja el dato en el buffer de transmisión y sale de inmediato.

saludos.
control de movimiento

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Comunicación bidireccional PIC - PC por RS-232 (temporización)
« Respuesta #5 en: 31 de Enero de 2010, 20:01:01 »
Una consulta Dark en la función putc() el micro se queda esperando en esa linea hasta que se termine de transmitir el byte?
o solo deja el dato en el buffer de transmisión y sale de inmediato.

saludos.

La funcion putc() escribe un byte por el PIN indicado. Es decir, hasta que no está transmitido no termina esa función.

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: Comunicación bidireccional PIC - PC por RS-232 (temporización)
« Respuesta #6 en: 01 de Febrero de 2010, 13:09:47 »
¿Cómo? Claro que utilizo el timer0. Dentro de la ISR del timer0 es donde se coloca f_com_tout a 1 al pasar el tiempo programado como timeout.

Si pones un while(TRUE) y no te mandan ningún caracter te quedas dentro del bucle para siempre.

El restart_wdt() es porque el periodo del watchdog es menor que el timeout de recepción.

JAJAJA ok entonces coloca el código completo, porque no se entiende nada..

Desconectado INGJHOM

  • PIC10
  • *
  • Mensajes: 5
Re: Comunicación bidireccional PIC - PC por RS-232 (temporización)
« Respuesta #7 en: 24 de Febrero de 2010, 19:13:18 »
Una pregunta. Para que vas a utilizar un retardo si para eso son los ACK, con los ACK aseguras que los dispositivos no se envien datos hasta cuando reciban los ACK. Si quieres puedes esculcar dentro del archivo y sacar las lineas que te interesen. Exitos


 

anything