Forum: Mikrocontroller und Digitale Elektronik HID Tastatur


von Finkus (Gast)


Lesenswert?

Hallo,

ich möchte mir quasi meine eigene Tastatur bauen die als HID von Windows 
erkannt wird und somit kein Treiber auf dem Windows PC installiert 
werden muß.

Viele Programme lassen sich ja auch über die Tastatur am USB steuern.

Bevorzugt würde ich das mit TI Komponenten machen.
Also MSP430f5xx. Dieser hat USB "Peripherie" integriert.
Nun weiß ich eben nicht, ob die auch einen HID Firmware Stack anbieten.
Selberschreiben kann ich hier wohl getrost vergessen.

Vorstellen könnte ich mir auch einen MSP430f1xx der mit einer HID 
fähigen USB Bridge mich zum Ziel führt.


FTDI bietet ja z.B. RS232 nach USB Bausteine an.
Nun weiß ich nicht, ob Windows die als HID einbindet und somit nach 
keinem Treiber verlangt. Vermute eher das man hier einen Treiber 
benötigt.


Wenn das mit TI Bausteinen so einfach nicht machbar ist, würde ich mich 
an Atmel orientieren.
Die bieten ja den AT90USBxx an.
Soweit ich mich informieren konnte, gibt es da auch einen HID 
Firmwarestack zum Download.

Ansonsten gibt es meineswissen von Microchip Pic auch HID Stacks für 
einige deren Pic Derivate.

Nun ist das Neuland für mich und bevor ich mich da in eine Richtung 
verrenne, wollt ich mal nachgefragt haben, welche Erfahrungen ihr 
gemacht habt und welchen Weg ihr empfehlen könnt.

Links auf Beispielprojekte wären hilfreich.


Gruß

von STK500-Besitzer (Gast)


Lesenswert?

Die RS232-Bausteine sind nicht HID-kompitabel
Der Vinculum sollte aber gehen.
Wenn es für die USB-AVR eine HID-Firmware gibt, dann sollte das wohl 
gehen.

von asdfg (Gast)


Lesenswert?


von zOttel (Gast)


Lesenswert?

Für eine HID-Tastatur sollte vUSB von obdev.at reichen - das ist eine 
USB-Software-Implementierung für Atmel AVRs.

von Finkus (Gast)


Lesenswert?

Wie ist das eigentlich mit der VID (Vendor ID) und PID (Product ID) aus?

Windows prüft doch diese IDs der am USB hängenden Geräte.
Somit auch die von meiner noch nicht vorhandenen Tastatur.

Gibt es da eine allgemein gültige ID die ich da übernehmen kann und
die Windows bereits kennt? Wie und woher kriege ich die. Ist die 
kostenfrei?

Kann ich IDs von anderen HIDs verwenden. Z.B. einer anderen Tastatur?
Ich gaukle dem System somit vor, meine Tastatur ist ein beliebiges HID 
Device von dem und dem Hersteller von dem das System die IDs kennt.
Ist das rechtens?


Wie ist das mit den Derivaten MSP430F55 von Ti und AT90USB von Atmel.
Bekomme ich da eine general Vendor ID mit?


Habe somit noch einige Fragen die bei mir noch nicht geklärt sind.
Gruß

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Für den Privatbereich ist es kein Problem, eine bereits existierende ID 
zu verwenden (am besten nicht die, deiner USB-Tastatur, sonder die 
deines Kumpels ;-).

von Michael B. (mb_)


Lesenswert?

Finkus schrieb:
> Wie ist das eigentlich mit der VID (Vendor ID) und PID (Product ID) aus?
>
> Gibt es da eine allgemein gültige ID die ich da übernehmen kann

Die vendor ID 0x6666 ist allgemein freigegeben für Entwicklungszwecke. 
Die kann jeder ohne weiteres verwenden. Wenn das Gerät nur für dich zu 
Hause ist, dann nimm Vendor 0x6666 und eine product ID die dir gefällt.
Wenn du das Gerät verkaufst, solltest du dir eine offizielle vendor ID 
besorgen. Das kostet etwas.

von Michael B. (mb_)


Lesenswert?

Finkus schrieb:
> Nun weiß ich eben nicht, ob die auch einen HID Firmware Stack anbieten.
> Selberschreiben kann ich hier wohl getrost vergessen.

Warum nicht? HID ist trivial und die komplette spezifikation ist frei 
verfügbar. Bevor man da stundenlang nach etwas fertigem sucht, setzt man 
sich zwei Stunden hin und schreibt es selber. Die Spezifikation solltest 
du so oder so lesen.

von Thomas H. (flaretom)


Lesenswert?

Ich kann auch nur die Verwendung von V-USB empfehlen. Die Anwendung ist 
sehr einfach. Hardware minimal (selbst ATtiny45).
Habe z.b. eine programmierbare Tastatur gebaut (SD-Karte mit 64 
Textmacros, die über 2x8Tasten abgerufen werden können. Da nur privat 
genutzt reicht die VID von obdev. Falls Interesse besteht stelle ich das 
Projekt hier mit rein.
Ansonsten steht unter http://www.obdev.at/products/vusb/license.html was 
zur Verwendung im semi-profesionellen Bereich.

von Finkus (Gast)


Lesenswert?

bin kurz davor mir das AT90USBKey Board von Atmel zu bestellen.

Wenn das mit dem HID Stack so trivial ist, dann sollte ich mir das mal 
ansehen. Mit trivial ist vermutlich die Bedienung der Libs gemeint und 
nicht das schreiben selbiger.

Wenn das mit nem ATiny geht, dann sollte das auch mit einem MSP430g1xx 
gehen.
Diesen wollte ich gerne verwenden.

Mich jedenfalls und wohl auch andere würde es freuen, wenn du dein 
Projekt bezüglich HID Anwendung hier reinstellen könntest.

Wenn ich das auf dem MSP430f149 am laufen habe, werde ich es auch hier 
zur Einsicht einstellen. Will aber mal nicht zu viel versprechen. Muß 
das erst mal hinkriegen. Bei Portpintoggelei sollte der 8Bit Atmel dem 
16Bit MSP überlegen sein.

http://www.usb.org/developers/hidpage/
Das gibt es allerdings auch ne Menge zu lesen und zu verstehen.

Bei den Controllern, die keine "USB Hardware Register" respective USB 
Hardware Funktionalitäten bereitstellen, muß man wohl die D+ und D- 
Pegel durch softwareseitiges ansteuern von Portpins am Controller 
vornehmen.

Denke, da muß man dann strikt die Low Speed 1,5 Mbit/s einhalten.
Mein Bauch sagt mir, das schafft der MSP430f149 mit 8MHz nicht, wenn die 
Daten durch softwareportpinansteuerung rausgetacktet werden sollen.

Nun, Atmel hat auch tolle uCs.

von Thomas H. (flaretom)


Angehängte Dateien:

Lesenswert?

Ok, hier also das MacroPad ;). Bin noch nicht dazugekommen, eine 
komplette Beschreibung zu erstellen. Aber das Grundprinzip müßte aus 
Code und Schaltung ersichtlich sein:
Jeweils 8 Tasten bilden eine Matrix A1..H8. Man drückt zuerst eine 
Spalten- (oder Zeilen-) taste. LED markiert die gewählte Taste. Dann die 
2te Taste. Daraufhin wird in der Datei Macros.txt auf der SD-Karte nach 
den Tastenkoordinaten gesucht und als Tastenscancode ausgegeben. Evt. im 
Makro enthaltene \n etc. werden umgesetzt.
Es gibt noch eine Raster.xls mit der kann man einfach die Macros.txt und 
einen Ausdruck für die Tastatur erzeugen. Damit kann selbst meine 
Freundin (die brauchte sowas nämlich) umprogrammieren ;).

von Michael B. (mb_)


Lesenswert?

Finkus schrieb:
> Wenn das mit dem HID Stack so trivial ist, dann sollte ich mir das mal
> ansehen. Mit trivial ist vermutlich die Bedienung der Libs gemeint und
> nicht das schreiben selbiger.

Also der HID Stack ansich ist sehr einfach. In Grunde braucht man nur 
die HID Descriptor Datenstruktur zu definieren und die Daten per USB zu 
senden. Mehr nicht.
Beispiel HID-Maus: 
http://bu3sch.de/gitweb?p=pdiusb.git;a=blob;f=usb_hid.c;hb=HEAD
Eine Tastatur ist im Grunde ähnlich. Nur halt anderer descriptor und 
Datenstruktur.

> Bei den Controllern, die keine "USB Hardware Register" respective USB
> Hardware Funktionalitäten bereitstellen, muß man wohl die D+ und D-
> Pegel durch softwareseitiges ansteuern von Portpins am Controller
> vornehmen.

Uhm, nein. Software-USB ist zwar prinzipiell möglich, aber ich würde 
davon abraten. Es gibt das ein oder andere Projekt welches Software-USB 
implementiert, aber ich würde sowas nicht in Geräte einbauen die man 
auch benutzen will.
Wenn du schon Angst vor einer HID Implementation hast, ist von einem 
Software-USB Stack strikt abzuraten. ;)

Man könnte einen externen USB-device chip verwenden, wenn der 
Mikrocontroller kein USB anbietet. Das könnte beispielsweise der 
PDIUSBD12 sein.
Hier habe ich einen mini-USB stack mit einem PDIUSBD12 backend und auch 
einem Beispiel-HID frontend: http://bu3sch.de/gitweb?p=pdiusb.git;a=tree

Der Stack ist aber für deine Lösung vielleicht schon etwas oversized, 
wenn du nur Keyboard-HID implementieren willst. Prinzipiell ist der aber 
ziemlich flexibel und lässt sich mit wenig Aufwand schnell anpassen.

von Thomas H. (flaretom)


Lesenswert?

@Finkus
Klar, wenn Du den MSP430f149 verwenden möchtest, dann kannst Du den 
Software-USB Stack vergessen. In V-USB stecken ein paar Jahre 
Entwicklungsarbeit, das portiert man nicht einfach so auf eine andere 
MCU.

@Michael Buesch
> Uhm, nein. Software-USB ist zwar prinzipiell möglich, aber ich würde
> davon abraten. Es gibt das ein oder andere Projekt welches Software-USB
> implementiert, aber ich würde sowas nicht in Geräte einbauen die man
> auch benutzen will.
> Wenn du schon Angst vor einer HID Implementation hast, ist von einem
> Software-USB Stack strikt abzuraten. ;)
Naja, es gibt eine ganze Menge Anwendungen für den V-USB (siehe deren 
Website) und die funktionieren gut.
Ich selber habe bisher 2 super arbeitende Anwendungen (3DP-Vert und das 
oben vorgestellte Macropad) und eine mit Problemen ;). Die Probleme 
entstehen, wenn man zuviel "drumherum" machen möchte. Also weitere 
Interrupts, die das zeitkritische USB-Handling versauen.
Leider braucht der PDIUSBD12 mehr als 8Portspins und der einzige mit 
seriellem Interface, den ich kenne (ISP1161) ist teuer.
Darum löse ich mein Problem beim 3. Gerät mit einem extra ATtiny25 (mit 
V-USB), der zwischen USB und dem Hauptprozessor hängt.

Aber es gibt ja viele Wege...

von min (Gast)


Lesenswert?

Schau mal hier:
http://www.schatenseite.de/dulcimer.html

Eine bessere Grundlage habe ich bislang noch nicht gefunden.

von Master S. (snowman)


Lesenswert?

ich habe hier nicht alles gelesen, aber von Microchip (PIC) gibt's eine 
demo, das eine HID-maus und HID-tastatur beinhaltet. runterladen, 
kopilieren, brennen, fertig.

von Thomas H. (flaretom)


Lesenswert?

@min
Eine Lösung die übrigens auch mit dem V-USB Stack arbeitet (nannte sich 
früher mal "avrusb") ;) .

von Michael B. (mb_)


Lesenswert?

Thomas Horn schrieb:
> Naja, es gibt eine ganze Menge Anwendungen für den V-USB (siehe deren
> Website) und die funktionieren gut.

Ich habe nie was anderes behauptet. ;)

> Ich selber habe bisher 2 super arbeitende Anwendungen (3DP-Vert und das
> oben vorgestellte Macropad) und eine mit Problemen ;). Die Probleme
> entstehen, wenn man zuviel "drumherum" machen möchte. Also weitere
> Interrupts, die das zeitkritische USB-Handling versauen.

Genau. Und weil der Threadstarter möglicherweise schon Probleme mit HID 
hat, hab ich halt von software-USB abgeraten. Was dann IMO nur 
vernünftig ist.

von Thomas H. (flaretom)


Lesenswert?

@ Michael Buesch
Wie so oft hängt es von der Umgebung ab.
Aber Du hast natürlich recht, wenn USB für jemanden schon Neuland ist, 
sollte er sich im Zweifelsfall nicht noch eine Baustelle in Form eines 
SW-Stacks reinholen (,wobei manche USB Bausteine auch knifflig sein 
können).

von guest (Gast)


Lesenswert?

Hallo Finkus,

wenn du neben deiner tastatur auch noch eine/zwei datenschnittstellen 
brauchst, dann schau mal hier. Einfach über i2c anzusteuern: 
http://www.rahand.eu.

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.