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.
Transmitter erst abschalten wenn die Daten alle raus sind. Nicht schon, wenn der Sendepuffer noch Luft hat.
Hab ich im Quelltext: Serial.flush() //Warten bis Daten raus sind digitialWrite(RS485,LOW) //Transmitter abschalten Oder muss ich das anders formulieren?
Zu Arduino-Libs kann ich nicht beitragen. Wie sieht die Terminierung aus? Oszi vorhanden?
:
Bearbeitet durch User
Funktioniert die Lib? Hier tat sie es erst nicht: http://forum.arduino.cc/index.php?topic=151014.msg1134496#msg1134496
:
Bearbeitet durch User
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?
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?
Hannes schrieb: > Das ist doch normalerweise garnicht möglich oder? Ohne Terminierung bei abgeschaltetem Transmitter geht das.
Die Zwei Steuersignale hab ich wie bereits vermutet auf den selben Pin verdrahtet. Laut Datenblatt ist auch eine High-Active und eine Low-Active.
Ein LA ist nicht geeignet, den Zustand des RS485 bei abgeschaltetem Transceiver sinnvoll zu bewerten. Das kann schon ein Multimeter besser.
Bei abgeschaltetem Transmitter und vorhandenem Abschluss haben beide Leitungen den gleichen Pegel. Ein LA wird folglich auf beiden Leitungen den gleichen Zustand anzeigen. Es ist also vielleicht alles in Ordnung und dein LA führt dich an der Nase herum.
:
Bearbeitet durch User
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
:
Bearbeitet durch User
Dietrich L. schrieb: > Daraus darf ein Empfänger machen, was er will, denn das ist > undefiniert. Es gibt eine kleine Hysterese. Bei 0V Differenz bleibt er im bisherigen Zustand. Failsafe Terminierung ist dem aber vorzuziehen.
:
Bearbeitet durch User
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.
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.
Hannes schrieb: > Problem bei der Sache ist, dass der Arduino nicht antworten kann, weil > er die ganze Zeit empfängt. Da Du ja ein Oszi hast: hast Du auch das Timing zum Umschalten des RS485-Treibers nachgemessen?
Dietrich L. schrieb: > Da Du ja ein Oszi hast: hast Du auch das Timing zum Umschalten des > RS485-Treibers nachgemessen? Das kann er auch mit den LA anzeigen.
Fehler liegt nicht beim RS485, sondern beim Arduino! Hab gerade das Oszi an den RX-Pin angeschlossen, da is keine Spannung im Ruhezustand! Keine Ahnung wieso die blöde LED leuchtet, aber am Bus liegts nicht!
Rx offen => Leitung floatet => Zufall. Pullup 10K. Alternativ den Receiver eingeschaltet lassen und nur den Transmitter schalten. Dann kriegt die Software alles was gesendet wird retour, was man dann eben ignoriert.
:
Bearbeitet durch User
A. K. schrieb: > Rx offen => Leitung floatet => Zufall. Pullup 10K. Das erklärt aber nicht, warum die LED leuchtet. Dabei gehe ich allerdings davon ausgehe, dass sie an dieser Leitung angeschlossen ist...
Dietrich L. schrieb: > Dabei gehe ich allerdings davon ausgehe, dass sie an dieser Leitung > angeschlossen ist... Was zu klären wäre. Und wenn: wie, direkt oder über Treiber-IC?
:
Bearbeitet durch User
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.