Forum: Mikrocontroller und Digitale Elektronik Usart im Multimaster Bus-Betrieb


von Axel R. (axelroro)


Lesenswert?

Hallo Forumsteilnehmer,
ich vermute schon, das wird ein paar aufgerollte Fussnägel verursachen 
:-)

Egal, ich stell die Frage mal. Direkt dazu gefunden habe ich jetzt 
nichts per Suche.

Im Vorfeld möchte ich bitten, einmal die bekannten Lösungen ala RS485 
und I2C ausser acht zu lassen. Betrachtet das einfach bitte einmal als 
Machbarkeitsüberlegung.

Folgendes Szenario:
- 8-10 uC's (Atmega 16, 32, 644p) möchten miteinander in einem 19 
Zoll-Gehäuse reden (kurze Wege)
- Kontext ist Hausautomatisierung, d.h. Geschwindigkeit ist kein Thema, 
auch die Häufigkeit hält sich damit sehr in Grenzen. Sagen wir mal 
9600Bd.
- TX und RX aller uC's hängen einfach parallel an EINER einzigen Leitung
- Zwischen TX Pin und der EINEN Leitung ein 1k (o.ä.) Ohm Widerstand für 
den Fall einer Kollision (welche sehr unwahrscheinlich sein soll).
- PIN TX wird auf hochohmig geschaltet, wenn die uC's nichts zu sagen 
haben. RX soll aber schon noch zuhören (hmm, geht das? Im Bitbang Falle 
sicher, aber auch bei Benutzung USART .. muss mal schauen).
- Kollision wird per Protokoll abgefangen.
- Multimaster Betrieb, d.h. jeder uC mag mal was von sich aus sagen 
wollen.

Müsste doch gehen in diesem Szenario, oder mache ich hier irgendwo den 
entscheidenden Denkfehler? Wie gesagt, klar gibts bessere Lösungen - 
aber usart ist eben so schön einfach.

Bitte um Euere Kommentare (bitte nett sein) !

Grüsse
Axel

von Peter D. (peda)


Lesenswert?

Multimaster schreit nach I2C oder CAN, die sind dafür gemacht.

Aber wenn Du Dir unbedingt am Protokoll die Zähne ausbeißen willst, 
bitte. Es sind ja dann Deine grauen Haare.


Für UART-TXD parallel schalten nimm besser wired AND (Dioden + Pullup).
Dann hast Du einen dominanten Pegel und kannst eine Arbitrierung 
vornehmen.

Ich hab sowas schonmal gesehen, da werden dann die Adreßbits als ganze 
Bytes übertragen (1 = 0xFF, 0 = 0x00) und der unterliegende Master 
bricht nach dem ersten falschen Adreßbit ab.


Peter

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

klar geht das, je nach Umgebung direkt angeschlossen oder auch mit 
Leitungstreiber für was auch immer, in dem Fall brauchst du halt noch 
einen Pin fürs Tristaten.

Die meisten seriellen Schnittstellen sind allerdings bloss UARTs, 
besonders die im PC. Ich würde mich daher mit synchronen Protokollen 
garnicht erst abgeben, die machen die Sache bloss kompliziert - 
angefangen damit, dass du zum Mithören einen entsprechenden Analysator 
brauchst, für asynchron reicht Hyperterminal.

Gruss Reinhard

von Tauwetter (Gast)


Lesenswert?

>... in dem Fall brauchst du halt noch einen Pin fürs Tristaten.

Nicht einmal das! AVRs können den TX-Ausgang intern abschalten.
Schöner sind allerdings CAN-Bus Treiberbausteine zur Entkopplung, die 
auch nicht deaktiviert werden müßten und kollisionsfest sind.

µC-Pins dirket zu verbinden, würde ich nur auf einer Leiterplatte ohne 
Steckkontakte machen: Stichwort ESD.

von Axel R. (axelroro)


Lesenswert?

@Peter - hat sich erledigt, "wire-and" gefunden und verstanden.

Danke und Gruss an alle.

Axel

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
Noch kein Account? Hier anmelden.