Autor Tema: rs232 entre pics  (Leído 1587 veces)

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

Desconectado championx

  • PIC10
  • *
  • Mensajes: 22
rs232 entre pics
« en: 23 de Agosto de 2005, 18:40:00 »
como va! les hago una pregunta, tengo 2 pics conectados entre si pero no se como hacer para enviar cadenas de caracteres entre los dos, puedo enviar solo un caracter a la vez con putc() pero cuando trato de enviar con printf o con puts() el otro pic no recibe los datos... alguien tiene un programa de como hacer esto??

muchas gracas!

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: rs232 entre pics
« Respuesta #1 en: 24 de Agosto de 2005, 03:48:00 »
Para comunicar PICs no es mejor hacerlo por I2C? y dejar el rs232 con el PC? Es una idea ... Flash
Si juegas contra el mejor, pierdes como los demás.

Desconectado sags_v

  • PIC10
  • *
  • Mensajes: 4
RE: rs232 entre pics
« Respuesta #2 en: 07 de Octubre de 2005, 22:29:00 »
strcpy(transmite,""Giño; lectura_exitosa=0;
   while (lectura_exitosa==0)
   {delay_ms(12); sht1x_xmission_start(); sht1x_command_mode(MEASURE_TEMP);
    lValue_temp = sht1x_read_DATA_SHT();  fTemp_true = (D1+(D2*lValue_temp));
    delay_ms(12); sht1x_xmission_start(); sht1x_command_mode(MEASURE_HUMI);
    lValue_rh = sht1x_read_DATA_SHT();
   if((lValue_temp==65535)||(lValue_rh==65535)) {}
   else
   {fRh_lin = (C1+(C2*lValue_rh)+(C3*lValue_rh*lValue_rh));
    fRh_true = (((fTemp_true-25)*(T1+(T2_*lValue_rh)))+fRh_lin);
    fDew_point = sht1x_calc_dewpoint(fRh_true,fTemp_true);
//    printf ("Temp=%5.2f RH=%5.2f DP=%5.2f     ",(fTemp_true),fRh_true,fDew_point);
    sprintf(temp_cadena,"%02.2f",fTemp_true); sprintf(humi_cadena,"%02.2f",fRh_true);
    sprintf(dewp_cadena,"%02.2f",fDew_point);
    strcat(transmite,sensor);strcat(transmite,espacio);
    strcat(transmite,temp_cadena);strcat(transmite,espacio);strcat(transmite,humi_cadena);
    strcat(transmite,espacio);strcat(transmite,dewp_cadena);
//    printf("Lectura Sensor 1: %s ",transmite);  salto();
    LCD_SetPosition ( LINE_1 );
    printf(LCD_PutChar,"%s",transmite);
    printf("%s",transmite);
    printf("
"Giño;
    lectura_exitosa=1; // delay_ms(1200);
   } delay_ms(1200);
   }

es el codigo desde el pic que transmites!!!


y a continuacion desde el que recibes:


void main(void)
{  char cadena[30];
   char S1[21];
   char S2[21];
   float temp1f,temp2f,hr1f,hr2f,dp1f,dp2f,temppf,hrpf,dppf;
   setup_adc_ports(NO_ANALOGS);set_tris_b(0b00000000);lcd_init();
   temp1f=temp2f=hr1f=hr2f=dp1f=dp2f=temppf=hrpf=dppf=0;
while(TRUE)
{  gets(cadena);
   if((cadena[0]=="S")&&(cadena[1]=="1"))
   {strcpy(S1,""Giño;strcat(S1,cadena);temp1f=cadena_numero(3,8,S1);
    hr1f=cadena_numero(9,14,S1);dp1f=cadena_numero(15,20,S1);
    LCD_PutCmd ( CLEAR_DISP );
   }
   if((cadena[0]=="S")&&(cadena[1]=="2"))
    {strcpy(S2,""Giño;strcat(S2,cadena);temp2f=cadena_numero(3,8,S2);
     hr2f=cadena_numero(9,14,S2);dp2f=cadena_numero(15,20,S2);
     LCD_PutCmd ( CLEAR_DISP );
    }
  temppf=(temp1f+temp2f)/2; hrpf=(hr1f+hr2f)/2;  dppf=(dp1f+dp2f)/2;
  LCD_SetPosition ( LINE_1 );    printf ( LCD_PutChar, "TP1=%2.2f",temp1f);  printf("Temp1: %f
",temp1f);
  LCD_SetPosition ( LINE_2 );    printf ( LCD_PutChar, "HR1=%2.2f",hr1f);    printf("HR1: %f
",hr1f);
  LCD_SetPosition ( LINE_3 );    printf ( LCD_PutChar, "TP=%2.2f",temppf);   printf("DP1: %f
",dp1f);
  LCD_SetPosition ( LINE_1+10 ); printf ( LCD_PutChar, "TP2=%2.2f",temp2f);  printf("Temp2: %f
",temp2f);
  LCD_SetPosition ( LINE_2+10 ); printf ( LCD_PutChar, "HR2=%2.2f",hr2f);    printf("HR2: %f
",hr2f);
  LCD_SetPosition ( LINE_3+10 ); printf ( LCD_PutChar, "HRP=%2.2f",hrpf);    printf("DP2: %f
",dp2f);
} // while
}


Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
RE: rs232 entre pics
« Respuesta #3 en: 08 de Octubre de 2005, 10:43:00 »
Hola compañero, lo mejor que puedes hacer es gestionar tu la recepcion y transmision de datos por RS232, enviando tu caracter a caracter. Yo he tenido una experiencia similar y lo mejor, es que detectes tu los caracteres de llegada (mediante interrucion) y gestiones la comunicacion basandote en algun protocolo que te hagas o uno echo. Sobre todo si lo haces en CCS Un saludo.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P


 

anything