Autor Tema: Comunicación UART, larga distancia por cable  (Leído 9795 veces)

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

Desconectado cammendoza15

  • PIC10
  • *
  • Mensajes: 7
Comunicación UART, larga distancia por cable
« en: 16 de Diciembre de 2014, 21:00:24 »
Hola amigos de Todo PIC Foro.

En este caso vengo con unas nuevas dudas sobre la comunicación serial UART mediante un cable extenso.
Resulta que tengo que conectar unas 30 placas mediante la conexión serial (UART), dicha conexión está realizada en paralelo como se puede observar en la imagen adjunta. Mis preguntas son: ¿Si yo transmito una trama como "PCB30_ONSTATE#" desde la placa de control hasta la placa número 30 esta llegará sin ninguna interferencia a pesar de la distancia a la que están?, ¿A que velocidad debo iniciar el UART, 9600?, recuerda que utilizaré el cable RJ45 para la conexiones.

Acá dejo el link de la imagen que ilustra la conexión: http://4.bp.blogspot.com/--USLJWmYoKM/VJDA1qg0PLI/AAAAAAAAAtw/4SXizYiARGc/s1600/ejemplo%2Bconexi%C3%B3n.jpg

En caso de que esta conexión no funcione, ¿que otra me recomendarían?.

Gracias!.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Comunicación UART, larga distancia por cable
« Respuesta #1 en: 16 de Diciembre de 2014, 21:21:06 »
De qué distancias estamos hablando? Yo te recomiendo que utilices RS-485 en vez de RS-232.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado byborre

  • PIC10
  • *
  • Mensajes: 19
Re: Comunicación UART, larga distancia por cable
« Respuesta #2 en: 16 de Diciembre de 2014, 21:29:30 »
¿Se pueden poner dispositivos en paralelo transmitiendo por RS232?  :?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Comunicación UART, larga distancia por cable
« Respuesta #3 en: 16 de Diciembre de 2014, 21:54:11 »
De wikipedia:

Citar
The standard does not define a maximum cable length but instead defines the maximum capacitance that a compliant drive circuit must tolerate. A widely used rule of thumb indicates that cables more than 50 feet (15 m) long will have too much capacitance,

Si podes conectarlos de esa forma nomas que tendrias que implementar algun control para que no envien varios, sino que sea el maestro quien pida datos y se le devuelva.
Ahora no se la cantidad de dispositivos que puedas tener, imagino que cada uno aportara una capacidad y eso hara que se limite la distancia/cantidad

La otra es ir por RS-485 como te dijo gera.

Tambien otra es llevar 5V DC por 30m me parece algo bastante complejo ya que tendrias muy mucha caida de tension ( Obvio que depende del consumo/ cable a usar / etc  ). Deberias usar una tension mayor y reducirla en los dispositivos a lo que se necesite mas is por ahi los dispositivos tienen distintos voltajes.

Tal ves para explorar otras opciones esto pueda servir:
I2C ( lo cual deberias poder direccionar los datos )
http://www.nxp.com/documents/application_note/AN11084.pdf
http://www.nxp.com/documents/application_note/AN10658.pdf
Y aca SPI que usa RS-422
http://www.ti.com/lit/an/slyt441/slyt441.pdf
Sobre RS-482 y 422
http://www.analog.com/static/imported-files/application_notes/AN-960.pdf
« Última modificación: 16 de Diciembre de 2014, 22:02:13 por KILLERJC »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Comunicación UART, larga distancia por cable
« Respuesta #4 en: 17 de Diciembre de 2014, 02:55:26 »
De qué distancias estamos hablando? Yo te recomiendo que utilices RS-485 en vez de RS-232.
saludos!
De acuerdo contigo amigo Gera..
RS-232 son para menos de 2 metro de cable
RS-485 puede usar hasta mil metro de cable, ojo el cable debe tener un impedancia 120 Ohm es lo standard, si quiere mas informacion busca comunicacion DMX512, que no solo es para iluminacion, sino tambien para comunicacion entre Dispositivos.
Aqui te pongo estos datos:

 Los Datos DMX512 se transmiten a través de un par de cables niveles de tensión o voltaje de 0 a 5 y UN cable para la masa, posee una velocidad de 250 Kbit/s y transmite la señal de forma asíncrona

DMX512 soporta 1.200 metros (3.900 pies) de largo, con un máximo de 32 dispositivos en un solo universo Dmx. Si son más de 32 dispositivos necesitan ser comunicados, el circuito se puede ampliar a través de divisores DMX. El Cableado de red consta de un par trenzado blindado, con una impedancia de 120 ohmios.

Para un cableado corto, menos de 45 metros, y solo algunos dispositivos no es necesario la introducción de una terminación DMX (resistencia que cierra el final del circuito DMX), incluso en distancias cortas el uso de cables con una mayor capacitancia y diferente impedancia (como el cable del micrófono) se pueden utilizar sin ningún problema. A medida que la longitud del cable y/o el número de dispositivos aumenta, el uso de un cable especial para Dmx (120 Ohm) y la incorporación de un terminal DMX es necesario para poder asegurar la integridad de la señal.



Hoy en dia ya se usa sin cable, las mayoria trabaja con Xbee.. :P
Saludos
« Última modificación: 17 de Diciembre de 2014, 03:01:45 por stk500 »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Comunicación UART, larga distancia por cable
« Respuesta #5 en: 17 de Diciembre de 2014, 05:05:03 »
Creo que no se ha comentado otro estandar interesante: Can Bus.
Tiene la ventaja de implementar más funciones por Hardware, con lo que te quitas un buen trabajo de programación. Como desventaja cuesta un poco más, pero sólo un poco. Eso ya lo tienes que valorar tú.


Otro método que puedes utilizar, más sencillo que el can bus, es el LIN:
http://en.wikipedia.org/wiki/Local_Interconnect_Network

El LIN tendrías que modificarle o tirar dos líneas, porque sólo acepta 16 esclavos.

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Comunicación UART, larga distancia por cable
« Respuesta #6 en: 17 de Diciembre de 2014, 05:30:06 »
Transceptor LIN de microchip: MCP2003 ó MCP2004

cammendoza15, el bus lin es como el RS232 compartiendo una sóla línea de comunicaciones, de manera que pueden conectarse múltiples esclavos por un sólo hilo. Creo que eso es lo que tú querías hacer.

Saludos.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Comunicación UART, larga distancia por cable
« Respuesta #7 en: 17 de Diciembre de 2014, 09:23:11 »
Revisen bien lo que se va a enviar.
LIN y CAN tienen sus propios protocolos, y no son de mucho trafico de datos, por lo tanto hay que optimizar y mucho si se quiere comunicar algo.
En RS485 es mas libre, pero igual con 30 esclavos y un tiempo de poolling determinado se genera trafico importante.
Hay que estudiarlo bien, con cualquiera de ellos.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado cammendoza15

  • PIC10
  • *
  • Mensajes: 7
Re: Comunicación UART, larga distancia por cable
« Respuesta #8 en: 17 de Diciembre de 2014, 09:41:57 »
Gracias por sus aportes amigos.

Bueno en principio utilizaré solamente cable con el fin minimizar los costos, al ser que son unos 30 placas. ¿Para la conexión RS485, el integrado MAX485 estaría bien?, ¿este integrado es capaz de eliminar las interferencias del cable y demás?, ¿que pasaría sin por ejemplo dos esclavos están enviando información al mismo tiempo?.

Gracias!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Comunicación UART, larga distancia por cable
« Respuesta #9 en: 17 de Diciembre de 2014, 09:52:38 »
Es imposible si usas el protocolo Maestro - esclavo de RS485.
Por eso digo que estudien bien como es cada protocolo.
En RS485 uno es maestro y solicita informacion enviando un mensaje a un esclavo determinado y este contesta (si esta en la red) y asi sucesivamente.
No hay colisiones de mensajes porque se envia una pregunta y debera haber una respuesta, suele reenviarse hasta 3 veces en caso de no haber respuesta.
Las velocidades de comunicacion no suelen exceder los 19200 bps.

Respecto al MAX485, esta perfecto.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Comunicación UART, larga distancia por cable
« Respuesta #10 en: 17 de Diciembre de 2014, 12:07:45 »
Todo depende de la naturaleza de tu aplicación. Pero en general con RS-485 podes resolver cualquier problema.
El MAX485 anda perfecto. Lee detenidamente la hoja de datos, ahí está todo lo que necesitas saber.



En la imagen puede verse el conexionado típico. Fijate bien que en los extremos del cable (se recomienda un par trenzado) van resistencias terminadoras para evitar ondas reflejadas. Las señales DE y RE suelen ir conectadas al mismo pin del PIC, y determinan si el dispositivo está en modo recepción o envío.
El bus es de tipo diferencial, lo que tiene un alto rechazo al ruido de modo común. Al haber una sola línea de datos (un sólo par), el bus es halfduplex (sólo se puede enviar o recibir a la vez).
Por lo tanto, como recomienda MGLSOFT, debes implementar un protocolo donde uno de los micros es el maestro y el resto son los esclavos (deben tener un número único que los identifique).
Al principio, todos los dispositivos están en modo recepción. El maestro es el responsable de iniciar una comunicación, enviando una consulta a un esclavo, y éste generando la respuesta. De este modo no deberían haber colisiones, ya que el único que puede tomar el control del bus en cualquier momento es el maestro.

Suerte y saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Comunicación UART, larga distancia por cable
« Respuesta #11 en: 17 de Diciembre de 2014, 18:54:56 »
Definitivamente la mejor opcion es RS485 como se menciona por los compañeros. En cuanto a tu pregunta de que pasa si dos esclavos envian al mismo tiempo, eso se puede resolver desarrollando un protocolo maestro-esclavo, de forma que siempre hay una comunicacion entre dos dispositivos. En donde la placa mestra o de control como tu la llamas envia un mensaje a una placa en especifico de forma que las demas ignoran ese mensaje. Una analogia de esto seria la siguiente:

Estas en un salon de clase en donde el profesor es el controlador y en dicho salon de clase estan 30 alumnos, y se realiza un proceso de debate en el cual la regla principal es que el profesor se dirige a un alumno en especifico y los demas quedan callados mientras se realian la conversacion.

profesor: Juan estas ahi?
Juan: Si, profesor, digame su pregunta.

Los demas, Pedro, Jose, Ruben, no pueden contestar a la pregunta porque el profesor la hace a Juan.

Espero me haya explicado.

Saludos.

Elreypic.

Desconectado cammendoza15

  • PIC10
  • *
  • Mensajes: 7
Re: Comunicación UART, larga distancia por cable
« Respuesta #12 en: 18 de Diciembre de 2014, 00:47:30 »
Gracias a todos por sus aportes.

Comenzaré a trabajar sobre el RS485 como ustedes me han recomendado. Luego les comento cómo me va!.


Desconectado alexhumbertoa

  • PIC10
  • *
  • Mensajes: 49
Re: Comunicación UART, larga distancia por cable
« Respuesta #13 en: 26 de Diciembre de 2014, 13:45:38 »
OJO, No se debe confundir protocolo de comunicación con medio utilizado.
El RS-485 es un estándar de comunicaciones bidireccional tipo bus (no protocolo) que aporta únicamente la capa física de la red, es decir, solo especifica toda la parte eléctrica y componentes, niveles de voltaje, de corriente, cableado, impedancias, etc, que para el caso de  cammendoza15 sería la opción mas practica y económica ya que un driver RS-485 no cuesta mas de 3 dolares, integrados como el max485 o el sn75176 hacen bien la tarea, cabe resaltar que la distancia y la cantidad de dispositivos a conectar también son determinados por estos drivers, conozco un integrado de maxim rs-485 que soporta hasta 128 dispositivos conectados antes de tener que repetir la señal o usar splitters.

El protocolo es otro cuento, se trata, a grandes rasgos, del idioma que se habla en la red, el usuario decide cual protocolo usar, si quiere puede usar un protocolo estandarizado como por ejemplo el DMX512 que es unidireccional o uno creado por el mismo programador como el ejemplo de elreypic, según sus necesidades.

Citar
Al haber una sola línea de datos (un sólo par), el bus es halfduplex (sólo se puede enviar o recibir a la vez).
Gera, tienes razón cuando utilizas integrados que son diseñados con una sola linea de comunicación, pero también hay integrados como 75179 que poseen doble linea y son utilizados para lograr comunicación full-duplex sobre RS485
La protoboard es la mejor amiga del ruido.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Comunicación UART, larga distancia por cable
« Respuesta #14 en: 26 de Diciembre de 2014, 18:43:58 »

Gera, tienes razón cuando utilizas integrados que son diseñados con una sola linea de comunicación, pero también hay integrados como 75179 que poseen doble linea y son utilizados para lograr comunicación full-duplex sobre RS485


Yo entiendo que por definición RS-485 es halfduplex. De ser fullduplex sería RS-422.
Respecto al protocolo, es cierto, podría montarse cualquier protocolo que soporte dicho medio físico. Yo personalmente tengo afinidad con modbus, ya que lo uso muchísimo en el trabajo (altamente recomendable ya que posee detección de errores).

Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein