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
Warum kein I2C? Alternativ: RS485 Oder einen "Token Ring" ähnliches System aufbauen.
holger schrieb: >>Warum kein I2C? > > Weil man so einen Schrott nicht braucht. Die Meinung eines "Fachmanns". Na dann...
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.
>Wired and so richtig? :-)
Nein, die RX schaltest du alle zusammen und die Dioden
drehst du um. Wired-Or.
>RX schaltest du alle zusammen
Hast du ja schon gemacht;) Pullup kannst du da weglassen.
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.
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).
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.
Dann würde ich es mal so aufbauen und mal schauen was für Geschwindigkeiten möglich sind. Danke für die Hilfe! :)
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 nimmst du keine RS485 Treiber. RS485 ermöglicht genau das was du dort gerade bastelst.
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
:
Bearbeitet durch User
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.
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.
Viele Wege führen nach Rom ... Man kann auch CAN-Transceiver an die UARTs hängen.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.