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 ?
Nimm lieber Schieberegister oder digitale Multiplexer. Der 4051 ist für analoge Signale gedacht. Die hast du bei Schaltern/Tastern aber nicht.
danke nochmal für die schnelle antwort :) und was sind das für bauteil bezeichnungen in meinem falle ? grüße christian
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
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?
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.
:
Bearbeitet durch User
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.
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???
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.