www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Multiprozessor-Kommunikation


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Wittmann (miwitt001)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: miwitt001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: miwitt001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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=...

mfg Michael

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: miwitt001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: miwitt001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, danke, werd mich jetzt erstmal mit den gesammelten Infos
auseinandersetzen...

Ralf

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.