Forum: Mikrocontroller und Digitale Elektronik arudino leonardo mit 2 arcade player= 24 tasten 4051 multiplexer


von christian (Gast)


Lesenswert?

Hallo Zusammen :)

möchte einen zwei player arcade controller mit hilfe des arduino 
leonardo basteln (mit nur einem Arduino leonardo wohlbemerkt! :)) ...es 
sind mit den push button taster und die taster am joystick, 24 taster (2 
spieler). Kann ich mit hilfe des ic´s 4051 abhilfe schaffen wund 
dardurch meine 24 taster anschließen ?

von STK500-Besitzer (Gast)


Lesenswert?

Nimm lieber Schieberegister oder digitale Multiplexer.
Der 4051 ist für analoge Signale gedacht. Die hast du bei 
Schaltern/Tastern aber nicht.

von christian (Gast)


Lesenswert?

danke nochmal für die schnelle antwort :)
und was sind das für bauteil bezeichnungen in meinem falle ?

grüße
christian

von Jobst Q. (joquis)


Lesenswert?

STK500-Besitzer schrieb:
> Nimm lieber Schieberegister oder digitale Multiplexer.
> Der 4051 ist für analoge Signale gedacht. Die hast du bei
> Schaltern/Tastern aber nicht.

Der 4051 und ähnliche Schalter sind sowohl für analoge als auch für 
digitale Signale geeignet.

: Bearbeitet durch User
von STK500-Besitzer (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

Jobst Q. schrieb:
> Der 4051 und ähnliche Schalter sind sowohl für analoge als auch für
> digitale Signale geeignet.

Ja, und?

von Rene K. (xdraconix)


Lesenswert?

Wieso nimmst du nicht zwei Leonardo? Ich stelle mir das schwierig vor 
den HID Controller in den gängigen Emulatoren als zwei Eingabequellen zu 
definieren.

Auf dem Leonardo werkelt der Mega32u4, richtig? Dafür hab ich mal ne 
RC-Car Pistolen Funke als Joystick gebaut.

Desweiteren musst du tunlichst darauf achten, solltest du es für Emus 
benutzen wollen, das die Latenz zwischen Tastendruck->HID Ausgabe so 
extrem wie nur möglich hälst. Da die Emus, sei es z.b. SNES oder Atari 
etc.., die mir bist jetzt untergekommen sind von sich aus schon einen 
extremen Input-Lag zwischen USB->Spiel haben - wenn dazu dann noch der 
Joystick langsam ist, macht das Spielen keinen Spaß mehr.

von christian (Gast)


Lesenswert?

Rene K. schrieb:
> Wieso nimmst du nicht zwei Leonardo? Ich stelle mir das schwierig
> vor
> den HID Controller in den gängigen Emulatoren als zwei Eingabequellen zu
> definieren.

Also Plan A war von mir versuche zwei spieler auf einen arduino zu 
bekommen und Paln b wäre dann ein zweiter leo..bei ebay kostet dass ding 
nicht viel....aber nach möglichkeit will versuchen zwei spieler 
hinzubekommen bzw läuft er dann als ein gerät.


Rene K. schrieb:
> Auf dem Leonardo werkelt der Mega32u4, richtig? Dafür hab ich mal ne
> RC-Car Pistolen Funke als Joystick gebaut.

Also Ich will mit dem arcade controller auf nem Retropi zocken können :)


Rene K. schrieb:
> Desweiteren musst du tunlichst darauf achten, solltest du es für Emus
> benutzen wollen, das die Latenz zwischen Tastendruck->HID Ausgabe so
> extrem wie nur möglich hälst. Da die Emus, sei es z.b. SNES oder Atari
> etc.., die mir bist jetzt untergekommen sind von sich aus schon einen
> extremen Input-Lag zwischen USB->Spiel haben - wenn dazu dann noch der
> Joystick langsam ist, macht das Spielen keinen Spaß mehr.

aber hängt doch davon ab wie ich das tasten delay programiere oder? 
....das muss ich ertsmal selber sehen und merken wie das mit der latenz 
der tasten abhängt

von Jobst Q. (joquis)


Lesenswert?

STK500-Besitzer schrieb:
> http://www.mikrocontroller.net/articles/AVR-Tutori...
>
> Jobst Q. schrieb:
>> Der 4051 und ähnliche Schalter sind sowohl für analoge als auch für
>> digitale Signale geeignet.
>
> Ja, und?

Bloss weil du Schieberegister lieber magst, musst du Multiplexer nicht 
schlecht machen.

von STK500-Besitzer (Gast)


Lesenswert?

Jobst Q. schrieb:
> Bloss weil du Schieberegister lieber magst, musst du Multiplexer nicht
> schlecht machen.

Wieviele Pins braucht man, um mit einem 4051 24 Taster einzulesen und 
wieviele mit 3 Schieberegister?

Ich habe nichts gegen den 4051. Ich bin nur der Meinung, dass man Taster 
einfacher per Schieberegister einlesen kann.

von christian (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Wieviele Pins braucht man, um mit einem 4051 24 Taster einzulesen und
> wieviele mit 3 Schieberegister?


Also ich brauch 3 stück von dem 4051 um 24 taster einzulesen über 3 pins 
pro ic werden die angesteuert, heisst ich verbrauche nur 9 digi pins am 
arduino für 24 taster. oder lieg ich falsch (ohne die gnd; power pins 
und so..)

von Rene K. (xdraconix)


Lesenswert?

christian schrieb:
> aber hängt doch davon ab wie ich das tasten delay programiere oder?
> ....das muss ich ertsmal selber sehen und merken wie das mit der latenz
> der tasten abhängt

Die Abtastung / Interrupt definierst du über deinen HID-Descriptor. Die 
minimalste Interruptzeit bei Generic Joystick (0x09, 0x04) liegt bei 
5ms. In der Zeit solltest / musst du alle Tasten auf aktuellen Zustand 
abgefragt haben.



EDIT:

christian schrieb:
> Also ich brauch 3 stück von dem 4051 um 24 taster einzulesen über 3 pins
> pro ic werden die angesteuert, heisst ich verbrauche nur 9 digi pins am
> arduino für 24 taster. oder lieg ich falsch (ohne die gnd; power pins
> und so..)

Nein, Schieberegister kann man kaskadieren.

: Bearbeitet durch User
von christian (Gast)


Lesenswert?

Rene K. schrieb:
> christian schrieb:
>> aber hängt doch davon ab wie ich das tasten delay programiere oder?
>> ....das muss ich ertsmal selber sehen und merken wie das mit der latenz
>> der tasten abhängt
>
> Die Abtastung / Interrupt definierst du über deinen HID-Descriptor. Die
> minimalste Interruptzeit bei Generic Joystick (0x09, 0x04) liegt bei
> 5ms. In der Zeit solltest / musst du alle Tasten auf aktuellen Zustand
> abgefragt haben.

 sollte doch aber kein problem sein oder? meine der micro controller ist 
doch schnell genug um das abzuarbeiten...für denn fall dass es too much 
ist nehm ich halt einen zweiten arduino. Bei der Programierung kann ich 
dich ja dann fragen, kennst dich sehr gut mit dieser thematik aus ;)



Vielen dank euch allen nochmal, mir bei meinem projekt mir 
fragetechnisch zu helfen :)

tolle Community

grüße
Christian

von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

christian schrieb:
> sollte doch aber kein problem sein oder? meine der micro controller ist
> doch schnell genug um das abzuarbeiten...für denn fall dass es too much
> ist nehm ich halt einen zweiten arduino. Bei der Programierung kann ich
> dich ja dann fragen, kennst dich sehr gut mit dieser thematik aus ;)
>
> Vielen dank euch allen nochmal, mir bei meinem projekt mir
> fragetechnisch zu helfen :)
>
> tolle Community
>
> grüße
> Christian

Ja gut, ich hab dafür einen Leonardo Pro Micro Clon genutzt. Aber nicht 
über Arduino programmiert sondern über Atmel Studio. Ich weiß nicht wie 
sich die Arduino Umgebung da verhält, da ja bei jeder Pinabfrage der 
riesige Stack dahinter steht.

Aber wenn du es in C machst, bin ich natürlich gerne behilflich, kann 
dir da auch nen Grundgerüst für dein 24 Tasten HID für den Atmega32u4 
zukommen lassen.

von c-hater (Gast)


Lesenswert?

Rene K. schrieb:

> Schieberegister kann man kaskadieren.

So what? Multiplexer kann man natürlich ebenfalls kaskadieren.

Und egal, ob kaskadiert oder nicht: Die Entscheidung für eins der beiden 
Konzepte erfolgt immer in Abwägung von Latenz vs. Anzahl der zur 
Ansteuerung nötigen Signale.

Tendenziell benötigen Muxer mehr Signale als Schieberegister, erlauben 
dafür aber geringere Abfragelatenzen.

Nur spielt die Latenz im konkreten Fall keinerlei Rolle, weil die 
Anbindung offensichtlich über USB mit Fullspeed erfolgen soll. Damit hat 
man sowieso eine Latenz von einer Millisekunde, dagegen verblassen die 
Latenzunterschiede zwischen den Ansteuerungsmethoden der Taster zur 
völligen Irrelevanz.

Was hier als Entscheidungskriterium bleibt, ist also allein die Zahl 
der benötigten Signale. Und nur dadurch ist bei 24 Tastern ganz klar 
ein Schieberegister zu bevorzugen.

Du hast also ein Vorurteil, dessen Ergebnis rein zufällig hier passt, 
aber im Kern eigentlich keine Ahnung, warum diese Entscheidung hier 
wirklich die richtige ist...

von Rene K. (xdraconix)


Lesenswert?

c-hater schrieb:
> Rene K. schrieb:
>
>> Schieberegister kann man kaskadieren.
>
> So what? Multiplexer kann man natürlich ebenfalls kaskadieren.
>
>...
>
> Du hast also ein Vorurteil, dessen Ergebnis rein zufällig hier passt,
> aber im Kern eigentlich keine Ahnung, warum diese Entscheidung hier
> wirklich die richtige ist...

Hier ich hab keine Vorurteile :-D Mir ist auch bewusst das sich Muxer 
ebenfalls kaskadieren lassen.

WIE er die Taster anschließt ist ja mir persönlich doch relativ Rille. 
Da es sich ausschließlich um digitale Taster handelt. Wäre meine 
persönliche Entscheidung ein Schieberegister - ganz persönlich würde ich 
dafür 74HC165 nehmen, da hab ich die Schublade noch voll mit den 
Dingern.

von Jobst Q. (joquis)


Lesenswert?

christian schrieb:
> Also ich brauch 3 stück von dem 4051 um 24 taster einzulesen über 3 pins
> pro ic werden die angesteuert, heisst ich verbrauche nur 9 digi pins am
> arduino für 24 taster. oder lieg ich falsch (ohne die gnd; power pins
> und so..)

Nein, es reichen 6. Die drei Adresspins des 4051 kannst du parallel 
versorgen, und für jeden Enablepin noch einen. Ein Vorteil der 
Multiplexer gegenüber Schieberegistern ist, dass du jeden Taster einzeln 
abfragen kannst und nicht auf eine Reihenfolge festgelegt bist. Ob das 
für deine Anwendung von Bedeutung ist, kann ich aber nicht sagen.

von Rene K. (xdraconix)


Lesenswert?

Jobst Q. schrieb:
> Nein, es reichen 6. Die drei Adresspins des 4051 kannst du parallel
> versorgen, und für jeden Enablepin noch einen. Ein Vorteil der
> Multiplexer gegenüber Schieberegistern ist, dass du jeden Taster einzeln
> abfragen kannst und nicht auf eine Reihenfolge festgelegt bist. Ob das
> für deine Anwendung von Bedeutung ist, kann ich aber nicht sagen.

In der geforderten Anwendung halte ich das sogar für einen Nachteil 
jeden Taster einzeln abzufragen. Bei einem Schiebregister rutscht man 
sich alle Tasten in ein 3 Byte - Array und schickt die bei USB-HID 
Interrupt einfach raus.

Übrigens ist für den Fall, ich hab mir den 4051 mal angeschaut gerade, 
nicht wirklich. Da muss man sich ja jeden Kanal einzeln (A,B,C) 
antoggeln um dann über INH den Zustand des jeweiligen Ports abzulesen. 
Bei drei 4051 muss ich dann dreimal nacheinander die Geschichte machen 
um mir über drei verschiedene INH Inputs die Zustände zukommen zu 
lassen. Das ist ja die Kirche ums Dorf getragen wenn ich bei einem 
seriellen Schieberegister mir bei jedem Clock eine Taste zukommen lassen 
kann. Wären hier Analoge Achsen gefragt, okay - dann natürlich. Aber 
doch nicht wenn ich ausschließlich digital Tasten abfrage!

von christian (Gast)


Lesenswert?

Habe mich bisschen mit Videos schlau gemacht und bin auch der Meinung 
dass es klüger ist ein schieberegister zu benutzen allein schon wegen 
der Programmierung oder ?

von STK500-Besitzer (Gast)


Lesenswert?

christian schrieb:
> Habe mich bisschen mit Videos schlau gemacht und bin auch der Meinung
> dass es klüger ist ein schieberegister zu benutzen allein schon wegen
> der Programmierung oder ?

Wenn du Jobst Quis eine Freude machen willst, nimmst du besser den 
Multiplexer.
SCNR

Alle anderen raten dir ja zum Schieberegister.
Das "Gehampel" mit der Pin-Adressierung geht da wesentlich schneller, 
vor allem auch, wenn man die Tasten entprellen will.

von christian (Gast)


Lesenswert?

Ich glaube habe zu meinem Fall was passendes gefunden :)

https://www.arduino.cc/en/Tutorial/ShiftIn


Müssen den an die arcade taster auch widerstände dran???

von Martin (M.) (Gast)


Lesenswert?

christian schrieb:
> Müssen den an die arcade taster auch widerstände dran???

Ja

von Jobst Q. (joquis)


Lesenswert?

Rene K. schrieb:
> Übrigens ist für den Fall, ich hab mir den 4051 mal angeschaut gerade,
> nicht wirklich. Da muss man sich ja jeden Kanal einzeln (A,B,C)
> antoggeln um dann über INH den Zustand des jeweiligen Ports abzulesen.
> Bei drei 4051 muss ich dann dreimal nacheinander die Geschichte machen
> um mir über drei verschiedene INH Inputs die Zustände zukommen zu
> lassen. Das ist ja die Kirche ums Dorf getragen wenn ich bei einem
> seriellen Schieberegister mir bei jedem Clock eine Taste zukommen lassen
> kann. Wären hier Analoge Achsen gefragt, okay - dann natürlich. Aber
> doch nicht wenn ich ausschließlich digital Tasten abfrage!

Der Zustand wird nicht über INH ausgelesen, sondern über COM bzw Z. Das 
ist ein Pin für beliebig viele 4051, nicht anders als beim 
Schieberegister. INH bzw ~E wählt den Chip aus, das kann gleichzeitig 
mit den Adressbits geschehen. Die Adresse hochzuzählen ist kaum 
aufwändiger als ein CLOCK-Signal rauszugeben.

STK500-Besitzer schrieb:
> Wenn du Jobst Quis eine Freude machen willst, nimmst du besser den
> Multiplexer.
> SCNR

Das ist mir s-owasvon-egal, womit Christian seine Tasten ausliest. Meine 
Freude ist davon nicht abhängig. Ich hab auch nichts gegen 
Schieberegister, mich stört es nur, wenn durch falsche Behauptungen 
suggeriert wird, dass es die einzige Möglichkeit wäre.

Es gibt viele Möglichkeiten viele Tasten einzulesen, ein Schieberegister 
ist nur eine davon. Für manche Einsätze wäre auch eine I2C-Anbindung 
über PCF8574 interessant, die können nämlich Interrupts auslösen, wenn 
eine Taste gedrückt wird.

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
Noch kein Account? Hier anmelden.