RS485 nicht symmetrisch!

Gast #4836742
Lesenswert?
• ▲
▼
Hallo!

Ich habe ein Problem mit der Datenübertragung zwischen 2 Arduinos:
Die Zwei sind mittels RS485 Transceiver verbunden, im Anhang der 
Screenshot vom LogicAnalyzer.
Wie man sehen kann sind die zwei RS485 Signale nicht symmetrisch!
Das Gelbe startet mit High, das Grüne mit Low. Soweit so gut!
Nach der Übertragung ist jedoch das Gelbe noch eine Zeitlang High.

Wie kann sowas sein?

Das Rote Signal ist der RXD-Pin vom Arduino, der natürlich eine 
Übertragung feststellt und die RXD-LED ständig leuchtet.

Sollte nicht der Transceiver das Signal automatisch symmetrieren?

Gruss aus Österreich, Hannes Schiller.

PS: Transceiver ist ein 65176B.
Angehängte Dateien:
(Firma: keine) #4836767
Lesenswert?
• ▲
▼
Sieht fast so aus, als ob Du bei der Richtungsumschaltung nicht beide 
Richtungen abschaltest, sondern nur eine. Jeder "normale" RS485 PHY hat 
je einen Eingang zum Aktivieren von Empfänger und Sender, 
intelligenterweise in der Regel invertiert, so dass Du mit einer Leitung 
zum Umschalten beider Pins auskommst, wenn Du sie zusammenschaltest. 
Manche Leute legen konstant den Receive Enable auf "immer an," manche 
steuern beide getrennt (dann must Du natürlich softwaremäßig beide 
Leitungen parallel runterziehen. Oder Rx immer aktiv lassen, aber die im 
loopback gelesenen eigenen Zeichen auf dem Bus ignorieren, was auch bei 
der "immer an" Variante der Fall ist).

Hast Du einen Schaltplan von der PHY Ansteuerung?
Gast #4836771
Lesenswert?
• ▲
▼
Ich hab die Daten vom LA decodiert, und gesehen, dass die Daten 
vollständig gesendet wurden.
Das Byte '171' wird übertragen und auch das Stop Signal kann ich sehen, 
wenn ich reinzoome.
Wie kann es überhaupt sein, dass beide RS485 Leitungen high sind?
Das ist doch normalerweise garnicht möglich oder?
#4836795
Lesenswert?
• ▲
▼
Hannes schrieb:
> Terminierung ist beiderseits 150 Ohm

Bei abgeschaltetem Sender hast Du dann 0V Differenz zwischen den beiden 
Leitungen. Daraus darf ein Empfänger machen, was er will, denn das ist 
undefiniert.
Eine richtige Terminierung hat an einer Seite noch Ziehwiderstände an 
Vcc und GND. Damit ist der Ruhepegel definiert. Siehe:
https://de.wikipedia.org/wiki/EIA-485#Technik
Gast #4836813
Lesenswert?
• ▲
▼
Warum leuchtet dann die RX-LED beim empfangenden Arduino die ganze Zeit?
Das mit den Widerständen hab ich schon versucht, je 470 Ohm nach VCC bei 
A und nach GND bei B, hat nix gebracht!
Problem bei der Sache ist, dass der Arduino nicht antworten kann, weil 
er die ganze Zeit empfängt.
Das mit den Ruhepegeln stimmt natürlich, habe mit dem Oszi nachgemessen.
#4836815
Lesenswert?
• ▲
▼
A. K. schrieb:
> Dietrich L. schrieb:
>> Daraus darf ein Empfänger machen, was er will, denn das ist
>> undefiniert.
>
> Nicht ganz. Es gibt eine kleine Hysterese. Bei 0V Differenz bleibt er im
> bisherigen Zustand.

Da hast Du völlig recht.
Aber jede kleine Störung/Reflektion kann den Zustand ändern und zu 
Fehlern des Auswertung führen. Daher ist der "Abschlusswiderstand mit 
Bias-Netzwerk" ja so wichtig und wird Hannes bei der Suche helfen, falls 
es eine andere Ursache für das beobachtete Verhalten gibt.
Gast #4836872
Lesenswert?
• ▲
▼
A. K. schrieb:
> Es ist also vielleicht alles in Ordnung und dein LA führt dich an der
> Nase herum.

Der RS485 Pegel ist die Differenz zwischen den beiden Signalen, der LA 
misst aber die Signale gegen GND. Er zeigt daher etwas Falsches an. Wenn 
das eine RS485 Signal 4,5V und das andere 5,5V hat, ist das für das 
differentielle Signal OK (> 200mV), für den LA sind beide High. Der LA 
ist ungeeignet, er müsste einen Differenzeingang haben.

MfG Klaus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren