Forum: Mikrocontroller und Digitale Elektronik Hilfe zur Auswahl eines geeigneten Bus-Systems


von Matt B. (mattb)


Lesenswert?

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

von Matt B. (mattb)


Lesenswert?

Ich denke das mit dem Bussystem hat sich erledigt. Ich glaube ich mache 
das mit Schieberegistern...

von c-hater (Gast)


Lesenswert?

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!

von Dr. Sommer (Gast)


Lesenswert?

CAN. Bidirektional, störsicher auch bei langen Leitungen, supereinfach 
zu verwenden.

von Matt B. (mattb)


Lesenswert?

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
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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.

von Irgendwer (Gast)


Lesenswert?

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.

von Cube_S (Gast)


Lesenswert?

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.

von GB (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.