Forum: Mikrocontroller und Digitale Elektronik USB Tastatur HID


von Hans-Peter D. (pitdahl)


Lesenswert?

Hi,
ich brauche für ein Flipperprojekt eine Art usb game controller um die 
Flipperknöpfe anzusprechen. Ich habe auch ein Projekt gefunden, aber 
bekomme es nicht zum Laufen. Hat evtl. jemand Erfahrung damit und kann 
mir auf die Sprünge helfen, da ich "mikrocontrollermäßig" noch am Anfang 
stehe.
Programmieren klappt, aber wird nicht erkannt. Schaltung habe ich 
mehrfach überprüft. Hier der Link:
http://www.raphnet.net/electronique/usb_game12/index_en.php
Fehlt mir evtl. noch was? Ich habe von der Seite die hex-Datei geflasht, 
ich habe es selbst kompiliert, ich habe die Fuses geflasht, kein Erfolg. 
Irgendein Tipp oder eine Idee wie ich weiter komme? Hilfe wäre toll, 
fehlt vielleicht noch ein Treiber? Keine Reaktion wenn  ich die Platine 
an USB anschließe, Spannungen sind da, Quartz schwingt.
Gruß Pit

von Duda (Gast)


Lesenswert?

Wird das Gerät überhaupt erkannt?

von Duda (Gast)


Lesenswert?

Hmm, auf deren Webseite steht folgendes:

I'm using the human input device (HID) which allows me to tell to the 
computer that the connected USB device is a joystick and has 2 axis 
and 4 or 8 buttons.

Also keine Tastatur.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Duda schrieb:
> Wird das Gerät überhaupt erkannt?

Hans-Peter Dahl schrieb:
> Programmieren klappt, aber wird nicht erkannt.

von Duda (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Hans-Peter Dahl schrieb:
>> Programmieren klappt, aber wird nicht erkannt.

Klar.
Was bedeuter "aber wird nicht erkannt" genau?
"Es wird nicht als Keyboard-Tastendruck erkannt" geht in dieselbe 
Richtung.

Kunde: Mein PC geht nicht mehr
Support: Eventuell Stromausfall?
Kunde: Nein er geht nicht mehr
...
Ergebnis: Die liebgewonnene Webseite wird nicht angezeigt, weil down -> 
Fehlermeldung; davon hat der Kunde aber nichts gesagt.

Sowas kenne ich zur Genüge, daher frage ich nochmal nach.

Da ich aber selber etwas ungenau war:
Wird das USB-Gerät im Gerätemanager (ich gehe mal von Windows aus) 
aufgelistet?

Oder wird das Teil nicht von Programmer erkannt? (Programmieren geht 
dann natürlich nicht wirklich)

Hans-Peter Dahl schrieb:
> eine Reaktion wenn  ich die Platine an USB anschließe
Ist diese Reaktion auf die erwartete Funktion "Tastatur" gemünzt, oder 
auf den Gerätemanager?

von Pit (Gast)


Lesenswert?

Das sieht aus wie ein VUSB-Klon. Schau mal bei obdev.at. Das sind die 
Urheber dieses Verbrechens.

Ich habe im Übrigen auch gerade eine Anwendung von denen auf dem 
Steckbrett aufgebaut. Am Win 7 64 Bit (PC) meldet sich das Teil korrekt 
an. Am Laptop 32 Bit, Win 7 funktioniert es nicht.

Es ist eben nur Gebastel!

Gruß Pit

von Guido Körber (Gast)


Lesenswert?

Also einwandfrei funktionierende Joystick und Keyboard Controller gibt 
es hier:
http://www.codemercs.com/42/?L=0
http://www.codemercs.com/37/?L=0

von Hans-Peter D. (pitdahl)


Lesenswert?

Pit schrieb:
> Das sieht aus wie ein VUSB-Klon. Schau mal bei obdev.at. Das sind die
> Urheber dieses Verbrechens.
>
> Ich habe im Übrigen auch gerade eine Anwendung von denen auf dem
> Steckbrett aufgebaut. Am Win 7 64 Bit (PC) meldet sich das Teil korrekt
> an. Am Laptop 32 Bit, Win 7 funktioniert es nicht.
>
> Es ist eben nur Gebastel!
>
> Gruß Pit

Vielen Dank schon mal für die Hilfe, ich antworte mal an Alle.

Also sorry für die "falsche" Bemerkung Tastatur. Aber das Ding will ich 
ja auch nur zum Anschluss von Flipperknöpfen benutzen. Das vorweg.

Ja, es ist ein VUSB-Klon von obdev.at

Die Schaltung ist korrekt aufgebaut, habe mal ein kleines, eigenes 
Programm laufen lassen.
Programmiere ich aber das oben angesprochene Projekt drauf und schließe 
die Schaltung dann an einen USB Port ran (XP-Rechner und w7), passiert 
nichts. Es hätte doch zumindest ein neues USB Gerät gemeldet werden. Das 
passiert auch nicht, geschweige, das ich Tasten drücken könnte.

Pit. wenn Du das auf einem Laptop zum Laufen gebracht hast, 
(Versuchsaufbau) hast Du mal ne Schaltung davon? Oder hast Du noch 
welche Treiber aufgespielt oder einen Bootloader aufgespielt oder was ?

Ich habe das Ding so verstanden: draufbrennen und ohne zusätzlichen 
Treiber laufen lassen.

Ich versuche gerade den Sourcecode mal in avr studio reinzubekommen um 
zu sehen ob alles ok ist und evtl. mal simulieren. Leider bin ich noch 
sehr kurz dabei und habe im avr studio noch nicht herausbekommen wie ich 
die usbdrv Dateien mit ins Projekt linken kann. Kann mir da jemand 
helfen wie man zusätzliche Dateien ins Projekt linkt?

Vielen Dank, pit

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hans-Peter Dahl schrieb:

> Die Schaltung ist korrekt aufgebaut, habe mal ein kleines, eigenes
> Programm laufen lassen.

Stimmt die Taktfrequenz?

> Ich versuche gerade den Sourcecode mal in avr studio reinzubekommen um
> zu sehen ob alles ok ist und evtl. mal simulieren.

Ich glaube, sowas zu simulieren, kannst du komplett knicken.  Wie
willst du denn die nötigen Stimuli in die Simulation einbringen, die
den Eingliederungsprozess des Hosts in den USB vortäuschen?

Selbst mit einem ordentlichen Debugger hat man bei USB praktisch keine
Chance, da das alles in Echtzeit ablaufen muss, ansonsten bekommt der
Host sofort kalte Füße.  Man kann sich damit allerdings von Breakpoint
zu Breakpoint hangeln um zu verfolgen, ob/wie weit dieser
Eingliederungsprozess (der bei dir ja offenbar nicht sauber läuft)
bereits fortgeschritten ist.

Einfacher ist es allerdings, wenn man das OS des Hosts zu ausreichend
viel Debuginformationen überreden kann.  Ich habe daher, als ich das
letzte Mal was mit USB zu tun hatte, gegen Linux und FreeBSD
gearbeitet und dort jeweils passend Debuginformationen in die
Kerneltreiber gestrickt.  Manchmal muss Opensource ja schließlich auch
seine Vorteile ausspielen. ;-)  Erst, nachdem der Kram mit diesen
beiden sauber lief, hab' ich das Ergebnis dann auf ein Windows
losgelassen.

von Hans-Peter D. (pitdahl)


Lesenswert?

Jörg Wunsch schrieb:
> Hans-Peter Dahl schrieb:
>
>> Die Schaltung ist korrekt aufgebaut, habe mal ein kleines, eigenes
>> Programm laufen lassen.
>
> Stimmt die Taktfrequenz?
>
>> Ich versuche gerade den Sourcecode mal in avr studio reinzubekommen um
>> zu sehen ob alles ok ist und evtl. mal simulieren.
>
> Ich glaube, sowas zu simulieren, kannst du komplett knicken.  Wie
> willst du denn die nötigen Stimuli in die Simulation einbringen, die
> den Eingliederungsprozess des Hosts in den USB vortäuschen?
>
> Selbst mit einem ordentlichen Debugger hat man bei USB praktisch keine
> Chance, da das alles in Echtzeit ablaufen muss, ansonsten bekommt der
> Host sofort kalte Füße.  Man kann sich damit allerdings von Breakpoint
> zu Breakpoint hangeln um zu verfolgen, ob/wie weit dieser
> Eingliederungsprozess (der bei dir ja offenbar nicht sauber läuft)
> bereits fortgeschritten ist.
>
> Einfacher ist es allerdings, wenn man das OS des Hosts zu ausreichend
> viel Debuginformationen überreden kann.  Ich habe daher, als ich das
> letzte Mal was mit USB zu tun hatte, gegen Linux und FreeBSD
> gearbeitet und dort jeweils passend Debuginformationen in die
> Kerneltreiber gestrickt.  Manchmal muss Opensource ja schließlich auch
> seine Vorteile ausspielen. ;-)  Erst, nachdem der Kram mit diesen
> beiden sauber lief, hab' ich das Ergebnis dann auf ein Windows
> losgelassen.

Hi Jörg,
das ich das nicht wirklich simulieren kann ist mir schon klar. Aber wie 
Du selbst schon schreibst, kann man sich durch gewisse Dinge durch 
hangeln mit Breakpoints um zu mindest Teile zu checken um mal weiter zu 
kommen. Beim Übernehmen in avr studio hatte ich schon einige 
Fehlermeldungen mit Variablen und Interrupts, da sich in den avrgcc 
Versionen etc. schon einiges geändert hat.
Das ist ja schon mal was. Außerdem lernt man ja viel dabei.
Leider habe ich noch nicht herausgefunden wie ich im avr-studio 6 die 
usbdrv im BuildProzess mit verlinken kann. Wenn hier noch mal jemand 
einen Tipp hat. Oder muss man das auch über das Makefile machen ?
Gruß Pit

ach P.S. die Taktfrequenz stimmt (12 MHz)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hans-Peter Dahl schrieb:
> Aber wie
> Du selbst schon schreibst, kann man sich durch gewisse Dinge durch
> hangeln mit Breakpoints um zu mindest Teile zu checken um mal weiter zu
> kommen.

Das hat dann jedoch nichts mehr mit deiner Realität zu tun.  Anders
gesagt: selbst, wenn du auf diese Weise in der Simulation gar nichts
findest, wird deine real aufgebaute Schaltung nachher trotzdem noch
nicht funktionieren.

> Leider habe ich noch nicht herausgefunden wie ich im avr-studio 6 die
> usbdrv im BuildProzess mit verlinken kann.

Du musst vermutlich die einzelnen Dateien ins Projekt aufnehmen.
Oder aber, du benutzt einfach das mitgelieferte Makefile.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hans-Peter Dahl schrieb:
> ach P.S. die Taktfrequenz stimmt (12 MHz)

Das ist meiner Erfahrung nach bei V-USB neben den selbstjustierenden 
Oszillatorlösungen die schlechteste Frequenz, weil da am wenigsten Zeit 
für die zeitkritischen Routinen bleibt. Die 16 MHz Version funktioniert 
hier bei allen Rechnern unter MacOS, Debian und XP problemlos.
Wichtig ist übrigens der 1k5 Pullup Widerstand an der D- Leitung und das 
die USB Pegel möglichst genau bei 3,3V sind. Die Lösung mit den Zeners 
in den Datenleitungen ist nicht so gut wie den ganzen MC mit 3,3 Volt zu 
betreiben und die Datenleitungen direkt an USB (über die 68R 
Widerstände) anzuschliessen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Matthias Sch. schrieb:
> Die Lösung mit den Zeners
> in den Datenleitungen ist nicht so gut wie den ganzen MC mit 3,3 Volt zu
> betreiben und die Datenleitungen direkt an USB (über die 68R
> Widerstände) anzuschliessen.

16 MHz bei 3,3 V liegt beim ATmega8 allerdings deutlich außerhalb
der Garantiewerte.

von Pit (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe das sehr spatanisch nachgebaut (Schaltung im Anhang):

- 12 MHz Clock + 2 x 22pF
- R1 mit irgendwas um 2k
- 4 Dioden, um irgendwie auf die 3.6 V zu kommen (+- 0.2 V)

Alles andere habe ich weggelassen, da ich nur etwas testen wollte.

Und genau, das Hex-File einfach aufspielen.

Zu beachten ist, dass bei denen die Versorgungsspannung am ATmega 3.6 
Volt beträgt (das ist so ein Low-Power Teil).
Ich hatte nur einen für 5 Volt. Da musst Du dann die Versorgungsspannung 
eben vor den Dioden abgreifen.

Gruß Pit

von ... (Gast)


Lesenswert?

Hänge C3 mit rein und spendiere ihm einen kleinen Bruder von 100nF.
Bitte so dicht wir möglich an den Prozessor zwischen Pin 7 und 8.
Und dann noch einen zwischen Pin 20 und 22.

VUSB ist trotzdem eine haarige Sache. Unter Linux lief sie bei mir fast 
immer. Auf einem Mac war es schon ein Glücksspiel und Windows ist mir 
sogar reproduzierbar abgestützt (obwohl die Spannungen passten und das 
USB-Gerät nicht zu viel Strom zog).

Ein AVR mit eingebautem USB-Stack (AT90USB162) ist da schon 
pflegeleichter.

von Hans-Peter D. (pitdahl)


Lesenswert?

Matthias Sch. schrieb:
> Hans-Peter Dahl schrieb:
>> ach P.S. die Taktfrequenz stimmt (12 MHz)
>
> Das ist meiner Erfahrung nach bei V-USB neben den selbstjustierenden
> Oszillatorlösungen die schlechteste Frequenz, weil da am wenigsten Zeit
> für die zeitkritischen Routinen bleibt. Die 16 MHz Version funktioniert
> hier bei allen Rechnern unter MacOS, Debian und XP problemlos.
> Wichtig ist übrigens der 1k5 Pullup Widerstand an der D- Leitung und das
> die USB Pegel möglichst genau bei 3,3V sind. Die Lösung mit den Zeners
> in den Datenleitungen ist nicht so gut wie den ganzen MC mit 3,3 Volt zu
> betreiben und die Datenleitungen direkt an USB (über die 68R
> Widerstände) anzuschliessen.

Hi Matthias,
das sind auch mal gute Tipps, habe mir schon gedacht, das die Schaltung 
nicht sehr stabil läuft. Werde mal 16MHz testen. Im übrigen sind diese 
ganzen "USB" Schaltungen mit dem Atmel recht kritisch. Habe auch schon 
einige USB Brenner getestet und auch da war es eher Glücksache obs 
läuft. Vor Allem die 3,6V Dioden machen oft Probleme, also eine eigene 
Spannungsversorgung ist wahrscheinlich angebracht.
In meiner Testschaltung habe ich die Variante mit Zenerdioden und mit 
zwei 1N4148 versucht, habe dann aber an den USB Leitungen nur 2,7V das 
kann schon das Problem sein.
Danke
Gruß Pit

von Hans-Peter D. (pitdahl)


Lesenswert?

... schrieb:
> Hänge C3 mit rein und spendiere ihm einen kleinen Bruder von 100nF.
> Bitte so dicht wir möglich an den Prozessor zwischen Pin 7 und 8.
> Und dann noch einen zwischen Pin 20 und 22.
>
> VUSB ist trotzdem eine haarige Sache. Unter Linux lief sie bei mir fast
> immer. Auf einem Mac war es schon ein Glücksspiel und Windows ist mir
> sogar reproduzierbar abgestützt (obwohl die Spannungen passten und das
> USB-Gerät nicht zu viel Strom zog).
>
> Ein AVR mit eingebautem USB-Stack (AT90USB162) ist da schon
> pflegeleichter.

Werde auch mal Deine Tipps ausprobieren, ist der Einbauort der 
Kondensatoren so kritisch? Da man immer wieder liest, so dicht wie 
möglich an die Pins?
Werde das aber mal beherzigen und noch ein wenig herumprobieren. Muss 
doch zum Laufen zu bringen sein,
danke
Gruß
Pit

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jörg Wunsch schrieb:
> 16 MHz bei 3,3 V liegt beim ATmega8 allerdings deutlich außerhalb
> der Garantiewerte.

Ja, da streust du nochmal so richtig Salz in die Wunde, Safe Operating 
Area ist was anderes. Zu meiner Verteidigung kann ich nur vorbringen, 
das ich bisher keinen AVR hatte, der es nicht geschluckt hat...

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.