Autor Tema: Comunicación serie diferencial  (Leído 1703 veces)

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

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Comunicación serie diferencial
« en: 18 de Marzo de 2019, 06:43:42 »
Saludos al foro!

Estoy intentando comunicarme con un dispositivo RS422 sin posibilidad de usar transductores hardware.

La recepción de datos no ha supuesto problema, se trata de RS232 normal y corriente, me basta con leer sólo la TXD+ del dispositivo. El problema viene al intentar transmitir datos ya que parece que si no son diferenciales no se entera de nada.

Alguien conoce o se le ocurre cómo hacer que una transmisión serie mande la señal por dos pines, invertida la señal de uno respecto al otro? (Como si pusiéramos un inversor en la línea).

La comunicación que uso es:

#use RS232 (Baud=57600,Parity=N,Xmit=PIN_B0,Rcv=PIN_B1,Stop=1,Stream=Dispositivo,Bits=8,force_sw)

Lo que necesito es que al transmitir un dato por RB0, cuando RB0 esté a uno RB2 esté a cero y viceversa. la recepcción por RB1 funciona perfectamente.

El lenguaje es CCS.

Gracias de antemano!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación serie diferencial
« Respuesta #1 en: 18 de Marzo de 2019, 07:54:25 »
Citar
El problema viene al intentar transmitir datos ya que parece que si no son diferenciales no se entera de nada.

Si usas el mismo protocolo para transmitir y recibir entonces no deberias tener problemas, a no ser que en el camino se destruya la señal.
Para eso estan los transductores. Los cuales usan otras tensiones. Y algunos diferenciales. Lo que no entiendo es ... Porque la recepcion SI funciona pero la transmision NO. Si van por el mismo lugar fisico, no deberia haber ningun problema. A no ser que algun dispositivo no use la misma tension o no tenga la capacidad suficiente de corriente para enviar el dato.

Citar
Alguien conoce o se le ocurre cómo hacer que una transmisión serie mande la señal por dos pines, invertida la señal de uno respecto al otro? (Como si pusiéramos un inversor en la línea).

No tiene sentido, ya que el receptor deberia estar preparado para recibir una señal diferencial, si lo lees con el PIC vas a estar leyendo simplemente una señal comun y corriente como si fuera un solo pin. A lo que me refiero, si tu problema viene por no poder diferenciar un 0 o un 1 del lado del receptor, entonces ¿que te hace pensar que enviando 2 señales, de las cuales TAMPOCO vas a poder diferenciar entre 0 o 1 en ninguna de ellas, vas a poder descifrar el mensaje?

En fin.. necesitas un transductor. Sea el mas simple como usar un transistor para que tenga 12V la señal y no 5V, o sea un integrado de RS232 o RS485. Necesitas algo de hardware, lo cual estas intentando omitir.


PD: La diferencia en una comunicacion Asincrona como la que ofrece la UART respecto al RS232 y RS422/RS485. Son los niveles de tension y si son diferencia o no. Asi que no podes implementar un "RS422" cuando no usas las tensiones y forma de transmision requeridas.. Simplemente es una UART directa a los demas micros o lo que sea.
« Última modificación: 18 de Marzo de 2019, 08:07:15 por KILLERJC »

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:Comunicación serie diferencial
« Respuesta #2 en: 20 de Marzo de 2019, 08:02:31 »
Gracias KILLERJC por tu respuesta!

No acabo de entender a qué te refieres con los niveles de tensión, posiblemente haya planteado mal el problema.

Como estoy en fase de diseño te adjunto un miniesquema de la disposición, si hay que añadir algo de hardware me vendría muy bien que me explicaras cómo conectar los dos componentes. Los niveles de tensión que he medido en la línea TXD+ son de 0 y 5V, en la línea TXD- son idénticos pero al revés. Cuando leo la línea TXD+ directamente al PIC consigo leer los datos pero no he conseguido mandarle datos a las líneas RXD.

Saludos y gracias de nuevo.
 

* Esquema.jpg
(166.29 kB, 1137x558 - visto 232 veces)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación serie diferencial
« Respuesta #3 en: 20 de Marzo de 2019, 08:25:47 »
Ahora te entiendo mejor con el grafico.

Hacerlo por software me parece una locura, ya que perdes todas las ventajas del modulo hardware.
Deberias si o si crear un circuito que te invierta la señal.

No se los requerimientos de tiempos, es decir el tiempo entre que ocurre un cambio y otro es valido... Pero si no se requiere mucho, podes usar un transistor para obtener una señal negada ( en emisor comun con una resistencia en el colector ). O un comparador.

https://www.electronics-tutorial.net/analog-integrated-circuits/op-amp-comparators/inverting-comparator/

La salida del PIC es por si 1 de las salidas, y la otra es la negada. Teniendo ya las 2 señales podes ingresar a tu modulo. Siempre y cuando sea ese nomas.

La otra que se me ocurre, teniendo en cuenta las especificaciones del RS-422 es que :

Se considera un 1 si VRx – VRx <= –0.3 V
y 0 si VRx – VRx >= +0.3 V

Entonces si ponemos un divisor resistivo que te de 2.5V sobre RxD- por ejemplo, con solo actuar sobre RxD+ podria funcionar correctamente, ya que las condiciones se cumpliria. Si la señal se encuentra "negada" el divisor deberia estar en RxD- .

Es otra opcion que se me ocurre. No probe ninguno, pero es para probar :P