74HC165 mit nur zwei Pins ansteuern?

Gast #4346475
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
Gast
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
Gast
@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... ;)
Angehängte Dateien:
Gast
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....
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ß ;)
Persönliche Seite
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
Gast
@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
Gast
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... ;)
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.