Autor Tema: 2 conexiones RS232 o mas?  (Leído 3927 veces)

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

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
2 conexiones RS232 o mas?
« en: 12 de Septiembre de 2006, 10:10:02 »
Hola!!

Alguna vez he programado en Asembler, pero realmente prefiero hacerlo en C. Y ademas me parece que el mejor compilador es es PICC compiler CCS. mi pregunta es, como en ese compilador puedo configurar usar 2 puertos o conexiones RS232 seriales semi simultaneamente?. Es decir, el sistema espere un caracter por alguno de los dos puertos y cuando llegue por alguno de los 2 identifique el caracter y por cual puerto llegó. Por ejemplo tengo  dos dispositivos iguales cuya salida es serial. alguno de los dos, en algun momento intentan comunicarse con el PIC (Claro a travez de un max232, quien, afortunadamente, trae espacio para dos canales independientes), y el pic debe decir: aja! el dispositivo 1 se acaba de comunicar! y envia el caracter 'F', y asi...

Saludos a todos y Gracias

La tecnologia y la conservacion del ambiente no son para nada incompatibles
Daniel 
Caracas, Venezuela 

-----------------

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: 2 conexiones RS232 o mas?
« Respuesta #1 en: 12 de Septiembre de 2006, 11:21:53 »
UPS!! lo siento amigos... yo mismo hallé la respuesta en la ayuda de dicho programa...

y la voy a compartir con ustedes...

a continuacion la transcribo:

Citar
How can I use two or more RS-232 ports on one PIC®?
The #USE RS232 (and I2C for that matter) is in effect for GETC, PUTC, PRINTF and KBHIT functions encountered until another #USE RS232 is found.The #USE RS232 is not an executable line.  It works much like a #DEFINE.
The following is an example program to read from one RS-232 port (A) and echo the data to both the first RS-232 port (A) and a second RS-232 port (B).



#USE  RS232(BAUD=9600, XMIT=PIN_B0, RCV=PIN_B1)

void  put_to_a( char c ) {

   put(c);

}

char  get_from_a( ) {

    return(getc()); }

#USE RS232(BAUD=9600, XMIT=PIN_B2,RCV=PIN_B3)

void put_to_b( char b ) {

   putc(c);

}

main() {

   char c; 

   put_to_a("Online\n\r");

   put_to_b("Online\n\r");

   while(TRUE) {

     c=get_from_a();

     put_to_b(c);

     put_to_a(c);

   }

}

 

The following will do the same thing but is more readable and is the recommended method:

 

#USE RS232(BAUD=9600, XMIT=PIN_B0, RCV=PIN_B1, STREAM=COM_A)

#USE RS232(BAUD=9600, XMIT=PIN_B2, RCV=PIN_B3, STREAM=COM_B)

   

   main() {

      char c;

      fprintf(COM_A,"Online\n\r");

      fprintf(COM_B,"Online\n\r");

      while(TRUE) {

        c = fgetc(COM_A);

        fputc(c, COM_A);

        fputc(c, COM_B);

      }

    }

 

Espero, si alguien se encuentra en la misma duda, esto le sirva
Daniel 
Caracas, Venezuela 

-----------------

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: 2 conexiones RS232 o mas?
« Respuesta #2 en: 12 de Septiembre de 2006, 11:25:50 »
Hola!!

Alguna vez he programado en Asembler, pero realmente prefiero hacerlo en C. Y ademas me parece que el mejor compilador es es PICC compiler CCS. mi pregunta es, como en ese compilador puedo configurar usar 2 puertos o conexiones RS232 seriales semi simultaneamente?. Es decir, el sistema espere un caracter por alguno de los dos puertos y cuando llegue por alguno de los 2 identifique el caracter y por cual puerto llegó. Por ejemplo tengo  dos dispositivos iguales cuya salida es serial. alguno de los dos, en algun momento intentan comunicarse con el PIC (Claro a travez de un max232, quien, afortunadamente, trae espacio para dos canales independientes), y el pic debe decir: aja! el dispositivo 1 se acaba de comunicar! y envia el caracter 'F', y asi...

Saludos a todos y Gracias

Daniel, si usas una por software y otra por hardware, es perfectamente factible y hay varios ejemplos en este foro del uso de esa combinación.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado parsud

  • PIC10
  • *
  • Mensajes: 16
Re: 2 conexiones RS232 o mas?
« Respuesta #3 en: 12 de Septiembre de 2006, 20:29:05 »
HOLA A TODOS, DESPUES DE HACER MI CONSULTA RECIEN VI ESTA INFORMACION, SOLO HAY UN DETALLE, NO MANEJO EL C, SI ALGUIEN HA PASADO ESTA INFORMACION AL PROTON ME SERIA DE MUCHA UTILIDAD, SORRY POR LAS MOLESTIAS, NECESITO MANEJAR 2 ENTRADAS SERIALES QLLEGEUN AL PIC, COMO SABER Q DATO CORRESPONDE A EMISOR DE LA SEÑAL?
GRACIAS
SALUDOS

Deimos

  • Visitante
Re: 2 conexiones RS232 o mas?
« Respuesta #4 en: 14 de Septiembre de 2006, 10:23:07 »
No se que problema hay. Si usas un pic con dos puertos 232, cada uno de ellos lleva flags de interrupciones asociadas. Es decir, en cuanto se llene el buffer de recepcion de uno de ellos, el flag correspondiente se activará provocando una interrupción. Simplemente miras que interrupcion se ha activado y a que puerto usart corresponde. No tiene mayor dificultad.

Seria interesante que especificases que tipo de maquina estas usando, si es 16F, 18F o dsPIC.

Salu2

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: 2 conexiones RS232 o mas?
« Respuesta #5 en: 14 de Septiembre de 2006, 10:33:22 »
HOLA A TODOS, DESPUES DE HACER MI CONSULTA RECIEN VI ESTA INFORMACION, SOLO HAY UN DETALLE, NO MANEJO EL C, SI ALGUIEN HA PASADO ESTA INFORMACION AL PROTON ME SERIA DE MUCHA UTILIDAD, SORRY POR LAS MOLESTIAS, NECESITO MANEJAR 2 ENTRADAS SERIALES QLLEGEUN AL PIC, COMO SABER Q DATO CORRESPONDE A EMISOR DE LA SEÑAL?
GRACIAS
SALUDOS

No he usado jamás el protón , ni se de que se trata siquiera.  Perdón por mi ignorancia en la materia pero creo que el que mucho abarca poco aprieta y estoy más enfocado al C y al assembler.

Más allá del lenguaje o herramienta que uses, el pic sigue siendo siempre un pic y no hay nada que pueda hacer magia.

Como bien te ha dicho Deimos, si tu pic tiene 2 usarts por hardware, entonces la cosa es fácil.

Si tu compilador hace 2 usarts por software, bueno, también debiera usar registros diferentes para almacenar los datos recibidos por una y por otra.

Una cuestión importante a aclarar es que una usart por software --> tiene limitaciones.  En definitiva es un programa que muestrea un pin a una velocidad determinada, ya sea por uso de un timer (con lo cual hay que tener en cuenta que no lo podemos disponer) o bien por uso de polling o muestreo continuo del pin (con lo cual hay que pensar en que el pic está haciendo solamente eso en ese momento y bueno, atendiendo las interrupciones si las hubiere).

En ambos casos, se pierden recursos y se debe tener cuidado en qué condiciones se usará una usart por software.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything