Forum: Mikrocontroller und Digitale Elektronik Frage zu Multiprozessor-Kommunikation


von Ralf (Gast)


Lesenswert?

Hi,

Hab ne Frage zur Multiprozessor-Kommunikation bei µCs bei Verwendung
des normalen seriellen Interfaces (also kein SPI, I2C, usw.).

Wird das überhaupt noch gebraucht in Anbetracht der anderen
Schnittstellen (eben SPI, I2C, usw.)?

Wie funktioniert das Senden vom Slave zum Master? Da die
Multiprozessor-Kommunikation ja mit 9-Bit-Übertragung arbeitet und das
9.Bit die Unterscheidung zwischen Adresse/Daten signalisiert, wie ist
das 9.Bit vom Slave zum Master eingestellt? Immer auf Daten, oder wie?
Oder kann man es als Paritätsbit verwenden???

Ralf

von Michael W. (miwitt001)


Lesenswert?

Hi,

das braucht man z.B. bei der Kommunikation über RS485. Die
Treiberbausteine schließt man einfach an die serielle an und schaltet
den AVR auf 9Bit. Das neunte Bit vom Slave braucht man z.B. immer dann
wenn man einen Master und mehrere Slaves hat. Dann hat das 9. Bit am
Slave im Prinzip die selbe Funktion wie beim Master, d.h. es
signalisiert eine Adresse. Damit teilt dann der Slave mit, an welchen
MC er Daten schicken will.

mfg Michael

von Ralf (Gast)


Lesenswert?

Ah, den RS485-Fall hab ich gar nicht bedacht!!! Danke für den Tip. Und
was macht das 9.Bit in Richtung Slave --> Master?

Ralf

von miwitt001 (Gast)


Lesenswert?

Der Slave gibt damit an an welchen anderen Controller er Daten schicken
will. D.h. wenn er Daten an den Master schicken will, setzt er Bit9 und
sendet die Adresse des Master. Dann wird das 9.Bit gelöscht und er
sendet die Daten. Wenn er an einen anderen Slave Daten senden will,
setzt er eben Bit9, sendet die Adresse und dann mit gelöschtem Bit die
Daten. Wenn er fertig is, sendet dann der Master die Adresse eines
anderen Slave, woraufhin der angesprochene Slave anfängt Daten zu
senden usw...

mfg Michael

von Ralf (Gast)


Lesenswert?

Aha, das heisst, wenn der Slave einem anderen Slave Daten senden will,
sendet er diese mit der Slave-Adresse an den Master, und dieser gibt
sie weiter an den anderen Slave...
Anders kann es ja nicht klappen, weil ja Rx und Tx der Slaves
miteinander verbunden sind, nur der Master erhält auf Rx das Tx der
Slaves und umgekehrt...

Ralf

von miwitt001 (Gast)


Lesenswert?

Beim RS485 Bus sind die TX und RX Leitungen nicht direkt verbunden. Es
kann nur immer ein Controller gleichzeitig den Bus belegen. Dafür
braucht man dann die Bustreiber. Jeder Controller muss dem Treiber
angeben ob er gerade Senden oder Empfangen will. Deshalb muss der
Master das ganze auch koordinieren, weil immer nur einer Senden darf,
sonst kommt nur Quatsch raus. Er erteilt sozusagen jedem Slave durch
Senden seiner Adresse die Erlaubnis zu senden. Daraufhin sendet der
angesprochene Slave eine Adresse und seine Daten und geht dann wieder
auf Empfang. Wenn er fertig ist, schickt der Master dem nächsten Slave
die Erlaubnis zu senden, und so weiter... Also es kann jeder Controller
jedem anderen Daten schicken. Wie das ganze genau abläuft hängt eben vom
Protokoll ab, das nicht festgelegt ist. Die Methode mit den 9 Bits ist
nur eine Möglichkeit.
Wenn du dich genauer darüber informieren willst, hier ist alles recht
schön erklärt:
http://www.elektronik-projekt.de/include.php?path=content/articles.php&contentid=16&PHPKITSID=d0c9b1ab0006f1d00ce0804a3059e635

mfg Michael

von Ralf (Gast)


Lesenswert?

Danke, ich werd mir den Link mal ansehen...

Du sagst, das Protokoll an sich ist nicht festgelegt. Das bedeutet
dann, es kann auch wie bei einer "normalen" Verbindung mit
Software-Handshake usw. gearbeitet werden?

Ralf

von miwitt001 (Gast)


Lesenswert?

Ja du kannst im Prinzip verwenden was du willst, du musst nur irgendwie
dafür sorgen, dass nicht 2 Controller gleichzeitig zu senden anfangen.

mfg Michael

von Ralf (Gast)


Lesenswert?

Aha, jetzt wird das ganze langsam klarer...

Da kommt aber noch eine Frage auf, in deinem Link (der übrigens sehr
gut ist!), wird leider nicht erklärt, wie man ein
RS485-Multi-Master-Netzwerk (_!full-duplex!_) aufbaut... Oder gibts da
nur einen Master, der die Daten von Slave zu Slave weiterleitet? Anders
kann es nicht klappen, so wie ich das sehe!!! Bei halb-duplex versteh
ich das noch...

Ralf

von miwitt001 (Gast)


Lesenswert?

Ich bin mir nicht ganz sicher, weil ich das noch nie gemacht habe, aber
ich glaube bei Full Duplex is das dann so, dass die Empfangsleitungen
der Slaves zu einem Bus zusammengeschaltet werden und mit dem Sender
des Masters verbunden werden und die Sendeleitungen der Slaves mit dem
Empfänger des Masters verbunden werden. Das heißt, dass der Master als
einziger Controller immer senden darf und seine Daten von allen Slaves
empfangen werden. Die Slaves leiten dann alle ihre Daten über den
Master zu den anderen Controllern. Der Master kann dann in diesem Fall
gleichzeitig Senden und Empfangen.

Multimaster heißt glaub ich nur, dass sich die Master einigen, wer der
tatsächliche Master ist (und alle anderen als Slave agieren) und falls
dieser ausfällt einfach der nächste einspringt.

mfg Michael

von Michael (Gast)


Lesenswert?

Ich würde Dir empfehlen, alle µPs mit CAN-Bus Treibern an RX/TX zu
versehen und halbduplex zu übertragen. Anschließend hast Du die
Freiheit, Master und Slave beliebig zu handhaben oder konstant zu
lassen. Die Treiber sind kollisionsfest, störarm und robust und taugen
zudem auch für lange Leitungen.
Das Multiprozessorprotokoll mit 9. Bit ist auch zu empfehlen, da die
Belastung nicht adressierter µPs dadurch gering bleibt.

von Ralf (Gast)


Lesenswert?

Okay, danke, werd mich jetzt erstmal mit den gesammelten Infos
auseinandersetzen...

Ralf

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.