Hallo, ich habe eine Frage, ich habe 6 Sensoren selber gebaut, jeweils mit einem Atmega1284P. Die Kommunikation eines einzelnen Sensors mit einem Computer wurde mit UART realisiert und klappt hervorragend in beide Richtungen. Nun brauche ich 6 Sensoren die mir, wenn angefragt ein bestimmtes Messergebnis bereitstellen. Das ganze soll über eine einzige Leitung funktionierten (1xTxD, 1xRxD) alle Sensoren sind dann an der gleichen Leitung. Macht das Probleme, entstehen dann zu viele Fehler? Ich würde dann einen bestimmten Befehl losschicken den nur ein bestimmter Sensor versteht, so das auch nur dieser danach Antwortet. Das ganze ist halt nicht so einfach, da ich demnächst keine neue Platine entwerfen kann. Die weitere Option wäre in meinen Augen halt noch, einen weiteren µC zu verwenden der 6 verschiedene UART hat und dann die Daten sammelt und dann einzeln weitergibt. Ist das vielleicht besser? Mir ist klar, dass es Intelligentere Lösungen gibt (Bussysteme wie SPI und Co) Aber die Hardware ist nunmal fest und an der Software will ich nicht viel ändern. Eine weitere kleine Platine als Datensammelstelle sollte aber machbar sein, ist ja nicht viel bei. Vielen Dank
Alle TX der Sensoren auf eine leitung ist nur dann eine gute Idee, wenn die Übertragungshardware busfähig ist. Darüber hast Du nix geschrieben. Verwendest Du RS232? Dann gehts nicht so einfach.
Kannst du nicht alle 6 Sensoren an einen µC anschliessen? Du hast doch da ein halbes Rechenzentrum zur Verfügung. Ansonsten: Wenn du das elektrisch richtig machst, kann man schon mehrere UART Teilnehmer an einen 'gemeinsamen Bus' hängen. Aus Sicht der Sensorrechner: Die Rx Leitung kannst du zusammenfassen. Bei den Tx Leitungen musst du eben sicherstellen, dass einer die Leitung auf negativen Pegel ziehen kann, während die anderen dagegen halten. Du brauchst also im Prinzip eine UND-Schaltung, bei der die 6 µC nur gemeinsam die Leitung zum µC 'hochhalten' können. (Bei einer TTL Uart, bei einer richtigen RS232 natürlich andersrum und du brauchst ein OR)
Geht schon, insbesonders als single-master. Allerdings kannst du eben nicht alle Tx der slaves ohne weiteres auf eine Leitung packen, das funktioniert nicht. Muss dann so eine Art wired-OR sein und verringert die Störfestigkeit. Was du ohne Hardware-Änderung machen kannst: eine Kette aufbauen. D.h. -Tx Master an Rx 1.slave. -Tx 1.slave an Rx 2. slave usw. Dann musst du nur noch dafür sorgen, dass die Pakete durchgereicht werden. Ansonsten: eben was busfähiges nehmen (RS485-Treiber).
Ja benutze RS232. Hmm ist dann wohl doch nicht so einfach .... dann werd ich wohl die Daten einfach sammeln. Die Idee mit der Kette finde ich auch nicht schlecht. Ist aber vielleicht etwas umständlich wenn ich nur einen bestimmten Sensor abfragen will. Ich überleg mir mal sowas wie ne Datensammelstelle dann kann ich bei RS232 bleiben. Danke :-)
André R. schrieb: > Ja benutze RS232. > > Hmm ist dann wohl doch nicht so einfach .... dann werd ich wohl die > Daten einfach sammeln. Die Idee mit der Kette finde ich auch nicht > schlecht. Ist aber vielleicht etwas umständlich wenn ich nur einen > bestimmten Sensor abfragen will. Für deinen PC ändert sich nichts. Der schickt weiter seine Abfragen raus. Jeder Sensorrechner empfängt auf der einen UART die Abfrage, sieht nach ob sie für ihn ist und wenn nicht, schickt er sie auf der anderen UART wieder raus. genauso in der umgekehrten Richtung: empfängt er was an der anderen UART, gibt er es auf er ersten wieder aus. Wie beim Stille-Post Spiel. Nur dass keine Information verloren geht.
In der Tat, so schlau war ich nicht ;-). Das ist dann ja wohl das einfachste immer schön weiterreichen bis jemand damit was anfangen kann. Top. Danke :-)
Es gibt da noch eine Möglichkeit: Beitrag "Re: Arduino RX und TX über einen Draht" mfg mf PS: Die einzelnen Busteilnehmer brauchen dann natürlich Adressen. Ein Protokoll scheinst du ja sowieso zu haben.
@crazyhorse: Genau genommen beschreibst Du einen Ring, denn Tx vom letzten Slave geht ja wieder zurück zum Master. Da der ATmega1284P zwei USARTs hat, wäre aber auch eine echte Kette möglich. Beide Varianten haben Vor- und Nachteile: Beim Ring ist die Latenz konstant, egal welcher Sensor abgefragt wird (nimmt aber natürlich mit der Anzahl der Sensoren zu), bei der Kette hängt die Latenz davon ab, wie viele Sensoren sich zwischen dem PC und dem angefragten Sensor befinden. Wenn beim Ring ein Sensor ausfällt, können auch alle anderen nicht mehr abgefragt werden, während bei einer Kette nur die Sensoren wegfallen, die aus Sicht des Masters "hinter" dem defekten liegen.
Latenz ist mir egal, da ich keine Probeleme bekomme, selbst wenn das Signal ein paar Sekunden brauchen sollte.
André R. schrieb: > Das ganze soll über eine einzige Leitung > funktionierten (1xTxD, 1xRxD) alle Sensoren sind dann an der gleichen > Leitung. Macht das Probleme, entstehen dann zu viele Fehler? Du könntest, wie schon genannt, die Busleitung als "wired or" ausführen. (Die Sender sind über eine open collector-Stufe angekoppelt.) Nachteil: Die Flankensteilheit L->H wird nur über den oder die Pullup-Widerstände an den Stationen bestimmt. Je nach Leitungskapazität wirst du nicht über wenige kBit/s herauskommen. Oder du verwendest RS485-Treiber, die sind busfähig. Allerdings muss jede Baugruppe vor dem Senden den Transceiver auf "Senden" umschalten (und das nach dem letzten gesendeten Byte wieder zurück nehmen). Generell gilt: "Spontanes Senden" geht nicht. Entweder machst du eine Station zum Master, die die Slaves pollt, oder du implementierst ein "Token passing"-System. Vor gut 20 Jahren hatte ich so was mal für die Vernetzung von mehreren Kartentelefonen in einem Krankenhauszimmer implementiert. Damals hatte ich ein Master-Slave-System verwendet. Neue Slaves konnten sich anmelden und für Wartungszwecke war es sogar möglich, einen speziellen Slave zum neuen Master und den alten Master temporär zum Slave zu machen. Ich müsste mal die alten Sourcen durchsehen. So fürchterlich viel Code war das gar nicht. Grüße Stefan
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.