Moin! Ich möchte einen alten Joystick (Gravis Firebird) gern in die Gegenwart holen. Sprich: Alte Elektronik raus, Arduino rein und dann als USB-Joystick zum Elite zocken verwenden. Also das Ding mal aufgemacht und reingeschaut wie Gravis die diversen Buttons so verdrahtet hat. Die alte Platine kann ich so wie's aussieht mit einem sauberen Schnitt dann problemlos mit einem Arduino verdrahten, sogar Pullups usw. sind bereits vorhanden. Also alles kein Problem. Schmerzen bereiten mir die Feuerknöpfe am Stick selbst. Hier hat Gravis eine kleine Platine mit nem 74HC165 eingebaut. Problem: Es gehen exakt vier Leitungen zu der Platine, zwei davon sind Vcc und GND. Bleiben also noch zwei Leitungen für CLK und DATA. Das Kuriose: Die haben den LOAD Pin einfach über nen Widerstand mit CLK verbunden. Wie soll das denn funktionieren? Dann müsste der 165 ja mit jedem Taktpuls sein Schieberegister neu laden oder? Oder anders gefragt: Wie steuert man sowas an? Hat das einer von euch schonmal gesehen? Ich vermute, dass hier irgend eine Besonderheit bei den Timings ausgenutzt wird, komme aber nicht drauf wie's genau funktioniert. Hoffe ihr könnt mir helfen. Grüße, Shuzz
Shuzz schrieb: > Das Kuriose: Die haben den LOAD Pin einfach über nen Widerstand mit CLK > verbunden. Wie soll das denn funktionieren? Dann müsste der 165 ja mit > jedem Taktpuls sein Schieberegister neu laden oder? Kann es sein, daß am LOAD Pin noch ein C dran hängt? Dann hättest Du ein RC-Glied und nur bei längeren CLK == low Phasen würde ein Load stattfinden. Gruß, Stefan
:
Bearbeitet durch User
Du möchtest nen Arduino nutzen, der hat doch bestimmt noch nen paar Pins frei, wo die beiden Firebuttons aufgelegt werden können ? mmhh ich frage mich wirklich ob die 2 Buttons an den 165er nicht overdressed sind bzw hängt da nicht noch mehr dran?? 0.o
@Stefan K.: Nein, leider kein C dran. Der einzige Kondensator den ich identifizieren konnte puffert die Spannungsversorgung ab. Widerstand ist übrigens ein stinknormaler 4K7. Anbei nochmal Bilder von dem Platinchen... @Chris: Öhm, an dem 165 hängen 8 Buttons dran: 1 Coolie und 4 Feuerknöpfe. Ist ja auch nicht meine Idee gewesen sondern die von Gravis... ;)
Shuzz schrieb: > Nein, leider kein C dran. Ich würde mal raten die nutzen die Eingangs-Kapazität von dem Chip als Kondensator. Werden halt mit der SPI-Frequenz hart an die Grenze gehen, dann reicht vlt. der Widerstand alleine, dass kein Latch passieren kann.
Hmmm, also laut Datenblatt hat das Ding ne Eingangskapazität von 3.5pF. Mit dem 4K7 Widerstand komme ich dann auf ca. 9.6MHz Grenzfrequenz. Also müsste ich den SPI nochmal deutlich schneller takten, korrekt? Bin mir nicht sicher, ob das mit nem Arduino noch hinhaut... Könnte ich nicht auch einfach den Eingang nochmal mit z.B. 1nF gg. Masse puffern? Dann sollte ich doch deutlich langsamer takten können. Und nen kleinen Kondensator kriege ich locker noch auf die Platine gebraten...
Wenn ich Deine Bilder richtig interpretiere, dann ist LOAD (IC Pin 1) direkt an Pin2 des Ausgangssteckers verbunden. CLK (IC Pin 2) ist an Pin 3 des Ausgangssteckers verbunden UND per Widerstand an den Data-Out des Schieberegisters (IC Pin 9). Sieht ziemlich kryptisch aus. Wenn das so stimmt, dann wird der CLK/DATA Pin wechselnd als Ein- und Ausgang geschaltet. Gruß, Stefan
Shuzz schrieb: > Bin mir nicht sicher, ob das mit nem Arduino noch hinhaut Arduino = AVR = SPI bis 10 MHz (is aber schon arg eng). Ausserdem sehe ich das problem, dass evtl. der Kondensator durch die 50/50 SCK auf Vcc/2 geladen wird und man damit schneller nen Latch kriegt. Auf jeden Fall kein Schaden wenn du einen Cap spendierts....
Shuzz schrieb: > Der einzige Kondensator den ich > identifizieren konnte puffert die Spannungsversorgung ab. Sieht mir aber nicht so aus. Eher führt der heisse Anschluss dieses Kondensators in das Widerstandsnetzwerk RN2.
Stefan K. schrieb: > Wenn das so stimmt, dann wird der CLK/DATA > Pin wechselnd als Ein- und Ausgang geschaltet. So isses. Erst muß an CLK eine 0-1 Flanke zum Schieben erzeugt werden. Dann wird er als Input geschaltet, um zu lesen. Dann wieder auf Ausgang low. Usw. (8*).
:
Bearbeitet durch User
Stefan K. schrieb: > Wenn ich Deine Bilder richtig interpretiere, dann ist LOAD (IC Pin > 1) direkt an Pin2 des Ausgangssteckers verbunden. > > CLK (IC Pin 2) ist an Pin 3 des Ausgangssteckers verbunden UND per > Widerstand an den Data-Out des Schieberegisters (IC Pin 9). > > Wenn das so stimmt, dann wird der CLK/DATA Pin wechselnd als Ein- > und Ausgang geschaltet. Ja. Das ergibt auch deutlich mehr Sinn als die ursprüngliche Interpre- tation der Schaltung durch den TE. Wobei mir nicht klar ist wie sie verhindern, daß das Schieberegister beim loslassen des CLK Anschlusses auf der Platine (umschalten auf Eingang) sich selber einen Taktimpuls generiert. PS: nein, jetzt sehe ich es. Wenn das SR bei der steigenden Flanke schiebt, müssen sie nur bei H auf Eingang umschalten. Das SR kann jetzt entweder H halten oder es schaltet auf L. Und diese Flanke ist ja inaktiv. Nette Idee ist das. Wenn man mal Pins sparen muß ;)
:
Bearbeitet durch User
Axel S. schrieb: > PS: nein, jetzt sehe ich es. Wenn das SR bei der steigenden Flanke > schiebt, müssen sie nur bei H auf Eingang umschalten. Das SR kann jetzt > entweder H halten oder es schaltet auf L. Und diese Flanke ist ja > inaktiv. Nette Idee ist das. Wenn man mal Pins sparen muß ;) Sehe ich auch so. Vermutlich ist der Pull-Up in der MCU immer aktiv und zum Erzeugen der Taktflanken wird von Eingang zu Ausgang-Low umgeschaltet.
Axel S. schrieb: > Wobei mir nicht klar ist wie sie > verhindern, daß das Schieberegister beim loslassen des CLK Anschlusses > auf der Platine (umschalten auf Eingang) sich selber einen Taktimpuls > generiert. Der CLK muss high sein und dann auf Input umgeschaltet werden. Wenn der Data-Pin low ist, dann geht in diesem Moment auch die CLK low -> das macht aber nichts, da CLK auf die LOW-HIGH Flanke reagiert: Sollte dann so funktionieren: CLK -> HIGH CLK -> OUTPUT LATCH -> LOW LATCH -> HIGH repeat 8 times: CLK -> INPUT // entweder hier READ DATA/CLK PIN CLK -> LOW // oder hier wird Clock-Pin low CLK -> OUTPUT CLK -> HIGH // Clock high: -> Flanke Gruß, Stefan
@Stefan K.: Oh Mist, vielen Dank. Da war ich echt zu blöd um richtig hinzuschauen. So macht das wesentlich mehr Sinn, dann ist auch das Auslesen kein Problem mehr... :) Vielen Dank an alle, jetzt kann das Projektchen weitergehen! :)
Marian . schrieb: > Sehe ich auch so. Vermutlich ist der Pull-Up in der MCU immer aktiv und > zum Erzeugen der Taktflanken wird von Eingang zu Ausgang-Low > umgeschaltet. Pullup im mc sollte nicht eingeschaltet sein. Der clk-Pin wird im hochohmigen Zustand vom Data-Out des Schieberegisters terminiert. Ein Pullup am mc würde bei Data-Out == low nur gegen den Serienwiderstand arbeiten und das Signal verfälschen. Gruß, Stefan
@Shuzz: Gern geschehen, diese alten Retro-Logiken sind doch immer wieder lustig. Ich denke da gerne zurück. Gruß, Stefan
So, nochmal vielen Dank für eure Hilfe. Auslesen klappt wunderbar. Hatte erst Schmerzen weil ich dusseliger Weise beim LOAD den CLK/DATA Pin am µC schon auf Input hatte - da hat sich das Register dann gleich mal seinen erste Clock Puls selbst generiert und ich mich gefragt wohin das erste Bit verschwunden ist. Naja, Fehler bemerkt, kurz Kopf->Tisch und seitdem läuft es... ;)
Hallo, Hat es dann am Ende alles funktioniert? Finde die Idee wirklich sehr interessant zumal die gravis Joysticks nahezu perfekt waren meiner Meinung nach. Wenn die Möglichkeit besteht wäre ich an der Dokumentation des ganzen interessiert um selbst einen firebird umzubauen.
Michael schrieb: > Wenn die Möglichkeit besteht wäre ich an der Dokumentation des ganzen > interessiert um selbst einen firebird umzubauen. Eine andere Variante. https://hackaday.com/tag/74hc165/ Dort im weiterführenden Link mit 2 Leitungen.
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.