Forum: Mikrocontroller und Digitale Elektronik UART parallel schalten


von Demo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe eine Frage, ob meine Schaltung so funktionieren würde wie ich 
mir das denke, oder ob ich was nicht bedacht habe.

Ich habe 5 Leitungen für Daten zur Verfügung und möchte 3 Slaves 
ansprechen. SPI fällt raus, da ich mit den 5 Leitungen nicht hinkomme, 
aber für Rx/Tx und 3 Chip-Enables würde es reichen (alle haben das 
gleiche GND-Potential).

Das Device 1 würde über Tx an alle senden und immer nur ein 
Enable-Signal auf Low legen. Die Devices 2, 3 und 4 wissen welches 
Enable Signal für sie ist, auch wenn sie die anderen belauschen, da alle 
parallelgeschaltet sind.

Das heißt bei einem Byte von Device 1 würden bei allen Slaves der 
IRQ_handler ausgelöst werden und in diesem würde ich prüfen ob die 
Enable-Leitung für den jeweilige Slave auf low ist. Nur dieser Slave 
würde mit einem Byte antworten, die anderen halten den Mund.

Würde das so funktionieren?

von Jim M. (turboj)


Lesenswert?

Demo schrieb:
> Ich habe 5 Leitungen für Daten zur Verfügung und möchte 3 Slaves
> ansprechen. SPI fällt raus, da ich mit den 5 Leitungen nicht hinkomme,
> aber für Rx/Tx und 3 Chip-Enables würde es reichen (alle haben das
> gleiche GND-Potential).

Mit einem 3-zu-8 Dekoder Chip (für die Chip Selects) würde es genau 
ausreichen. Die gibt es auch als active Low.

UART TX kann man nicht direkt kurzschließen, außer alle Chips 
unterstützen eine "Open Drain" Pin Konfiguration. Dann begrenzt der 
Widerstand übrigens die Baudrate.

von STK500-Besitzer (Gast)


Lesenswert?

Jim M. schrieb:
> UART TX kann man nicht direkt kurzschließen, außer alle Chips
> unterstützen eine "Open Drain" Pin Konfiguration. Dann begrenzt der
> Widerstand übrigens die Baudrate.

Man könnte sie mit jeweils einer Diode entkoppeln ("wired AND").
Wenn man aber sowie so Adressleitungen hat, könnte man die TX-Leitungen 
auch darüber multiplexen (wie Jim Meba schon ansprach).

von Demo (Gast)


Lesenswert?

Wie würde das dann aussehen mit dem Decoder?

Hab einen rausgesucht, aber wie es scheint braucht der 6 Leitungen A, B, 
C und G1, /G2A, /G2B.

http://www.ti.com/lit/ds/symlink/74ac11138.pdf

von Einer K. (Gast)


Lesenswert?

Warum kein I2C?
Alternativ: RS485


Oder einen "Token Ring" ähnliches System aufbauen.

von holger (Gast)


Lesenswert?

>Warum kein I2C?

Weil man so einen Schrott nicht braucht.

von Adrenalin (Gast)


Lesenswert?

holger schrieb:
>>Warum kein I2C?
>
> Weil man so einen Schrott nicht braucht.

Die Meinung eines "Fachmanns". Na dann...

von Demo (Gast)


Angehängte Dateien:

Lesenswert?

Wired and so richtig? :-)

Input high level voltage ist 1,85V, also würde eine normale Diode mit 
Vdrop 0,7 passen, da Vcc 3,3V sind. Wirkt sich das negativ auf die 
Geschwindigkeit aus?

von Wolfgang (Gast)


Lesenswert?

Demo schrieb:
> Hab einen rausgesucht, aber wie es scheint braucht der 6 Leitungen A, B,

Zum Glück hast du auch noch VDD und VSS zur Verfügung ;-)
Guck mal die Tabelle auf S.1 im Datenblatt an.

Aber du wirst wohl eher eine Multiplexer brauchen, damit du von den 3 
TX-Leitungen deiner Slaves eine auswählen kannst.

von holger (Gast)


Lesenswert?

>Wired and so richtig? :-)

Nein, die RX schaltest du alle zusammen und die Dioden
drehst du um. Wired-Or.

von holger (Gast)


Lesenswert?

>RX schaltest du alle zusammen

Hast du ja schon gemacht;) Pullup kannst du da weglassen.

von Wolfgang (Gast)


Lesenswert?

Demo schrieb:
> Wirkt sich das negativ auf die Geschwindigkeit aus?

Die Geschwindigkeit wird vom jeweiligen Sender festgelegt.
Durch den Pull-Up mit dem Wired-OR sind die steigenden Flanken deutlich 
langsamer als die fallenden, jedenfalls wenn du die Dioden richtig rum 
einbaust. Ob die Flankensteilheit für die Geschwindigkeit reicht, hängt 
von der Geschwindigkeit und der Leitungskapazität zwischen Dioden und 
RX-Master ab.

von Stefan F. (Gast)


Lesenswert?

Die Dioden müssen anders herum gedreht sein. Als Pull-Up empfehle ich 1 
bis 2,2k Ohm. Damit laufen 115200 Baud einwandfrei (vielleicht auch 
mehr).

von Demo (Gast)


Lesenswert?

Wenn ich die Dioden umdrehe, kann der Tx der Slaves doch nichts senden, 
oder?

Leitungslänge wären ca. 10, 20 und 30cm für den letzten Slave und den 
UART würde ich gerne so schnell wie möglich betreiben, am liebsten mit 
115,2k, wenns funktioniert. Würde mir die Flanken dann unterm Oszi 
anschauen dann runterdrehen, bis alles sauber übertragen wird.

von Demo (Gast)


Lesenswert?

Ach, Quark. Der Tx zieht die Leitung ja auf low...

von holger (Gast)


Lesenswert?

>Wenn ich die Dioden umdrehe, kann der Tx der Slaves doch nichts senden,
>oder?

Doch, natürlich kann er das. Den Highpegel (Ruhezustand vom UART)
macht der Pullup und der Lowpegel (über die Diode) kommt dann vom TX.
Das geht schon so. Wenn du dir noch ein etwas besseres Protokoll
ausdenkst in dem der Empänger ausgewählt wird kannst du dir sogar noch
die Enable Leitungen sparen.

von Demo (Gast)


Angehängte Dateien:

Lesenswert?

Dann würde ich es mal so aufbauen und mal schauen was für 
Geschwindigkeiten möglich sind. Danke für die Hilfe! :)

von Demo (Gast)


Lesenswert?

holger schrieb:
>Wenn du dir noch ein etwas besseres Protokoll
> ausdenkst in dem der Empänger ausgewählt wird kannst du dir sogar noch
> die Enable Leitungen sparen.

Das ist natürlich noch eine gute Idee, wobei ich mit den Enables ein 
besseres Gefühl hätte was Fehlersicherheit angeht und die 5 Leitungen so 
oder so da sind.

von Jim M. (turboj)


Lesenswert?

Demo schrieb:
> Wie würde das dann aussehen mit dem Decoder?
>
> Hab einen rausgesucht, aber wie es scheint braucht der 6 Leitungen A, B,
> C und G1, /G2A, /G2B.

Die "restlichen" Pins kommen auf statische Pegel wie GND oder VCC. 
Sollte man nach kurzem Studium des Datenblatts aber selber drauf kommen.

von Baendiger (Gast)


Lesenswert?

Warum nimmst du keine RS485 Treiber. RS485 ermöglicht genau das was du 
dort gerade bastelst.

von Robin E. (why_me)


Lesenswert?

Warum kein Multiprocessor mode? Also Uart mit 9bit und das neunte bit 
bestimmt ob es sich um Daten oder eine Adresse handelt. Je nach MCU wird 
die Adresse sogar automatisch erkannt. Nachteil wäre, dass es mehr 
Bandbreite benötigt. Dafür kommst du aber mit nur 2 Leitungen aus.

von Michael U. (amiga)


Lesenswert?

Hallo,

wäre wirklich eine spannende Frage, warum man da kein I2C nimmt.
Die Leitungslängen passen dazu und die Geschwindigkeit vermutlich auch.
Man kann auch mit SPI eine DasyChain bauen, SCK an alle 3, MOSI an MISO 
des nächsten und vom letzten wieder zum Master. Muß man eben ein paar 
Byte mehr durchschieben, dafür ist es schneller.
Sind dann 5 Leitungen SCK, MOSI, MISO, /CS, GND.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Robin E. schrieb:
> Warum kein Multiprocessor mode? Also Uart mit 9bit

Weil das eine Spezialeinrichtung ganz bestimmter Prozessoren ist, die 
meisten UARTs haben diesen Mode nicht.

Georg

von m.n. (Gast)


Lesenswert?

Georg schrieb:
> Robin E. schrieb:
>> Warum kein Multiprocessor mode? Also Uart mit 9bit
>
> Weil das eine Spezialeinrichtung ganz bestimmter Prozessoren ist, die
> meisten UARTs haben diesen Mode nicht.

Dann nenn doch mal einen Typen aus diesem Jahrtausend, der den 
Multiprocessor Modus nicht kann.

von Demo (Gast)


Lesenswert?

Robin E. schrieb:
> Warum kein Multiprocessor mode? Also Uart mit 9bit und das neunte bit
> bestimmt ob es sich um Daten oder eine Adresse handelt. Je nach MCU wird
> die Adresse sogar automatisch erkannt. Nachteil wäre, dass es mehr
> Bandbreite benötigt. Dafür kommst du aber mit nur 2 Leitungen aus.

Wie gesagt, die 5 Leitungen sind da, so oder so und mit enable ist es 
sicherer, da das ganze auch hot-plug-fähig sein soll.


@Michael
>Man kann auch mit SPI eine DasyChain bauen, SCK an alle 3, MOSI an MISO
>des nächsten und vom letzten wieder zum Master. Muß man eben ein paar
>Byte mehr durchschieben, dafür ist es schneller.
>Sind dann 5 Leitungen SCK, MOSI, MISO, /CS, GND.

Daisy chaining ist bekannt, aber nicht möglich, da die Slaves parallel 
an durchgezogenen Leitungen liegen. Da ist auch nichts mit Leitungen 
umlegen. Die 5 sind starr und die Slaves werden aufgedrückt.

von Einer K. (Gast)


Lesenswert?

Demo schrieb:
> da das ganze auch hot-plug-fähig sein soll.
Jau....

Danke + Tschüß

von M. K. (sylaina)


Lesenswert?

Demo schrieb:
> Daisy chaining ist bekannt, aber nicht möglich, da die Slaves parallel
> an durchgezogenen Leitungen liegen. Da ist auch nichts mit Leitungen
> umlegen. Die 5 sind starr und die Slaves werden aufgedrückt.

Spräche aber das nicht grade für RS485(oder I2C)? Da brauchste, wenn ich 
das recht in Erinnerung habe, nur 4 Leitungen (bzw. 3), du hättest also 
eine Leitung frei (bzw. 2). Und mit RS485 (I2C) könnest du später auch 
mal problemlos das System von 3 auf z.B. 5 Slaves erweitern.

von Alexander S. (alex998)


Lesenswert?

Sofern der TO sein Problem noch nicht gelöst hat würde ich AN 588 von 
Maxim vorschlagen:

https://www.maximintegrated.com/en/app-notes/index.mvp/id/588

Hier wird der MAX399 als MUX benutzt.

von guest (Gast)


Lesenswert?

Viele Wege führen nach Rom ...
Man kann auch CAN-Transceiver an die UARTs hängen.

von Demo (Gast)


Lesenswert?

Für RS485 bräucht man ja wieder Treiber. 115,2kbaud mit UART reichen mir 
schon dicke und vor allem ist für den UART vom µC aus schon alles da was 
man braucht.

von Einer K. (Gast)


Lesenswert?

Demo schrieb:
> und vor allem ist für den UART vom µC aus schon alles da was
> man braucht.

Nein, ist es nicht!
Es ist kein Bus.
Es ist von Hause aus weder kurzschlussfest, noch bietet es eine 
zuverlässige Verriegelung dagegen.

Es ist die falsche Kanone.
Natürlich kann man auch mit einer Teetasse einen Nagel in die Wand 
hauen.
Nur nicht mit jeder Tasse jeden Nagel in jede Wand.

von Demo (Gast)


Lesenswert?

Arduino F. schrieb:
> Es ist von Hause aus weder kurzschlussfest, noch bietet es eine
> zuverlässige Verriegelung dagegen.

Wo erwartest du Kurzschlüsse dabei? Die Slaves werden in 5-polige 
Stecker geclipst.

von Stefan  . (phreakshow)


Lesenswert?

Das ist quasi ein LIN-Bus ohne Transceiver, was ihr da baut. Warum muss 
es unbedingt der UART sein, und beispielsweise kein SPI? Den könnte man 
im MHz-Bereich betreiben.

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.