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ß
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.
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ß
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 ;-).
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.
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.
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.
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.
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 ;).
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.
@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...
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.
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.
@ 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).
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.