ich benutze einen MAX485 und habe mir am Oszi mal die Leitungen angesehen. Auf der RO-Leitung habe ich ein exaktes Echo von der DI-Leitung. Ich finde dazu nichts im Datenblatt, habe aber eine Ahnung, woran das liegt:
Sobald der MAX485 Input von der USART-Seite bekommt, liegt auf dem differentiellen RS485-Paar das entsprechende umgewandelte Signal an.
Da nun dort wiederum ein Signal anliegt, macht der MAX485 das, wofür er da ist und wandelt diese Daten um auf USART-Pegel, die eben auf die RO-Leitung gehen. Wenn ich dieses Echo nicht haben möchte, bleibt mir nur, das per Softare zu ignorieren oder die Senderleitung mit !RE! vorübergehend zu deaktivieren.
Die beiden Pins zu verbinden, ist irgendwie offensichtlich, wenn man erstmal darauf gestoßen wird. Gesehen hab ich die Option aber tatsächlich nicht... Also noch mal danke!
Ist aber gar nicht so schlecht das Echo zu empfangen. Man weiss ja was man gesendet hat und kann damit vergleichen ob es zu Kollisionen kam. Programmieraufwand gering, Nutzen u.U. gross. Schädlich praktisch nie.
Ist aber gar nicht so schlecht das Echo zu empfangen. Man weiss ja was
man gesendet hat und kann damit vergleichen ob es zu Kollisionen kam.
Programmieraufwand gering, Nutzen u.U. gross. Schädlich praktisch nie.
Beim CAN wird doch genau das verwendet.
Wobei RS485-Ausgänge u.U. zu niederohmig sind, eine Kollision "überreden" und so nicht merken, dass eine vorliegt.
Man weiss ja was man gesendet hat und kann damit vergleichen ob es zu
Kollisionen kam.
Unsinn, eine sichere Kollisionserkennung ist mit RS-485 nicht garantiert.
Bei RS-485 entstehen bei mehreren aktiven, gegeneinander treibenden Sendern auf Grund der Push-Pull Ausgangsstufen undefinierte Pegel, d.h. eine Kollisionserkennung ist ein Glücksspiel.
Bei CAN gewinnt daher immer der dominante Pegel, d.h. auch bei einer
Kollision sind saubere Pegel garantiert.
Der Controller mit dem recessive-Bit ist dann aber auch still, wenn er die Kollision erkannt hat.
Die Kollision wird bei RS485 eben nicht unbedingt erkannt. Da "redet" der Controller dann vielleicht doch noch weiter.
Unsinn, eine sichere Kollisionserkennung ist mit RS-485 nicht
garantiert.
Eine, die mit der von CAN vergleichbar ist, nicht, aber das simple Verfahren, das Sendeecho auszuwerten, hilft definitiv viel mehr als "senden und vergessen".
Nicht jeder Kollisionsfall ist so komplex, daß gleich mehrere Geräte gleichzeitig lossabbeln, und selbst dann dürfte das Sendeecho meistens eines sein: Kaputt.
Der Controller mit dem recessive-Bit ist dann aber auch still, wenn er
die Kollision erkannt hat.
Das hat aber nichts mit dem grundsätzlichen Unterschied in der Bitübertragung (physikalisch Schicht) zu tun, sondern ist bereits Bestandteil einer höheren Schicht im OSI Modell (Transport).
... hilft definitiv viel mehr als "senden und vergessen"
Sagen wir mal so, je nach verwendeten Treibern besteht die Möglichkeit, dass Kollisionen erkennbar sind, aber das ist alles andere als sicher, weil dabei irgendwelche Zwischenpegel auftreten können.
Nicht jeder Kollisionsfall ist so komplex, daß gleich mehrere Geräte
gleichzeitig lossabbeln
Was soll das für ein Kollisionsfall sein, bei dem nicht mehrere Geräte senden? Wenn nur eins sendet, gibt es keine Kollision ;-)
Das hat aber nichts mit dem grundsätzlichen Unterschied in der
Bitübertragung (physikalisch Schicht) zu tun, sondern ist bereits
Bestandteil einer höheren Schicht im OSI Modell (Transport).
Und wie ist das bei einer RS485-Übertragung?
Der Sender, der die Kollision erkennt, stellt den Sendebetrieb doch auch ein ==> gleicher Vorgang, oder?
Natürlich kann ein CAN-Controller auch einfach weiter sabbeln.
Da setzt sich dann immer das dominante Bit durch - bis nur noch das auf dem Bus liegt, und alle Controller das Senden einstellen.
Und wie ist das bei einer RS485-Übertragung?
Der Sender, der die Kollision erkennt, stellt den Sendebetrieb doch auch
ein ==> gleicher Vorgang, oder?
Da bei RS-485 eine Kollision wegen den möglicherwiese auftretenden Zwischenpegeln nicht sicher erkennbar ist, ist es eben nicht der gleiche Vorgang.
Bei CAN erfolgt die Kollisionsauflösung außerdem noch innerhalb des Bit, bei RS-485 wäre das frühestens nach dem Stop-Bit des kollidierenden Zeichens möglich.
Natürlich kann ein CAN-Controller auch einfach weiter sabbeln.
Nein, bei CAN wird darüber während der Arbitrierung die Nachrichtenpriorisierung sicher gestellt. Der Controller hat dafür zu sorgen, dass der Sender mit der niedriger priorisierten Nachricht nach einer Kollisionserkennung sofort (noch innerhalb des Bits) die Schnauze hält. Falls es zu einer Kollision von Data Frame und Remote Frame kommt, hat der Data Frame Priorität. Bei CAN passiert die Kollisionshandhabung ohne Datenverlust, d.h. die priorisierte Nachricht kommt heil durch.
Was soll das für ein Kollisionsfall sein, bei dem nicht mehrere Geräte
senden?
n > 2, ich hätte gedacht, daß das irgendwi klar ist.
Die Erfahrung (die manch einer macht) zeigt, daß eine Kollision das zu empfangende Echo oft ausreichend weit stört, daß sie erkannt wird. Undefinierte Pegel sind ja schon mal ein Anfang - wenn eine UART bei undefinierten Pegel am Eingang des RS485-Transceivers weder Parity- noch Framing-Fehler feststellt und die Daten den gesendeten entsprechen, dann sind die Pegel vielleich doch nicht so undefiniert.
Wenn man das Datensignal invertiert an den Driver-Enable Anschluss legt, kann man auf dem Bus mit RS485-Treibern auch mit dominanten und rezessiven Pegeln arbeiten.
Dann gibt es auch keine "Zwischenpegel". Und der, der rezessiven Pegel senden möchte, kann erkennen, dass gerade dominant auf dem Bus ist und seine Sendung einstellen.
Und der, der rezessiven Pegel senden möchte, kann erkennen, dass
gerade dominant auf dem Bus ist und seine Sendung einstellen.
Man müsste die Ausgabe per Bit-Banging machen. Ein UART ist nicht in der Lage, während der Zeichenübertragung einzugreifen und auf den Zustand einzelner Bits zu reagieren. Bei Konflikten kann man nur im Nachhinein erkennen, dass Bits gestört wurden, aber die Übertragung wird korrumpierte, ganz im Gegensatz zu CAN, wo die höher priorisierte Nachricht heil durch kommt.
ich benutze einen MAX485 und habe mir am Oszi mal die Leitungen
angesehen. Auf der RO-Leitung habe ich ein exaktes Echo von der
DI-Leitung. Ich finde dazu nichts im Datenblatt,
Das steht schon im Datenblatt. Einfach mal die Bilder anschauen :)