Ich habe einen GPIO von einem Raspberry PI, der wie folgt mit einem Nintendo 64-System verbunden ist:
Nach dem, was ich gesammelt und beobachtet habe, ist die Datenleitung auf dem N64-System ein Open-Collector-Ausgang. Die Leitung wird hochgezogen, wenn keine Daten übertragen werden, und zum Senden niedrig gezogen.
Der PI unterstützt Pull-Up/Down-Konfigurationen für die GPIO-Pins, aber ich sehe nichts über eine Open-Collector-Konfiguration.
Mit meinem aktuellen Setup kann ich mit dem PI Daten vom N64 lesen. Ich weiß jedoch nicht, wie ich die Datenleitung mit dem GPIO-Pin zerstörungsfrei auf Low ziehen und auch vom selben Pin lesen kann.
Kann ich das ohne zusätzliche Hardware erreichen? Oder muss ich so etwas wie einen Transistor hinzufügen, den ich mit dem PI schalten kann, um die Datenleitung mit Masse zu verbinden? Wenn ich das tue, wie werde ich Daten lesen?
Wie Sie sehen, weiß ich gerade genug, um mich gründlich zu verwirren, aber nicht genug, um das Problem zu lösen.
Vielen Dank für Ihre Hilfe!
Angenommen, der Raspberry Pi ist nur ein Verbraucher von Daten, würde sein GPIO als Eingang konfiguriert, und ob Sie einen Pull-up-Widerstand aktivieren oder nicht, hängt davon ab, ob dieser in den Controller integriert ist oder nicht. Ich kann mir keinen Grund vorstellen, warum der Raspberry Pi jemals aktiv die Datenleitung ansteuern würde. Ich würde vermuten , dass Sie den Pull-up auf dem Raspberry Pi aktivieren müssen, denn was bringt es sonst, eine Open-Collector-Schnittstelle auf dem Controller zu haben. Möglicherweise müssen Sie einen externen Pullup-Widerstand verwenden, wenn der interne Pullup zu schwach ist; Das Tutorial, auf das ich unten verweise, schlägt 2,2 kOhm vor, während die internen Klimmzüge auf dem Pi wahrscheinlich> 30k sind.
Ich frage mich, ob Sie tatsächlich in der Lage sein werden, das Signal auf dem Raspberry Pi ausreichend häufig / deterministisch abzutasten, indem Sie den GPIO abfragen, um die (vermutlich) seriellen Daten zu decodieren, die vom Controller kommen. Ich bin mit dem N64-Controller-Protokoll nicht vertraut, daher ist es schwer zu sagen.
Ich habe diese Referenz im Internet gefunden, die für Sie hilfreich sein könnte:
Um zu verstehen, wie man sich mit einem N64-Controller verbindet, muss man zuerst das Protokoll verstehen, das ein echter N64 verwendet, um sich mit dem Controller zu verbinden. Alle Daten werden auf einem einzigen Halbduplexkabel übertragen (das Signalkabel wird oben an Pin 25 angeschlossen). Wenn dieser Draht im Leerlauf ist, ist er hoch (daher der Pull-up-Widerstand). Wenn eine fallende Flanke erkannt wird, bedeutet dies, dass Bits übertragen werden. Bits werden in 4μs-Intervallen übertragen. Bei einer 0 ist der Draht 3 μs lang niedrig und 1 μs lang hoch. Bei einer 1 ist der Draht 1 μs lang niedrig und 3 μs lang hoch. Um ein Bit zu lesen, müssen Sie einfach auf eine fallende Flanke warten und dann den Draht 2 μs nach der fallenden Flanke lesen. Wenn die Leitung hoch ist, ist der Wert 1, wenn sie niedrig ist, ist der Wert 0. Alle Übertragungen enden mit einem 1-Bit, dem keine fallende Flanke folgt, das so genannte Signalbit.
Sieht aus wie eine serielle Pulsweitenmodulationscodierung. Ich bin skeptisch, dass man das mit einem Raspberry Pi einfach entschlüsseln kann. Auf der anderen Seite wäre es trivial, mit einem Mikrocontroller zu dekodieren, zB unter Verwendung von Pin-Wechsel-Interrupts und/oder Hardware-Timern / Input-Capture-Interrupts.
Aktualisieren
Da es sich um einen bidirektionalen Bus handelt, sollten Sie den GPIO in der Tat niemals auf Output-HIGH setzen. Wenn Sie möchten, dass der Ausgang HIGH ist, stellen Sie ihn einfach als Eingang mit aktiviertem Pull-up (oder vielleicht ohne Pull-up) ein. Wenn Sie LOW ausgeben möchten, setzen Sie den GPIO auf einen niedrigen Ausgang. Ich bezweifle jedoch, dass Sie mit einem Pi das richtige Timing bekommen können, wenn das Betriebssystem im Weg ist.
Mit meinem aktuellen Setup kann ich mit dem PI Daten vom N64 lesen. Ich weiß jedoch nicht, wie ich die Datenleitung mit dem GPIO-Pin zerstörungsfrei auf Low ziehen und auch vom selben Pin lesen kann.
Schalten Sie den GPIO nur zwischen Input / High-Z und Output Low um. Schalten Sie ihn niemals auf High-Ausgang. So funktioniert ein Open Collector.
Passant
Terrorflops