ÜBERARBEITET: Ich habe eine Master-Controller-Platine mit vier Sammelschienen (+, - und zwei Signalleitungen), siehe Abbildung unten. Ich habe Modulplatinen AC (oder 10 oder 15 davon) mit jeweils MCUs und eindeutigen Kennungen, die in unbekannter Reihenfolge in die Buchsen eingesteckt werden (und möglicherweise alle vorhanden sind oder nicht). Wie könnten die Modulplatinen mit der Hauptsteuerung kommunizieren, damit die Hauptsteuerung die Reihenfolge der Modulplatinen kennt? (Im Digramm wäre es [C, A, B]
.) Die zwei gezeichneten "Signal" -Linien könnten neu konfiguriert werden (oder zusätzliche Komponenten / Schaltungen hinzugefügt werden).
ORIGINAL: Ich habe eine Master-Controller-Platine mit den Buchsen 0-5. Ich habe Modulplatinen AF (dies sind auch die eindeutigen IDs, entweder über eine MCU oder auf andere Weise), die in einer unbekannten Reihenfolge in die Buchsen eingesteckt werden (und möglicherweise alle vorhanden sind oder nicht). Ich frage mich, ob es für den Master-Controller eine einfache Möglichkeit gibt, die Reihenfolge der Modulplatinen zu ermitteln. (Im Digramm wäre es [C, E, A, B, F, D]
.) Es ist eine "Signal" -Linie gezeichnet, aber es könnten zusätzliche hinzugefügt werden (oder zusätzliche Komponenten / Schaltungen).
quelle
Antworten:
In den Kommentaren sagen Sie: -
Wenn beim Einschalten des Controllers keine Karten eingelegt oder entfernt werden, muss die Reihenfolge nur beim Start überprüft werden. Dies kann mit einer Signalleitung erfolgen, die an jedem Steckplatz aufgeteilt ist, wobei jede Karte das Signal an den nächsten Steckplatz weiterleitet, sobald es identifiziert wurde. Steckplätze ohne Karten müssen das Signal ebenfalls weiterleiten.
Hier ist, wie es mit Logikgattern gemacht werden könnte.
simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab
Jeder Steckplatz verfügt über ein UND-Gatter auf der Rückwandplatine und einen Pullup-Widerstand am Eingang "Fertig", sodass das Signal "ID" an den nächsten Steckplatz weitergeleitet wird, auch wenn keine Karte vorhanden ist. Beim ersten Einschalten ziehen alle Karten ihre 'Done'-Ausgänge auf niedrig, um zu verhindern, dass das ID-Signal zum nächsten Steckplatz gelangt. Jede Karte wartet dann darauf, dass ihr ID-In-Signal hoch geht, was darauf hinweist, dass der Controller es identifizieren möchte.
Der Controller zieht das ID-Signal im ersten Steckplatz nach oben und spricht dann mit der Karte, die antwortet. Sobald die Karte identifiziert wurde, wird die Ausgabe "Fertig" hoch und ignoriert dann weitere ID-Anforderungen, sodass die nächste Karte antworten kann. Dies wird fortgesetzt, bis keine Karte mehr antwortet. Dann weiß der Controller, dass alle Karten berücksichtigt werden, und die Reihenfolge der Karten ist die Reihenfolge, in der sie identifiziert wurden.
Das 'ID'-Signal kann auch eine der normalen Signalleitungen sein, sodass Sie möglicherweise nur einen zusätzlichen Pin pro Steckplatz benötigen. Wenn Sie Hunderte von Karten haben, können Gate-Verzögerungen ein Problem sein. In diesem Fall benötigen Sie 2 zusätzliche Pins pro Steckplatz (die sich möglicherweise auf gegenüberliegenden Seiten der Platine befinden). Das UND-Gatter könnte ein 74LVC1G08 sein , der in 100 Stück ~ 0,1 US-Dollar kostet.
quelle
Wenn Sie eine weitere Leitung mit hohem Widerstand pro Länge hinzufügen könnten, könnten Sie ein Ende an die positive Stromversorgung und das andere an die negative Stromversorgung anschließen. In diesem Fall kann jede Karte ihre Position messen und dem Master melden.
Eine andere Möglichkeit wäre, dass am Master diese Leitung mit bekanntem Widerstand an eine positive Stromversorgung angeschlossen wird und beim Einsetzen der Karte die negative Stromversorgung an der Leitung an ihrer Position angeschlossen wird. Der Master kann dann die Position selbst messen und die Karte anweisen, sich von dieser zu trennen Linie.
quelle
Jede Buchse hat eine Buchsen-ID - Stecker 0 hat die Stifte 1,2,3 geerdet, Stecker 1 hat nur 2 & 3 geerdet usw.
Das Plug-In-Modul verfügt über I2C und eine eindeutige I2C-Adresse und kann die ID-Pins erkennen. An den ID-Erfassungsstiften befinden sich Klimmzüge.
Der Master sendet eine Nachricht an alle möglichen I2C-Adressen. Wenn keine Antwort eingeht, ist das Modul nicht angeschlossen. Wenn eine Antwort eingeht, kann das Modul mit der Socket-ID antworten. Jetzt wissen Sie, welches Modul sich in welcher Buchse befindet.
Ein mögliches Gerät ohne Mikrocontroller an jedem Modul besteht darin, ein Gerät wie den PCF8574 und einige Jumper zur Identifizierung des Moduls zu verwenden.
Sie benötigen 2 Pins für die I2C- und log2-Pins (Anzahl der Karten) für die Socket-IDs.
(Eine weitere Option besteht darin, einen Widerstandsteiler zur Identifizierung der Buchse - als Spannung - und einen I2C-ADC an jedem Modul zur Identifizierung der Position zu haben.) - Insgesamt 3 Pins erforderlich.
quelle
Diese Art von Problem (Identifizierung der Platine und Reihenfolge der Platzierung) ist sehr häufig zu lösen.
Sie müssen weitere Informationen bereitstellen, um den besten Rat zu erhalten:
Sie können sich jedoch diese Antwort ansehen, in der vorgeschlagen wird, kleine MCUs zu verwenden, um die Informationen seriell bereitzustellen.
Beachten Sie hier, dass die Kette unterbrochen ist, wenn Sie eine Karte weglassen (aber Sie wissen nicht, wo).
Ich habe dies in einigen Projekten (Supermini-Tage) behoben, indem ich ein Reed-Relais über jede Platinenposition und einen kleinen Magneten auf jeder Platine hinzugefügt habe. Wenn die Karte in den Magneten eingesteckt ist, wird der Reedkontakt offen gehalten. Wenn die Karte entfernt wird, wird der Kontakt geschlossen und das Ein- und Ausgangssignal kurzgeschlossen.
quelle
Eine Möglichkeit besteht darin, dass jede Karte über einen Anschluss mit Überbrückungsstiften verfügt, die zu einem Sockel führen, der an das Motherboard angeschlossen wird. Diese Überbrückungsstifte werden durch festverdrahtete Verbindungen auf der Hauptplatine miteinander verbunden, die für jede Sockelposition eindeutig sind. Auf diese Weise weiß jede Karte automatisch, an welchen Sockel sie angeschlossen ist, und Sie können herausfinden, wie der Master diese Informationen von den Karten sammeln kann. Wenn Sie nur wenige Steckplätze haben, ist dies wahrscheinlich der einfachste und zuverlässigste.
- -
Eine andere Möglichkeit besteht darin, Leitungen zu haben, die NUR zwischen benachbarten Karten verlaufen, damit die Karten telefonieren und sich selbst zählen können. Dies funktioniert jedoch nicht mit übersprungenen Steckplätzen. Diese Methode erfordert etwas, um den Count-In-Prozess zu starten, z. B. einen Master oder eine Karte, die "weiß", dass es sich um die erste Karte handelt (möglicherweise einen Jumper, der angeschlossen wird, wenn er in den ersten Steckplatz der Hauptplatine eingesteckt wird, oder nur einen Jumper, den Sie manuell verwenden Schließen Sie die Karte selbst an, wenn kein Motherboard vorhanden ist.
Sie müssen auch wissen, dass die letzte Karte die letzte Karte ist. Sie können entweder eine der beiden oben genannten Jumper-Methoden verwenden, aber Sie können auch nur Timeouts verwenden, um die letzte Karte zu bestimmen (dh wenn die aktuelle Karte versucht, mit der nächsten Karte zu kommunizieren und keine Antwort erhält und eine Zeitüberschreitung auftritt) kann davon ausgehen, dass es die letzte Karte ist).
Diese Methode funktioniert am besten, wenn Sie eine fortlaufende Folge von Karten mit einer sehr großen oder beliebigen Anzahl haben. Ich habe diese Methode in einem Projekt verwendet, damit ich so viele identische Leiterplatten stapeln kann (kein Motherboard, nur Board-to-Board-Anschlüsse, damit ich Leiterplatten kontinuierlich übereinander stapeln kann), wie ich möchte, und alle zählen sich selbst ein und wissen genau Bescheid wo sie im Stapel sind.
Diese Methode ist auch ein Kinderspiel, wenn Sie bereits eine dedizierte serielle Verbindung haben, die ausschließlich zwischen benachbarten Karten ausgeführt wird, da keine zusätzliche Hardware erforderlich ist.
- -
Eine weitere (theoretische) Möglichkeit besteht darin, zwei Signalleitungen vom Master zu verwenden, die beim Vorbeifahren in jede Buchse abfallen. Eine Leitung ist nicht verzögert, während die zweite Leitung eine Verzögerungsleitung zwischen dem Ablegen in jede Buchse aufweist. Der Master sendet gleichzeitig einen Impuls über beide Leitungen und jede Karte misst die Zeitdifferenz zwischen der verzögerten Leitung und der nicht verzögerten Leitung. Dies lässt es wissen, wie weit es unten ist, und lässt es daher wissen, in welcher Buchse es sich befindet. Von dort aus können Karten vordefinierte Zeitinformationen verwenden, um zu wissen, wo sie sich auf der Leitung befinden, oder sie können einfach weit unten herausplatzen Linie sind sie zum Master und der Master kann ihre tatsächliche Reihenfolge sortieren (wenn die Entfernungen oder Verzögerungen aus irgendeinem Grund ungewiss sind). Diese Methode benötigt wahrscheinlich die wenigsten Stifte am Sockel (nur zwei). Ich denke, das Hauptproblem besteht darin, eine geeignete Verzögerungsleitungskomponente zu finden. Sie möchten wahrscheinlich eine, die mindestens zehn Mikrosekunden beträgt.
Der Hauptvorteil dieser Methode besteht darin, dass Sie Sockets überspringen können und dennoch nur 2 zusätzliche Socket-Pins für eine sehr große Anzahl von Karten benötigen (begrenzt durch den akkumulierten Zeitfehler aufgrund der Variationen in den Verzögerungsblöcken, wenn Sie weiter und weiter in der Kette sind .
simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab
quelle