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