www.mikrocontroller.net

Forum: Haus & Smart Home RS-485 Kollisionserkennung (MAX13487/13488)


Autor: Christian C.-Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

wieder einmal das Thema "Kollisionserkennung bei RS-485" bei 
Multimaster-Betrieb.

Zunächst vorne weg:
1) Mir geht es hier um die Kollisionserkennung und nicht deren 
Vermeidung (z.B. durch Token oder Zeitslots)
2) ja, CAN kann das. ;-)

Interssant finde ich diesen Baustein von Maxim (MAX1348x):
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5387

Dieser beinhaltet eine kleine State-Machine und einen Komparater, der 
automatisch zwischen Senden und Empfangen umschalten kann (siehe 
Datenblatt Seite 11/12).

Die Frage ist jetzt, ob man so etwas nicht für die Kollisionserkennung 
benutzen kann? Und zwar mit "normalen" RS-486 Transceivern...

Der Knackpunkt bei dieser Geschichte ist, dass das DE Signal (TX enable) 
in Kombination mit dem Signal DI (TX data bit) clever genutzt wird, um 
die Tatsache auszunutzen, dass der Bus bei Idle durch die Terminierung 
mit Pull-Ups und Pull-Downs in einen definierten Zustand "logisch 1" 
gezogen wird. Natürlich wird der Flankenwechseln von 0->1 nicht den 
Pull-Ups überlassen, sondern der Treiber wird kurz aktiviert. Danach 
wird geschaut, ob der Zustand immer noch "logisch 1" ist. Ist er es 
nicht, belegt ein anderer Teilnehmer den Bus.

Könnte man das zuletzt beschriebene nicht mit normalen RS-485 
Transceivern benutzen, um eine Kollision bzw. eine Busbelegung zu 
Erkennen?

Gruss,
Christian

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anders ausgedrückt: Maxim hat einen RS485-Tranceiver so dressiert, dass 
er beinahe wie ein CAN-Transceiver arbeitet.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte funktionieren, aber wohl nur wenn der Leitungswiderstand zwischen 
2 Nodes gross genug ist, um den Transceiver im Konfliktfall 
abzuschalten.

Ersatzdarstellung in diesem Fall:


                VCC
                 +
                 |
                 |
                .-.
                | |
  Treiber 1     | |R(i)
                '-'
                 |
                 |         _
       Sense o---o--------|___|--------o---o Sense
                        R(Leitung)     |
                                       |
                                      .-.
                                      | |
                                      | |R(i)   Treiber 2
                                      '-'
                                       |
                                       |
                                      ===
                                      GND


Ist R(Leitung) << R(i) dann bleiben A und B in der Mitte hängen und 
keiner schaltet ab.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine halbwissende Meinung:

So recht verstanden habe ich diesen Chip nicht. Er versucht zu senden, 
macht es dann davon abhängig ob er sich durchsetzen kann. Leider gibt es 
keine Rückmeldung darüber. Man kann aber wohl die Daten zurücklesen und 
vergleichen.

RS485 ist kein Open Collector wie z.B. I²C, wo in eine Richtung einer 
klar gewinnt, man bei Kollisionen das Low des anderen sehen kann, 
während man selbst den Bus High floaten lassen will.
Stattdessen ist RS485 eine sauber mit der richtigen Impedanz getriebene 
und terminierte differenzielle Doppelleitung. 
Elektrisch/übertragungstechnisch ist das ideal.

Kollisionen sind eventuell nur indirekt erkennbar. Ich lese zwar alle 
meine gesendeten Pakete mit, verifiziere sie, höre mich selbst aber auch 
am lautesten. Bei mir kann der selbst getriebene Pegel trotz Kollision 
noch lesbar sein, am letzten Empfänger auf der anderen Seite mag das 
anders aussehen. Diese Situation könnte dein Chip vermeiden, da er sich 
zurückzieht. Was aber, wenn die andere Seite das gleiche tut?

Unabhängig von Spezial-Hardware werden bei mir alle Pakete mit CRCs 
versehen und vom Empfänger quittiert. Beim Ausbleiben der Quittierung 
gibt es einen Retransmit-Mechanismus.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.