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


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 christian (Gast)


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


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


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


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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


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


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


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

Ja

von Jobst Q. (joquis)


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

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]
  • [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.