Forum: Mikrocontroller und Digitale Elektronik MC mit USB Schnittstelle wie als USB Client für Spielkonsol


von Mario Obst (Gast)


Lesenswert?

Hallo,

ich hätte folgendes Problem.
Ich möchte mir gerne einen digitalen Joystick für die Xbox bauen.
Da die XBox Joypadeingänge USB Ports sind, geht das natürlich nicht so
einfach.
Ich dachte da an einen MC mit USB Schnittstelle an den ich auf der
einen Seite die Taster für Steuerung und Buttons anschließe und auf der
anderen Seite ein Xbox USB Kabel.

Die Frage ist nun wie kann man einen MC so programmieren, dass er als
USB Client der XBox funktioniert (Joystick), ich kann ja quasi nirgens
Treiber installieren. Außerdem hat die XBox wohl eine eigene
USB-Klasse.

Die XBOX muss den MC ja als ein XBox Pad erkennen.
Welchen MC kann man da empfehlen. Ich hab mich ein wenig mit AVRs und
den PICs beschäftigt und mal einen Pic18F2455 bestellt, der ja eine USB
Schnittstelle hat. Cypress soll es wohl auch einige MC geben, hab mich
mit diesen Typen noch nicht beschäftigt.
Wie gesagt ich weiß jetzt nicht wie ich den MC eine eigen USB-Klasse
beibringe und seine ID ändere. Gibt es da spezielle Programme oder wird
das alles in der jeweiligen Programmiersprache direkt in der IDE mit
entworfen??

Ich steh da im Moment noch ein wenig auf dem Schlauch.

Gruß Mario

von Rufus T. Firefly (Gast)


Lesenswert?

Wenn ein XBox-PAD ein HID ist (das ist eine Standarddeviceklasse für
Mäuse, Tastaturen, Graphiktabletts und eben auch Joysticks), dann
sollte so ein Teil einerseits ohne spezielle Devicetreiber am PC laufen
als auch ein normales USB-HID widerum an der XBox funktionieren.

Für HIDs der verschiedensten Arten gibt es Musterapplikationen von fast
jedem Hersteller von Controllern mit USB-Deviceinterface.

Wenn hingegen eine andere Deviceklasse als HID verwendet wird, dann
musst Du Dir eine Dokumentation des von XBox-Controllern verwendeten
Protokolls organisieren und dieses Protokoll auf dem von Dir gewählten
Controller implementieren.

Wie das im einzelnen zu geschehen hat, hängt stark von der jeweiligen
Unterstützung durch die zum Controller gehörenden Entwicklungssysteme
ab; manchmal kann man sich an Musterapplikationen bzw. Application
Notes orientieren, manchmal muss man das Rad selbst neu erfinden.

Was für eine Deviceklasse verwenden denn diese XBox-Pads und wenn die
nicht HID ist, hast Du eine Dokumentation derselben?

von Mario Obst (Gast)


Lesenswert?

Dank dir für deine Antwort
Also das einzige was ich zur Beschreibung eines XBOX Pads gefunden habe
ist das
http://euc.jp/periphs/xbox-controller.ja.html

Das Problem ist, dass ich noch nicht weiß was das alles zu bedeuten
(z.B Descriptors, HID descriptor, HID report descriptor) hat und wie
ich das den MC beibringen soll.


Hab mich zwar schon hier:
http://www.f1.fhtw-berlin.de/labor/adk/vcs/versuche-programmierung/usb/html/csun.html
mal schlau gemacht, aber so richtig schlau bin ich dann doch noch
nicht.

Gruß Mario

von Rufus T. Firefly (Gast)


Lesenswert?

Ich denke, daß Du Dir die Application Notes und sonstige
Entwicklungsunterstützung ansehen solltest, die es zum von Dir
gewählten Controller gibt - die sind oft gar nicht so sonderlich
schlecht.

Wenn ich mir den ersten von Dir zitierten Link ansehe, dann scheinen
aber doch sehr ausführliche Lücken in der Dokumentation eines dieser
XBox-Pads zu bestehen. Der Autor weist darauf hin, daß die Teile sich
nicht HID-konform verhalten und wohl auch auf bestimmte erforderliche
USB-Protokollkomponenten verzichten.

Um so etwas nachzuempfinden, müsstest Du wohl doch einiges an "reverse
engineering" betreiben, sprich einen USB-Protokollanalysator zwischen
XBox und Pad hängen und obendrein herausfinden, was die zusätzliche
Leitung an der Schnittstelle so anstellt.
Damit wäre für mich das Projekt gestorben, da ein
USB-Protokollanalysator nichts ist, was man so eben 'rumstehen hat
oder gar selbst bauen kann; zumindest kenne ich kein derartiges
Projekt.

Vielleicht hilft Dir aber beispielsweise das hier
http://sourceforge.net/projects/xboxhid/, das ist ein Treiber, um einen
XBox-Controller am PC zu betreiben. Eventuell ist darin dessen
vergurktes HID-Protokoll dokumentiert.
Hier http://www.llamma.com/xbox/Archive/xbcd.htm gibt es sowas wohl
auch; keine Ahnung, ob da Sourcen dabei sind.
Zu dem Thema spuckt Google mit dem Suchbegriffen "xbox controller usb
hid" verdammt viele Links aus, scheint ein beliebtes Spiel zu sein.

von Mario Obst (Gast)


Lesenswert?

Hm,

das klingt ja alles ganz schön pessimistisch. Was fehlt denn z.B da so
alles? Die Klasse wird ja, soweit ich das überblicke, beschrieben.

Ich denke das wird noch ein Stück Arbeit geben:-( Mir ist da einfach
noch zu viel unklar.
Wie ist z.B der Zusammenhang zwischen der USB Klasse, Descriptors, HID
descriptor, HID report descriptor (was ist das?) und einem MC?

Gruß Mario

von Kürsat (Gast)


Lesenswert?

Hallo Mario,

vielleicht sind meine Tipps zu spät aber trotzdem einpaar Hinweise.

Also ganz am Anfang solltest du dich mit der Enumeration beschäftigen.
Wenn das funktioniert hast du eine große Hürde überwunden.

Dann verstehst du auch was die Descriptoren zu bedeuten haben.

Siehe USB Spec.

Gruß Kürsat

von Matthias (Gast)


Lesenswert?

Hi

was spricht den dagegen einen XBox Controller zu zerlegen und die
Elektronik mit anderer Mechanik weiterzuverwenden. Das sollte die
schnellste und u.U. sogar die billigste Möglichkeit (XBox Controller <=
10€) sein.

Matthias

von Mario (Gast)


Lesenswert?

Also ich hatte leider noch keine Zeit mich in die USB specs
einzuarbeiten.

Was dagegen spricht ist,dass die Buttons vom XBox Controller alle
analog arbeiten ich aber digital arbeitende Buttons gegen Masse
brauche.
Gruß Mario

von Matthias (Gast)


Lesenswert?

Hi

Aus einem analogen Button läßt sich problemlos ein digitaler machen.
Ein bischen Schaltungstechnik ist evtl. nötig um die Pegel entsprend
anzupassen aber das dürfte alles bedeutend einfacher sein als sich das
USB-Protokoll der XBox-Controller aus einem Quelltext und lückenhaften
Dokumentationen selber zusammenzureimen und dieses dann auch noch auf
einem µC zu implementieren.

Matthias

von Marco (Gast)


Lesenswert?

Nimm doch einfach das Steuerkreuz des XBOX Controllers als Basis für
deinen Joystick. Das ist schließlich schon digital und "theoretisch"
sollte es reichen einfach ein paar Kabel anzulöten und mit den
Kontakten des Joysticks zu verbinden.

von Stefan May (Gast)


Lesenswert?

In der Codesammlung habe ich schonmal den MJoy erwähnt. Das ist ein
Mega8, der mit dem USB-Code von Igor einen HID-kompatiblem Joystick
nachbildet.

http://www.mindaugas.com/projects/MJoy/

ciao, Stefan.

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.