Autor Tema: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)  (Leído 4475 veces)

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

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37


                            Buen dia a todos, es primera vez que comento por aqui para la solucion simple de un problema, pues trato de comunicar dos pics entre si, resulta que el codigo del pic que transmite (PicTX) envia solo caracteres y el pic que recibe (PicRX) capta el caracter y lo compara, por ejemplo:
Código: C++
  1. Codigo del Pic que Envia (PicTX)
  2. while(TRUE)
  3. {
  4. putc('s');
  5. delay_ms(500);
  6. putc('n');
  7. delay_ms(500);
  8. }
  9.  
  10. //Codigo del pic que recibe (PicRX)
  11.  
  12.     while(TRUE)  
  13.      {
  14.       //RX
  15.       chr=getc();
  16.      
  17.       if(chr=='s')
  18.       {
  19.        output_high(LED0);   //Enciendo un LED si recibo caracter 's'
  20.       }else if (chr=='n')
  21.       {
  22.        output_low(LED0);        //Apaga el mismo led si se recibe caracter 'n'
  23.       }
Esto lo hace correctamente en el PROTEUS al momento de simular para aceptar por caracteres y enciende y apaga el mismo led cada 500 ms, lo mismo quiero hacer pero con palabras como "on" y "off"



Porque ya lo trabaje con cadenas enviando puts("on") o puts("off") desde el PicTX y el codigo del pic que recibe (PicRX)  tiene el es siguiente codigo pero algo esta mal

Código: C++
  1. <string.h>
  2.     char enciende[4]="\0";
  3.     char apaga[4]="\0";
  4.     char buffer[5]="\0";
  5.  
  6.     strcpy(enciende,"on");
  7.     strcpy(apaga,"off");
  8.  
  9. while(TRUE)
  10.      {  
  11.      
  12.       if(kbhit())
  13.       {
  14.        fgets(buffer);    
  15.        
  16.         if(strcmp(buffer,enciende)==0)
  17.          {output_high(LED0);}
  18.        
  19.         //else{output_low(LED0); }
  20.         if(strcmp(buffer,apaga)==0)
  21.          {output_low(LED0);}
  22.       }

Agradeceria su apoyo

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #1 en: 27 de Enero de 2011, 16:26:14 »
  Fijate en la ayuda de CCS (para que estés más seguro ya que yo no uso dicho compilador) pero me parece que para poder leer con fgets, lo enviado tiene que terminar con el caracter de CarrierReturn que sería \r. Osea, en el PIC que envía tendrías que poner puts ("on\r");
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #2 en: 27 de Enero de 2011, 19:49:50 »
Qué tal todos!

  Fijate en la ayuda de CCS (para que estés más seguro ya que yo no uso dicho compilador) pero me parece que para poder leer con fgets, lo enviado tiene que terminar con el caracter de CarrierReturn que sería \r. Osea, en el PIC que envía tendrías que poner puts ("on\r");

El amigo AngelGris está en lo correcto, la ayuda sobre esta función dice:
"Reads characters (using getc()) into the string until a RETURN (value 13) is encountered."

Así que Marito_26, corrige eso en el código del PIC Maestro... después que envies la variable "buffer", envía también "\r".
Ojalá sea ese el problema y puedas corregirlo... si no avisa y pues seguro se te ayudará...

Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #3 en: 28 de Enero de 2011, 15:25:25 »
  Fijate en la ayuda de CCS (para que estés más seguro ya que yo no uso dicho compilador) pero me parece que para poder leer con fgets, lo enviado tiene que terminar con el caracter de CarrierReturn que sería \r. Osea, en el PIC que envía tendrías que poner puts ("on\r");


En verdad que hay gente amable en este foro y agradezco que me respondan para la solución de este pequeño problema, penosamente les pregunto de nuevo cual será el problema pero para que no escriba mas código, mejor envio los archivos.
Envio los códigos tanto del MASTER y el SLAVE, y aparte los archivos de simulación de PC a PIC y otro archivo de simulación de PIC a PIC.
Envio los dos porque resulta que en la simulación de PC a PIC, el código del SLAVE funciona bien, ya que meto los datos “on” y “off” por la VIRTUAL TERMINAL

Pero cuando utilizo el mismo código SLAVE en el otro archivo de simulación donde cambio la VIRTUAL TERMINAL por otro PIC, para que la comunicación sea de PIC a PIC, el pic MASTER le cargo su código MASTER que esta anexo aquí y en ese momento es cuando no me funciona el mismo archivo SLAVE, me pregunto que estare haciendo mal, pues me imagino que debe ser algo del PIC Maestro.

Saludos a AngelGris y firepic

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #4 en: 29 de Enero de 2011, 12:41:19 »
  Como mencioné, no uso CCS. ¿Qué ocurre si comunicás tu PIC maestro con el terminal de proteus? ¿Toma el salto de línea o no?
Si no es así tal vez deberías dejar el código de la siguiente manera

Código: C
  1. puts ("on");
  2. putc (13); // o probar putc ('\r')

  El 13 es el decimal que se corresponde con el CarrierReturn, como bien comentó FirePic
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #5 en: 30 de Enero de 2011, 00:39:44 »
Buen dia, como ya habia mencionado, funciona perfectamente con la terminal de proteus (VIRTUAL TERMINAL), pero al momento de cambiar la virtual terminal con un pic, no funciona, ya verifique cual es el problema y resulta que tengo que desmenuzar la trama caracter por caracter ya sea para visualizar en lcd o para realizar un condional del siguiente tipo

if((buffer[0]=='o') && (buffer[1]=='n'))
{
  //encender led
}

De esta manera funciona, pero estoy trabajando con un EZ WEB LYNX que envia datos al pic, y ahora resulta que no los lee bien la trama, solo caracter por caracter de la siguiente manera

str1=getc();
str2=getc();

y luego comparo cada uno de ellos


Gracias a ustedes comprendi la importancia del CR (13 o 0x0D)


Saludos y les agradezco muhco por responder

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #6 en: 30 de Enero de 2011, 14:01:02 »
Buen dia, como ya habia mencionado, funciona perfectamente con la terminal de proteus (VIRTUAL TERMINAL), pero al momento de cambiar la virtual terminal con un pic, no funciona, ya verifique cual es el problema y resulta que tengo que desmenuzar la trama caracter por caracter ya sea para visualizar en lcd o para realizar un condional del siguiente tipo


  En un post anterior habías comentado que el código del SLAVE funcionaba bien con el terminal virtual, pero no aclarabas si también habías probado el código del MASTER por ello reitero la pregunta. ¿Probaste el código del MASTER con el terminal de proteus?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Marito_26

  • PIC10
  • *
  • Mensajes: 37
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #7 en: 31 de Enero de 2011, 15:05:01 »
Buen dia, como ya habia mencionado, funciona perfectamente con la terminal de proteus (VIRTUAL TERMINAL), pero al momento de cambiar la virtual terminal con un pic, no funciona, ya verifique cual es el problema y resulta que tengo que desmenuzar la trama caracter por caracter ya sea para visualizar en lcd o para realizar un condional del siguiente tipo


  En un post anterior habías comentado que el código del SLAVE funcionaba bien con el terminal virtual, pero no aclarabas si también habías probado el código del MASTER por ello reitero la pregunta. ¿Probaste el código del MASTER con el terminal de proteus?

Asi es AngelGris, el mismo MASTER le doy una salida al pic del SLAVE y tambien a un VIRTUAL TERMINAL para ver que envia y es correcto lo que el VIRTUAL TERMINAL visualiza, pero ya lo solucione, solo era cosa de tratar todo el string, byte a byte, te agradezco la solucion mi estimado, me estaba volviendo loco, ejeje

Saludos desde Mexico

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema al comunicar dos pic (se puede con caracteres, pero no con palabras)
« Respuesta #8 en: 31 de Enero de 2011, 17:02:34 »

Asi es AngelGris, el mismo MASTER le doy una salida al pic del SLAVE y tambien a un VIRTUAL TERMINAL para ver que envia y es correcto lo que el VIRTUAL TERMINAL visualiza, pero ya lo solucione, solo era cosa de tratar todo el string, byte a byte, te agradezco la solucion mi estimado, me estaba volviendo loco, ejeje

Saludos desde Mexico

  Ah, bueno. Entonces sabemos que el Master transmite bien.
  Si bien el tratarlo byte a byte funciona, también debería funcionar al hacer uso de la función strcmp.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas