UART parallel schalten

Gast #4704287
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?
Angehängte Dateien:
#4704292
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.
Gast #4704303
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).
Gast #4704321
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.
Gast #4704326
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.
Gast #4704331
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.
Gast #4704338
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.
Gast #4704348
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.
#4704650
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.
#4704680
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
Gast #4704791
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.
Gast #4705447
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.
#4705457
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.
Gast #4705560
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren