Forum: Mikrocontroller und Digitale Elektronik USB verstehen und am µC benutzen


von Patrick P. (potman)


Lesenswert?

Hallo Leute,

bin neu hier im Forum und möchte gleich mal ein paar Tipps von euch.

Ich habe vor:

Einen Xbox 360 Controller for Windows (Im Grunde ein normales Xbox 360 
Gamepad nur mit USB Funkempfänger für den PC) nicht mit einem PC zu 
betreiben sondern direkt mit einem Microcontroller. (Bei der Auswahl des 
µC bin ich mir noch nicht sicher ob einen mit USB Schnittstelle oder 
ohne zb. ATmega32) oder gar ein vorgeschaltener USB zu SPI konverter, 
oder ähnliches, zu verwenden.
Die nächste Möglichkeit wäre ein Linux powered ARM, für Linux gibt es 
anscheinend auch einen Treiber. Aber das Problem ist, mit Linux kenne 
ich mich nicht so gut aus und die ARM´s sind auch Neuland für mich.

Per Visual Studio, C#, einem freien Treiber namens XINPUT und dem 
DirectX SDK lässt sich das Gamepad ziehmlich leicht beherrschen. Aber 
dazu ist ein PC nötig.

Nun will ich mich in die Materie des USB Protokolls einarbeiten und habe 
dazu 2 passende Bücher gefunden.

1. USB 2.0 Handbuch Für Entwickler
   Sprache: Deutsch
   ISBN13: 9783826616907

2. USB 2.0. USB Spezifikationen, Tools Zur Treiberentwicklung...
   Sprache: Deutsch
   ISBN13: 9783772379659

Das erste ist anscheinend eine Deutsche Übersetzung des oft empfohlenen 
"USB Complete The Developer's Guide, Fourth Edition by Jan Axelson"
Mein Englisch ist zwar gut aber wenn ich ein Buch kaufe möchte ich es 
ganz verstehn, darum deutsch. :-)

Sind diese Bücher hilfreich? Oder habt Ihr irgendwelche Buchtipps?

Vorkenntnisse:

- AVR µC Assembler, C
- Windoof .NET C#

Ich bin dankbar für jede Antwort
mfg
Patrick P.

von Meister E. (edson)


Lesenswert?

Patrick P. schrieb:
> Mein Englisch ist zwar gut aber wenn ich ein Buch kaufe möchte ich es
> ganz verstehn, darum deutsch. :-)

Wenn dein Englisch gut ist, nimm lieber das englische Original. Gerade 
bei Fachbüchern sind die Übersetzungen oft schwer zu verstehen, weil die 
Übersetzer eben Übersetzer sind und keine Spezialisten für das jeweilige 
Fachgebiet.

Gruß,
Edson

von eric (Gast)


Lesenswert?

Patrick P. schrieb:
> (Bei der Auswahl des
> µC bin ich mir noch nicht sicher ob einen mit USB Schnittstelle oder
> ohne zb. ATmega32) oder gar ein vorgeschaltener USB zu SPI konverter,
> oder ähnliches, zu verwenden.
> Die nächste Möglichkeit wäre ein Linux powered ARM, für Linux gibt es
> anscheinend auch einen Treiber. Aber das Problem ist, mit Linux kenne
> ich mich nicht so gut aus und die ARM´s sind auch Neuland für mich.

Hier musst du aufpassen, dass dein µC auch als USB-Host geeignet ist.
Wärend der Betrieb als USB-Device bei vielen µC kein Problem ist (geht 
bei den AVRs ja notfalls sogar in Software), sind die Anforderungen für 
einen Host ganz anders und der Host ist im Vergleich zum Device ziemlich 
kompliziert.
Ein ARM mit Linux wäre wohl das einfachste. Dann hat man wie bei einem 
Linux Desktoprechner die nötigen Treiber und muss eigentlich nur noch 
den Controller anstecken und die Eingabe verarbeiten. (Passende 
Distribution vorrausgesetzt)
Dabei lernt man allerdings auch herzlich wenig über USB. Es hält einen 
aber auch niemand davon ab eigene Treiber zu schreiben oder zumindest 
die Funktionsweise der vorhandenen Treiber nachzuvollziehen.

von Michael S. (rbs_phoenix)


Lesenswert?

Ein paar 16bit und alle 32bit PICs haben ein internes USB-Modul, das 
auch als Host verwendet werden kann. Z.b. PIC24FJ32GB002 - 
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en536120 , 
wenns ein DIP sein soll, wegen Machbarkeit z.B. oder ein kleinen PIC32, 
die es auch in DIP-Gehäuse gibt.

Ein fertiges ARM-Board tuts aber auch, musst du wissen.

von Christian D. (burning_legend)


Lesenswert?

Versteh mich nicht falsch, aber liegt bei deinem Projekt nicht das 
Problem eher in dem Treiber für den XBox Controller als an dem USB Kram 
?

Ich hatte damals ein ähnliches Projekt verworfen, weil es schlichtweg 
keine offenen Treiber und keinerlei Doku zu dem Xbox Controller bzw. dem 
Empfänger gab. Hat sich das geändert? Wenn ja wäre ich für Informationen 
sehr dankbar.

Das ganze mit Visual Studio zu benutzen ist ja denk ich kein Problem, da 
Microsoft das Hardware Interface inkl. Treiber bereitstellt, aber wie 
ich das damals verstanden habe ist das Microsoft Wireless Controller 
Zeugs nicht HID-Konform sondern ein eigenes Microsoft Produkt.

Sollte das anders sein, würde ich das ganze an deiner Stelle mit dem 
Raspberry Pi oder ähnlichem machen.

Edit: Es scheint wohl einen Linux Treiber zu geben, der einigermaßen 
funktioniert. Also wäre XPad wohl das mittel zur Wahl:
https://help.ubuntu.com/community/Xbox360Controller


Grüße,
Christian

von Patrick P. (potman)


Lesenswert?

Erstmal Danke für die Antworten!!

Michael Skropski schrieb:
> Ein fertiges ARM-Board tuts aber auch, musst du wissen.

Das STM32-P107 hier im Shop sieht interessant aus.
Wollte mich sowieso einaml mit den ARM´s befassen.


Christian D. schrieb:
> Ich hatte damals ein ähnliches Projekt verworfen, weil es schlichtweg
> keine offenen Treiber und keinerlei Doku zu dem Xbox Controller bzw. dem
> Empfänger gab. Hat sich das geändert? Wenn ja wäre ich für Informationen
> sehr dankbar.

Also ich habe hier einen XBox 360 Gamepad Treiber namens "xboxdrv" für 
Linux gefunden. Vielleicht werde ich das ganze mal unter einem Ubuntu in 
VMWare testen.

Dazu hatte ich auch einmal eine Seite gefunden die das Protokoll des 
Xbox Controllers auseinander nimmt und beschreibt. Aber das war kein 360 
Gamepad. Und mit USBlyzer konnte ich die Übertragungen nicht 
nachvollziehen.

Hab mir Trotzdem mal die Übertragungen per USBlyzer angeschaut, soweit 
ich das verstanden habe benutzt das Gamepad den Interrupt Transfer und 
sendet seinen Status immer in 20byte Packeten. Dann hab ich mal jede 
Taste gedrückt und die Sticks bewegt und geschaut welche Bytes sich 
ändern.

Aber das hilft mir nicht viel weiter wenn ich das USB Protokoll nicht 
verstehe. Sonst könnte man sich vllt einen eigenen Treiber zusammen 
pfuschen.

PS.: Darf man hier im Forum Links von Drittwebseiten posten? dann kann 
ich mal die Links hier reinhaun.

Alles Neuland für mich ... vllt habe ich auch was falsch verstanden.
Gruß
Patrick

von Patrick P. (potman)


Lesenswert?

Sorry für Doppelpost...

Christian D. schrieb:
> Edit: Es scheint wohl einen Linux Treiber zu geben, der einigermaßen
> funktioniert. Also wäre XPad wohl das mittel zur Wahl:
> https://help.ubuntu.com/community/Xbox360Controller

Ich glaube der Treiber den ich gefunden habe ist neuer
Link: http://pingus.seul.org/~grumbel/xboxdrv/

Und hier hat ein verrückter Japaner das Protokoll des alten Xbox 
Gamepads auseinander genommen
Link: http://euc.jp/periphs/xbox-controller.ja.html

edit:
Hat jemand Erfahrungen mit dem STM32-P107 von Olimex? Mich irritiert nur 
das nicht alle Port an der Platine abgreifbar sind.

Gruß
Patrick

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.