Esta es una continuación de la contención RS485 de SN65176 .
Resolví el problema de contención esperando al menos 26 us después del bit de parada de un controlador XS201A RS485 conectado a una PC antes de transmitir desde el SN65176. Sin embargo, evitar la contención no es suficiente.
Inicialmente, mi red de terminación del lado del PIC constaba de un único terminador diferencial de 100 ohmios:
simular este circuito : esquema creado con CircuitLab
Tan pronto como el XS201A termina de transmitir, el voltaje diferencial regresa a un valor promedio. Sin embargo, este valor promedio no es un diferencial de 0 V como cabría esperar. En cambio, el conductor está tirando fuertemente de la línea hasta la mitad del estado de la marca. En el proceso, piensa que eso significa un bit de inicio y emite un byte "0" (o un byte parcial dañado del lado PIC, si comienza a transmitir poco después).
Luego hice una red de sesgo para imitar el estado "espacial" (opuesto a la marca), de modo que:
Agregar esta red de sesgo hizo que, en unos pocos miles de bytes, mi tasa de error ahora sea de aproximadamente 0,4% (frente al 100%). Sin embargo, incluso con esta mejora, no hay cambios visibles en los voltajes de estado inactivo: el XS201A esencialmente anula mi red de polarización e invierte la polaridad de la resistencia intermedia.
Mis preguntas son:
RS-485 tiene un voltaje diferencial definido tanto en la marca como en el espacio. El estado inactivo es cuando el voltaje V_diff es -0.2V < V_diff < 0.2V; esto se hace poniendo el transmisor en un estado Hi-Z, generalmente controlando la señal RTS desde el UART. Luego se usa RTS para encender/apagar el transmisor, desde Hi-Z hasta el nivel de voltaje definido para marca/espacio.
Vieja pregunta, pero...
Existe una polarización a prueba de fallas, donde las líneas se mantienen ligeramente en uno de los dos únicos estados válidos en los que debería estar el par trenzado.
Si esto sucede en su XS201A, podría significar que, de hecho, está funcionando según lo previsto. Los voltajes inesperados podrían explicarse por una conversión dc-dc hacky, como lo hicieron para los antiguos programadores PIC/AVR. Si eso es un problema, recomendaría obtener un adaptador autoalimentado adecuado.
Para obtener una explicación más detallada de la polarización a prueba de fallas en RS485, consulte esta nota de aplicación de Ti .
Para solucionar estos problemas, terminé abandonando el XS201A por completo. No tiene una señalización de hardware adecuada y sus características de polarización eran problemáticas.
Jasén
Jasén
Reinderien
Marko Bursic
Reinderien