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 ?
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.
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.
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
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.
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.
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..)
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.
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
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.
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...
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.
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.
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!
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 ?
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.
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.