mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART parallel schalten


Autor: Demo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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).

Autor: Demo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Warum kein I2C?
Alternativ: RS485


Oder einen "Token Ring" ähnliches System aufbauen.

Autor: holger (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
>Warum kein I2C?

Weil man so einen Schrott nicht braucht.

Autor: Adrenalin (Gast)
Datum:

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

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

Autor: Demo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
>Wired and so richtig? :-)

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>RX schaltest du alle zusammen

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

Autor: Wolfgang (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
1 lesenswert
nicht 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).

Autor: Demo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Demo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, Quark. Der Tx zieht die Leitung ja auf low...

Autor: holger (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Demo (Gast)
Datum:
Angehängte Dateien:

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

Autor: Demo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Baendiger (Gast)
Datum:

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

Autor: Robin E. (why_me)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (amiga)
Datum:

Bewertung
1 lesenswert
nicht 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
Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: m.n. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Demo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Arduino Fanboy D. (ufuf)
Datum:

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

Danke + Tschüß

Autor: M. K. (sylaina)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander S. (alex998)
Datum:

Bewertung
0 lesenswert
nicht 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...

Hier wird der MAX399 als MUX benutzt.

Autor: guest (Gast)
Datum:

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

Autor: Demo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Demo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan M. (phreakshow)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.