Hallo, ich muss von einem µC aus mehrere digitale Ausgänge (ca. 100 Stk) zur Ansteuerung von Relaiskarten zur Verfügung stellen. Dafür dachte ich, dass ich einen µC als Master verwende. Er steuert über einen Bus dann Slaves an. Jede Relaiskarte besitzt 16 Relais. Demzufolge benötige ich für die 100 Relais 7 Relaiskarten. Die einzelnen Relaiskarten soll in mehrere 19"-Gehäuse eingebaut werden. Das heisst, dass der Bus nicht nur innerhalb geschlossener Gehäuse geführt wird, sondern auch ausserhalb. Ich schätze, dass die Kabellängen zwischen den Slaves bis zu einem Meter betragen kann. Bislang dachte ich an UART. Die RXD mehrerer Slave-AVRs verbunden und an den TXD des Master-AVRs gehängt. Damit würde aber nur eine unidirektionale Kommunikation möglich sein. Ich will aber definitiv eine bidirektionale kommunikation. Kann mir jemand hierfür etwas empfehlen? Danke matt
Ich denke das mit dem Bussystem hat sich erledigt. Ich glaube ich mache das mit Schieberegistern...
Matt B. schrieb: > Ich denke das mit dem Bussystem hat sich erledigt. Ich glaube ich mache > das mit Schieberegistern... Und damit hast du dann die bidirektionale Kommunikation, die dir so dermaßen wichtig war? Geh' sterben, Troll!
CAN. Bidirektional, störsicher auch bei langen Leitungen, supereinfach zu verwenden.
Bei der Verwendung von AVRs als Slave wollte ich sicher gehen, dass die Daten korrekt an diese übertragen wurden. Deswegen die bidirektionale Kommunikation. Bei der Verwendung von Schieberegistern sollte die korrekte Übertragung der Daten auf Grund der geringen Komplexität gewährleistet sein. Kein Grund gleich mit solchen Sätzen > Geh' sterben, Troll! um sich zu werfen!
:
Bearbeitet durch User
Matt B. schrieb: > Bei der Verwendung von Schieberegistern sollte die korrekte Übertragung > der Daten auf Grund der geringen Komplexität gewährleistet sein. Schieberegister sind anfällig gegenüber "Klingeln" auf längeren Verbindungsleitungen, da dadurch auch leicht zusätzliche Taktflanken erkannt werden können. Auf jeden Fall solltest Du bei solch einem Aufbau mit geeigneten Leitungstreibern zwischen den Baugruppen arbeiten. Das Problem wäre etwas entschärft, wenn sich alle Schieberegister auf einem Haufen, d.h. der Hauptplatine, befinden und dementsprechend viele Einzelsignale verteilt werden.
Matt B. schrieb: > Bei der Verwendung von AVRs als Slave wollte ich sicher gehen, dass die > Daten korrekt an diese übertragen wurden. Deswegen die bidirektionale > Kommunikation. > > Bei der Verwendung von Schieberegistern sollte die korrekte Übertragung > der Daten auf Grund der geringen Komplexität gewährleistet sein. Nein, ist sie nicht. Das ist nämlich keine Frage der "Komplexität", sondern eine Frage der Frequenzen und Leiterlängen. Im übrigen kannst du ein Schieberegister samt "bidirektionaler" Kommunikation auch mit AVRs als "Slave" haben. Nimmst du einfach das USI (was nix anderes als ein Schieberegister und ein Zähler ist), schließt den Eingang des ersten Slave an den Ausgang des Masters an, dann jeweils den Ausgang eines Slave an den Eingang des nächsten und den Ausgang des letzten an den Eingang des Master. Schon hast du eine klassische "token ring"-Topologie. Problematisch wäre hier allerdings die Distribution des Taktes, denn der müßte leider sternförmig vom Master zu jedem einzelnen Slave verteilt oder mit einem zusätzlichen (externen) Logikgatter bei jedem Slave ebenfalls zum Ring gemacht werden. Das gleiche Problem hast du allerdings mit Scheiberegistern ebenfalls... Mittels gleichartiger Verwendung von UARTs wäre aber auch dieses Problem gelöst, da gibt's dann nämlich keine Taktleitung mehr, außerdem entspannt eine UART die Timing-Anforderungen an die Software durch das "beidseitige" Double-Buffering ganz erheblich.
Mitsubishi Melsec oder ne S7 dann hast du so Probleme nicht :-) Ich würde die Schieberegister vergessen. Wenn es unbedingt sein muss, dann alle auf eine Hauptplatine und mit Leistung weiter fahren.
Wenn 8 * 16 Ports reichen einfach sowas nehmen: http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP23017 Alternativ wenn mehr benötigt werden die SPI Version: http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP23S17 Da muss halt für jede Erweiterungskarte noch ein eigenes CS vom Controler generiert werden.
Habe mal so etwas ähnliches gemacht. Anstatt Schieberegister dann aber intelligentere Schieberegister, namens ATmega8. Ich verwende 3 Leitungen, DATA, CLK und LOAD (siehe auch MAX7219) und schiebe immer 32 Bit durch alle Boards. 1 Byte Board-Adresse, der Rest Nutzdaten, eine Prüfsumme könnte man sich auch überlegen, war bei mir aber nicht nötig. Es werden ständig zyklisch alle Boards angesprochen und bits verschoben, sollte also mal etwas nicht ankommen, dann eben in der nächsten Runde. Bidirektional mit Master würde sich RS485 anbieten, da kann man die UARTs benutzen und etwas MODBUS ähnliches realisieren. Und dann natürlich wie schon erwähnt wurde CAN. Wahrscheinlich aber Overkill für diesen Fall.
Irgendwer schrieb: > Alternativ wenn mehr benötigt werden die SPI Version: > http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP23S17 > Da muss halt für jede Erweiterungskarte noch ein eigenes CS vom > Controler generiert werden. Den benutzen wir, störfest ist anders. CAN wurde ja schon genannt, wenn Du Dich da rein nicht einarbeiten willst und den UART nutzen möchtest, nimm RS-485.
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.