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?
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.
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).
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
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?
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.
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.
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.
>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.
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.
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.
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.
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
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
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.
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.
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.
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.
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.
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.
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.