mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 74HC165 mit nur zwei Pins ansteuern?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Shuzz (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
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
von chris (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von Shuzz (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@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... ;)

von Max D. (max_d)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Shuzz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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...

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
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

von Max D. (max_d)


Bewertung
0 lesenswert
nicht lesenswert
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....

von Hp M. (nachtmix)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
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
von Axel S. (a-za-z0-9)


Bewertung
0 lesenswert
nicht lesenswert
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
von Marian  . (phiarc) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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.

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
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

von Shuzz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@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! :)

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
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

von Stefan K. (stefan64)


Bewertung
0 lesenswert
nicht lesenswert
@Shuzz:
Gern geschehen, diese alten Retro-Logiken sind doch immer wieder lustig. 
Ich denke da gerne zurück.

Gruß, Stefan

von Shuzz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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... ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.