Ich versuche, eine "Daisy Chain" mit mehreren Arduinos und MAX485-Transceivern aufzubauen. An allen Platinen ist ein Temperatursensor angebracht. Eine 9V-Batterie versorgt alle Platinen in der Kette.
Ich versuche, einen Weg zu finden, um die physische Position der verschiedenen Boards in der Daisy-Chain zu identifizieren, zum Beispiel BoardA = erstes, BoardD = zweites, BoardB = drittes usw.
Ich könnte dies manuell tun, indem ich mir bewusst wäre, wo ich jede Platine in der Linie anschließe. Dies ist jedoch anfällig für menschliche Fehler und ich möchte dies automatisch tun. Außerdem nehme ich gerne zufällig Boards, um Netzwerke aufzubauen, wann und wo immer ich will.
Um die Boards im Netzwerk zu identifizieren, könnte ich eine Abfrageschleife im Masterboard erstellen, um alle möglichen Namen aufzurufen und eine Antwort der angeschlossenen Boards zu erhalten. Was ich suche, ist auch eine Antwort darauf, wo sie sich im Netzwerk befinden.
Ich dachte daran, den Spannungs- / Stromabfall als Indikator dafür zu messen, wie nahe / weit sie vom Master entfernt sind. Ich bin mir jedoch nicht sicher, ob der Abfall groß genug ist oder der ADC im Arduino genau genug ist.
Darüber hat sich wohl schon mal jemand Gedanken gemacht, vielleicht gibt es dafür sogar fertige Chips. Ich bin kein Elektroniker, sorry für mein begrenztes Wissen.
Bearbeiten, 14.10.2018
Mehr Klarstellung; sagen, dass Sie das folgende Beispiel haben:
Alle Slave-Boards befinden sich im „Listen“-Modus und warten darauf, vom Master aufgerufen zu werden. Der Master führt eine Abfrageschleife durch, um festzustellen, welche Slaves sich auf dem Bus befinden. Es fragt nach A, B, C, D, E usw. Die Slaves werden den Anruf des Masters überprüfen. Damit dies funktioniert, muss ich jedem Slave einen eindeutigen Namen/eine eindeutige Adresse in der Software zuweisen, was völlig in Ordnung ist.
Was ich vermeiden möchte, ist, den Namen jedes Sklaven zu überprüfen, wenn ich ihn ins Feld stelle. Daher ist es notwendig, ihre relative Position in der Busleitung in Bezug auf die Master- und die anderen Slave-Platinen herauszufinden.
Ist das etwas ähnliches Maxim DS28EA00 ? Beachten Sie, dass mich nicht nur die Temperatur interessiert. Ich verwende Temperatursensoren als Proof of Concept. Ich könnte damit Druck, Beschleunigung usw. messen.
@Transitor In diesem Fall Daisy Chain = Partyline oder Bustopologie. Ich weiß nicht, ob ich die RS-485 in Reihe schalten kann. Wenn ja, könnte ich den Namen jedes Geräts erfassen, wenn die Daten über sie übertragen werden? Dies hat den Nachteil, dass beim Ausfall einer Slave-Platine der Rest der Leitung ebenfalls stirbt.
@stark Kannst du die digitale Pin-Idee näher erläutern? Beachten Sie, dass alle Bretter zwischen 1-3 Meter voneinander entfernt sind.
@ Andy aka Kannst du das näher erläutern? Könnte dies in der Bustopologie funktionieren?
@TimWescott Es ist eine Bustopologie. Vielleicht habe ich den Daisy-Chain-Begriff falsch verwendet? Ist es möglich, mit RS-485 eine echte Daisy-Chain durchzuführen?
Es ist eine Busstruktur. Per Definition spielt es keine Rolle, wo jedes Gerät physisch platziert ist.
Wenn Sie eine geografische Adressierung benötigen, können Sie diesen Ansatz ausprobieren:
Schließen Sie den Master-Knoten an einem der Enden des Busses an
Jeder Knoten muss eine zusätzliche Leitung haben (d. h. eine Eingangs- und eine Ausgangsleitung), die zu den benachbarten Knoten führt (ein einfacher GPIO reicht aus).
Wenn diese Leitung einen bestimmten (Standard-)Zustand hat, bleibt der Knoten still und ignoriert den gesamten Datenverkehr.
Beim Einschalten hat jeder Knoten keine Adresse. Der Master zieht den zusätzlichen Draht auf Low (oder High), wodurch der erste Knoten auf dem Bus aktiviert wird. Sendet einen "set address"-Befehl auf den Bus (der keine Zieladresse hat) - natürlich reagiert nur der erste Knoten auf diese Nachricht.
Der Master sendet eine "enable control line" an Knoten 1 (der jetzt eine Adresse hat), wodurch Knoten 2 den Bus abhört.
Der Master sendet erneut einen „set address“-Befehl (der von Knoten 1 ignoriert wird, da er bereits eine Adresse hat), der die Adresse von Gerät 2 einstellt.
Spülen und für alle Knoten wiederholen.
Suchen Sie nach 1Wire, wenn Sie daran interessiert sind, Temperatur zu messen, mit vielen Sensoren hier und da! https://www.maximintegrated.com/en/app-notes/index.mvp/id/148 Es ist nicht RS485, aber einfacher zu implementieren. Und verwenden Sie ein kleines Programm, um jeden 1Wire-Knoten einzeln zu aktivieren und seine ID zu lesen, dann haben Sie eine Tabelle mit physischen IDs im Vergleich zu logischen. Natürlich können Sie dasselbe mit RS485 tun, aber Sie benötigen mehr Drähte! In diesem Fall sollten Sie neben jedem Sensor einen kleinen Schaltkreis haben, damit jedes Mal, wenn Sie Ihren Schaltkreis einschalten, eine solche erklärte Tabelle im Master eingebaut wird.
Transistor
Stark
Andi aka
TimWescott
Benutzer76844
Gabriel
Gabriel
Benutzer76844
Gabriel