Autor Tema: Varias comunicaciones simultaneas por RS232  (Leído 4044 veces)

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

Desconectado jnavarro

  • PIC10
  • *
  • Mensajes: 33
Varias comunicaciones simultaneas por RS232
« en: 25 de Febrero de 2008, 17:26:26 »
Hola Expertos,

Necesito ayuda de alguien experimentado en el tema.

Trato de comunicar un PIC por rs232 con varios dispositivos, en un principio con 3 diferentes (puede que mas adelante sean mas) donde cada dispositivo funciona a una velocidad diferente. Mi problema está al detectar por donde me viene la informacion, de que dispositivo. El pic se encuentra haciendo sus cosas, y en un determinado momento me vendrán datos de uno de los dispositivos y he de tratarlos.

En un principio habia pensado hacerlo por interrupciones, pero segun he leido en numerosos post, a lo maximo que llego es a tratar dos interrupciones, una por (#int_rda) asginandola a un pueto serie, y el otro puerto serie a una interrupcion externa (#int_EXT) por RB0. Pero... ¿Y el tercer puerto que necesito que hago?

He intentado hacer el programa sin interrupciones, (tal y como esta abajo), pero no me termina de funcionar bien. En un principio me recibe el dato, el puerte correspondiente por donde venga, pero al enviar el segundo, por el mismo puerto o por otro, no hace caso, necesito enviar dos o tres veces para que reaccione, y encima, al estar haciendolo asi, no puedo tener al PIC haciendo otras cosas mientras no vengan datos.

Entre los diferentes dispositivos se comunicaran con tramas "largas" (15 ó 20 bytes cada una), donde el primer byte de cada trama me dira que debo hacer en cada caso con el resto de esa trama.

¿Se os ocurre alguna idea?


#include <18F2550.h>
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use     delay(clock=48000000)

#include <stdio.h>
#include <string.h>

//________________________________________________________________________________________________

#use rs232(baud=115200,parity=N,xmit=PIN_C6,bits=8, ERRORS, stream=Canal_PC_TX)   
#use rs232(baud=115200,parity=N,rcv=PIN_C7,bits=8, ERRORS, stream=Canal_PC_RX)   

#use rs232(baud=9600,parity=N,xmit=PIN_B6,bits=8, ERRORS, stream=Canal_WC_TX)   
#use rs232(baud=9600,parity=N,rcv=PIN_B7,bits=8, ERRORS, stream=Canal_WC_RX)     

#use rs232(baud=38400,parity=N,xmit=PIN_B4,bits=8,stream=Canal_GP_TX)           
#use rs232(baud=38400,parity=N,rcv=PIN_B5,bits=8, ERRORS, stream=Canal_GP_RX)     

#define  Enciende     Output_High
#define  Apaga        Output_Low

//________________________________________________________________________________________________

void main(){

   unsigned int miBuffer[10];
   unsigned int16 miCrc;
   int i=0, j=0;

   Enciende(PIN_A1);
   delay_ms(500);
   Apaga(PIN_A1);

   fprintf(Canal_PC_TX,"\r\nINICIO");


      while(TRUE){

         if(kbhit(Canal_PC_RX) == TRUE && getchar(Canal_PC_RX) == 0x01){

           fprintf(Canal_PC_TX,"\r\nRecibido comando 1 de PC");           

         }else if(kbhit(Canal_PC_RX) == TRUE && getchar(Canal_PC_RX) == 0x02){

           fprintf(Canal_PC_TX,"\r\nRecibido comando 2 de PC");
         
         }else if(kbhit(Canal_WC_RX) == TRUE){
         
           fprintf(Canal_PC_TX,"\r\nRecibo por WC");         
         
         }else if(kbhit(Canal_GP_RX) == TRUE){         

           fprintf(Canal_PC_TX,"\r\nRecibo por GP");

         }
     }
}



Esto es un pequeño ejemplo de lo que pretendo. Esto me funciona, pero como os he dicho, aveces me falla, se queda atascado y necesito enviar varias veces para que se entere de que le estoy enviando.


A ver si alguien me podeis hechar un cable, salu2 a tod@s 
__El conocimiento humano pertenece al mundo__

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #1 en: 25 de Febrero de 2008, 18:40:49 »
Hola jnavarro

el problema es que no puedes usar la directiva #use rs232 mas de una vez en tiempo de ejecución.

mira estos link:

http://www.todopic.com.ar/foros/index.php?topic=16369.msg107672#msg107672

http://www.todopic.com.ar/foros/index.php?topic=19026.msg134894#msg134894


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jnavarro

  • PIC10
  • *
  • Mensajes: 33
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #2 en: 25 de Febrero de 2008, 20:35:20 »
Gracias PalitroqueZ,

Habia leido ya uno de los post, el otro no, gracias por él. Pero lo que se explica en ellos no me acaba de aclarar. Yo quiero definir 3 "canales de comunicacion" (Cada uno con su Tx y RX) en diferentes pines a diferentes velocidades, en estos post se habla de acerlo sobre un mismo par de pines e ir variando la velocidad.

Si te fijas, en un principio yo me planteado definirme:

Canal_PC_TX --> Pin Tx=C6 y Pin RX=C7
Canal_WC_TX --> Pin Tx=B6 y Pin RX=B7
Canal_GP_TX --> Pin Tx=B4 y Pin RX=B5

Tras esto, lo que trato es asignarle una interrupcion diferente a cada Canal. El PIC andará haciendo sus cositas, hasta que en uno de los momentos, algún canal le envie algo (por sus respectivos pines), el ese momento el pic lo gestionará, y le contestará por su canal.

¿He conseguido explicarme mejor? ¿Le ves solución a lo que trato de hacer?

Salu2 y gracias por contestar
__El conocimiento humano pertenece al mundo__

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #3 en: 06 de Marzo de 2013, 16:25:05 »
Hola
Y al final jnavarro o palitroquez,tuvo solucion?? porque justo voy a implementar algo similar
Nunca se deja de aprender

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #4 en: 06 de Marzo de 2013, 17:16:27 »
thegame!
Por lo que veo el post es algo antiguo  :D
Pero segun veo puedes usar varios stream para cada rs232 y puedes enviar por cada canal (stream), por asi decirlo, sin problemas; el problema se te presentara es cuando te lleguen mensajes, ya que, deberas utilizar rutinas por software y estas no poseen un buffer que te permitan guardar un dato o utilizar una interrupcion que te indique que a llegado un dato. Eso solo se puede hacer es por hardware y la mayoria de los pic tienen uno o dos puertos seriales por hardware los cuales possen bufferes de recepcion.
Lo que deberias entonces es sincronizar en cada momento un transmisor con un receptor que tengan el mismo stream, para que no te falle la comunicacion.
De lo contrario deberias utilizar otra tecnica  :shock: que podria ser asignar una direccion a cada pic luego utilizar un pic que antes de enviar una data envie primero la direccion del pic con que se quiere comunicar y luego la data, de esta manera solo el pic que contenga la misma direccion que se envio primero reciba la data.
 

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #5 en: 06 de Marzo de 2013, 17:52:59 »
Aunque como comento RALF2 es un post viejo, soluciones por software son complicadas cuando tenes varias canales series y de diferente baud-rates. Si los devices series son más de dos, te recomiendo usar algún micro que tenga las misma cantidad de uarts x hardware integradas, se que Atmel y Freescale tiene micros así. Buscando en la web de microchip encontré este:

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en559357

Saludos !

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #6 en: 06 de Marzo de 2013, 19:57:24 »
Existen muchos pics con 4 uart por hardware, pic24 y pic32, en tu caso me decantaria por pic24 que segun veo usas CCS, pero te recomiendo hacer el uso del hard a "mano" por interrupciones, es decir, gestiona tu mismo tanto la transmision como la recepcion y no se lo dejes a CCS.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #7 en: 06 de Marzo de 2013, 20:19:31 »
ok muchachos muchas gracias por las sugerencias,estuve buscando por el foro y encontre este tema:

http://www.todopic.com.ar/foros/index.php?topic=27195.0

que para mi caso podria funcionar,como menciona el compañero en el post,le funciono bien a bajas velocidades y yo realmente no requiero altas velocidades.igual lo pruebo en proto y chequeo si va bien.

el problema se te presentara es cuando te lleguen mensajes,

eso precisamente amigo RALF2 es lo que creo me llevara mas tiempo y me dara mas dolores de cabeza.

Ahora la otra opcion que comentan los compañeros RICHI777 y KALLITOS tambien la considere,de echo utilice el seleccionador de PICS que posteo Nocturno y si efectivamente me encontre con varios,solo que por ahora me cortaron los recursos un poco y tendre que implementar algo mas economico y ya que el CD4052 me costaria 7.8 pesos mas lo de los MAX que valen como 11 pesos y como ya tengo el PIC jeje (todo en pesos mexicanos),creo que me aventare a probar si me sale.

Gracias y se aceptan sugerencias para lo de la recepcion asi como la que se tomara en cuenta del compañero RALF2

Saludos
Nunca se deja de aprender

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Varias comunicaciones simultaneas por RS232
« Respuesta #8 en: 06 de Marzo de 2013, 22:36:19 »
Te comento mi experiencia. Tengo desarrollado un producto que atiende 3 series, mi micro solo tiene 2, nome quedo otra que colocar un 4052 para multiplexar los canales. Esto sirve si los canales externos unicamente responden en modo encuesta ( Polling )  porque si los canales se ponen a transmitir al mismo tiempo vas a perder caracteres. La solucion de implemntar uart por soft y encima varios, se puede pero no creo que funcione bien. La solucion creo que tirarse por un micro que tenga 4 uarts x hardware. Con respecto a lo de microchip encontre que existen pic24, dspic y pic32 pero elegui uno no tan potente. Com respecto a perder de datos, esto se soluciona con colas o buffer circulares. Cuantos bytes vas a recibir por mensaje por cada dispositivo, te digo por el tema de la ram.

Saludos !


 

anything