Ich habe eine Frage zu V-USB.
Ist es möglich einen AVR gleichzeitig als zwei USB-Teilnehmer arbeiten
zu lassen?
z.B.: einmal als UART zu USB Wandler und einmal als USB-Joystick.
Der Zweck ist einem AVR, der als Joystick Daten an den PC sendet, vom PC
aus Daten zu senden. Aktuell belege ich zwei USB-Schnittstellen um diese
Aufgabe zu erledigen. Es währe aber schön, wenn ich das auf einen
USB-Anschluss zusammenfassen könnte.
Kennt sich jemand von euch in dieser Matherie aus?
Ich habe zwar schon die Dokumentation von V-USB durchgeackert, bin aber
aus dem Ganzen nicht so richtig schlau geworden.
Objective Development betreibt ein eigenes Forum, das sich mit V-USB
auseinandersetzt, vielleicht findet sich dort eine Antwort auf die
Frage.
http://forums.obdev.at/viewforum.php?f=8
Klaus schrieb:> Du kannsrt froh sein, wenn Dein V-USB überhaupt zuverlässig> funktioniert. Die Idee ist zwar genial, aber absolut auf Nadel> gestrickt.
Hatte damit noch keine Probleme – läuft recht gut...
Bernd, wenn du eine Antwort findest, bitte veröffentliche sie auch hier,
mich würde das Ergebnis auch interessieren!
Leute, könnt ihr bitte ernsthaft bleiben?
Ich will nicht dass der Beitrag hier in den Spam-Ordner/Off-Toppic/...
wandert.
Ich habe gerade ein wenig gegoogelt und habe festgestellt dass es bei
obdev das Projekt WiSHABI gibt.
http://vusb.wikidot.com/project:wishabi
Der Dokumentation nach arbeitet es als Maus und Tastatur.
Ich habe bis jetzt nur die Dokumentation durchgelesen.
Da steht aber nicht ausdrücklich drinnen ob der Prozessor gleichzeitig
Maus und Tastatur bedienen kann oder ob erst das eine Gerät abgemeldet
werden muss um das Andere anzumelden.
Ich werde einmal den Quellcode durchackern um genaueres zu erfahren.
@Rufus Τ. Firefly
Ich habe bewusst hier geschrieben, da es so ausgesehen hatte also ob im
vusb-Forum nichts mehr los ist.
Da waren drei Spam-Beiträge schon etwas länger drinnen und die Antworten
waren auch nicht so reichlich.
Desswegen dachte ich, dass es besser ist hier nachzufragen, da hier das
geballte Wissen anwesend ist.
Bernd schrieb:> Der Dokumentation nach arbeitet es als Maus und Tastatur.
Das ist was anders, als Du suchst, das ist trotzdem nur ein HID, und
nicht zwei Devices in einem.
Den Tip mit dem obdev.at-Forum gab ich Dir, weil die schließlich die
Leute sind, die den Kram entwickelt haben.
Dann mußt Du halt in den sauren Apfel beißen und Dir auf Deinem
Host-System Deinen USB-Treiber selber stricken.
Also eine der freien USB-IDs nehmen und dann auf dem Hostsystem Deine
Applikation entsprechend ansteuern.
Ich gehe mal davon aus das Du eine Art Forcefeedback-Lustknüppel
gebastelst hast.
Dafür gibt es ebenfalls standardisierte Treiber mußt Du selbst mal
nachsehen, wurden mal von MS vorgestellt.
V-USB macht das USB in Software und belegt damit ~90% CPU-Leistung.
D.h. ein AVR mit SW-USB kann fast nichts anderes mehr machen, erst recht
kein 2.USB.
Und deshalb wird man V-USB auch nie in größeren Projekten finden, die
richtige Programme mit Interrupts abarbeiten sollen.
Nimm einen MC mit richtigem USB, z.B. AT90USB162.
Peter
Peter Dannegger schrieb:> Und deshalb wird man V-USB auch nie in größeren Projekten finden, die> richtige Programme mit Interrupts abarbeiten sollen.
Nicht zwangsläufig.
Die Fragestellung ist allerdings wie er über einen einzelnen USB-Kanal
an seinem Hostrechner zwei Dinge gleichzeitig tun kann.
Ob er dazu nun einen USB2RS232 in sein µC-Projekt einbaut oder gleich
einen dicken ARM nimmt ändert an seinem Problem nichts.
Peter Dannegger schrieb:> D.h. ein AVR mit SW-USB kann fast nichts anderes mehr machen, erst recht> kein 2.USB.
Ein Kompositgerät ist aber was anderes als V-USB zweimal laufen zu
lassen. Das ist zumindest hypothetisch denkbar.
Zu klären aber wäre, ob das für das vom Threadstarter vorgesehene
Anwendungsszenario überhaupt erforderlich ist. Einem HID können auch
Daten gesendet werden, das beweist jede USB-Tastatur, deren LEDs für
Num-, Caps- und ScrollLock vom PC aus angesteuert werden können.
Rufus Τ. Firefly schrieb:> Ein Kompositgerät ist aber was anderes als V-USB zweimal laufen zu> lassen. Das ist zumindest hypothetisch denkbar.
Auch praktisch. Man muss sich mit den USB-Descriptoren auskennen und
Weichen in den Treiber einbauen. Probleme gibt es eher an anderer
Stelle:
1.) Ein CDC (UART) ist ein Blockdevice und verlangt laut USB-Standard
mindestens ein Fullspeed-Device. V-USB kann aber nur Low-Speed, so dass
Windows und Linux sich in der Regel weigern, das einzubinden.
2.) Windows sperrt Tastaturen und Mäuse für Anwendungsprogramme, so dass
sie mit libusb nicht mehr angesprochen werden können. (Unter Linux geht
es)
Nein, ich will kein Force-Feedback machen.
Dass ist aber eine Idee wie ich die Daten rüberschaufeln könnte.
Ich will ein Gerät dass seine Daten über einen FT232 an den PC schickt
als Joystick verwenden.
An die Hardware des angeschlossenen Gerätes komme ich leider nicht ran,
weil alles vergossen wurde.
Rein Softwaremäßig würde dass nur mit einem eigenen Treiger
funktionieren, der die Daten abholt und als Joystick zur Verfügung
stellt.
Um das Schreiben eines Treibers für WinXP, Win7 und Linux zu vermeiden,
will ich die Daten an einen AVR senden, der sie als Joystick wieder
zurücksendet.
Ich weis, dass das eine blöde Idee ist.
Aber ich möchte versuchen es trotzdem zu schaffen.
Detlev T. schrieb:> V-USB kann aber nur Low-Speed, so dass> Windows und Linux sich in der Regel weigern, das einzubinden.
Ganz so schlimm ist es nicht; Windows toleriert es, und nur einige
Linux-Varianten weigern sich. Das Ärgernis bei Windows ist, daß trotz
vorhandener CDC-Treiber für die Installation immer noch eine *.inf-Datei
erforderlich ist, die je nach Windows-Version auch noch signiert sein
muss.
Technisch ist das vollkommen unnötig, da Windows bei anderen
USB-Geräteklassen ohne so einen Kram auskommt (HID, MSD etc.).
Bernd schrieb:> Ich will ein Gerät dass seine Daten über einen FT232 an den PC schickt> als Joystick verwenden.
Du willst also einen "Übersetzer" bauen, USB-Seriell nach USB-Joystick ?
Es dürfte weniger Aufwand machen das über eine Terminalanwendung auf dem
Host-Rechner zu realisieren als mittels dazwischengeschalteten µC.
scherzkeks schrieb:> Du willst also einen "Übersetzer" bauen, USB-Seriell nach USB-Joystick ?> Es dürfte weniger Aufwand machen das über eine Terminalanwendung auf dem> Host-Rechner zu realisieren als mittels dazwischengeschalteten µC.
Ich wollte den Mikrokontroller nirgens dazwischensetzen.
Ich will nur die Daten, die ich von einem USB-Gerät bekomme über USB an
einen Mikrokontroller senden, der diese wieder als Joystick an den PC
zurückzusenden.
Ich habe gestern einen kleinen Test mir einem normal FT232 gemacht der
die Daten über den UART an einen V-USB-Joystick gesendet hat.
Ich weis nicht ob ich irgendwo einen Fehler gemacht aber das Ganze hat
eine spürbare Zeitverzögerung gehabt.
Das Projekt war wohl ein Schuss in den Ofen.
Bernd schrieb:> Ich will nur die Daten, die ich von einem USB-Gerät bekomme über USB an> einen Mikrokontroller senden, der diese wieder als Joystick an den PC> zurückzusenden.
Dann mach folgendes:
Nimm einen VNC1L ("Vinculum"), das ist ein USB-Host, für den es Firmware
gibt, um darüber FT232 anzusteuern.
Schließe an den das USB-Gerät an, das einen FT232 verwendet. Schließe
einen µC an den VNC1L an, der mit dem VNC1L kommuniziert, und wiederum
via V-USB ein HID, in Deinem Fall eben den Joystick implementiert.
Der PC bekommt in diesem Falle ausschließlich den Joystick zu Gesicht
und Du musst kein Kompositgerät entwickeln.
Einfacher wäre natürlich das Entfernen der Vergussmasse, dann könnte man
sämtliche Teile bis auf den µC mit V-USB und HID/Joystick weglassen ...
Rufus Τ. Firefly schrieb:> Nimm einen VNC1L ("Vinculum"), das ist ein USB-Host, für den es Firmware> gibt, um darüber FT232 anzusteuern.
Dass hört sich interessant an.
Ich muss mal schaun in wie weit der Datenstrom verschlüsselt ist und wie
das Komunikationsprotokoll ist.
(Ich habe bis jetzt die Daten nur vom Programm des Herstellers über eine
offene Schnittstelle abgeholt)
Kein Name schrieb:> Nicht so schnell aufgeben!> Dein MC kann sich als HID anmelden. Da lässt sich noch einiges an> Polling-Intervall und Paketgröße drehen.
Dass problem ist eher die stille-Post mäßige Datenkette.
Die Daten werden über USB an den PC gesendet.
Die Software des Herstellers empfängt die Daten und stellt sie meinem
Programm als Rohdaten zur Verfügung.
Mein Programm nimmt die Daten und sendet sie über USB an einen AVR.
Dieser AVR arbeitet als HID Joystick und schickt sie wieder an den PC
zurück.
Da anzufangen im AVR zu optimieren hat absolut keinen Sinn.
Es war nur ein Versuch ob es funktioniert.
Ich werde mir jetzt einmal in die Komunikation hängen und schaun ob ich
da mit den Daten etwas anfangen kann.
>Der Dokumentation nach arbeitet es als Maus und Tastatur.
Wie bereits erwähnt: Verbund-Gerät.
>Da steht aber nicht ausdrücklich drinnen ob der Prozessor gleichzeitig>Maus und Tastatur bedienen kann
Nein, es geht aber so schnell nacheinander, dass Du davon nix
mitbekommst.
Maus und Tastatur sind HID-Geräte. Der Unterschied, ob ein Gerät das
eine oder andere ist, liegt ausschließlich an den sog. Deskriptoren.
Diese beschreiben die Funktion eines Gerätes. HID versendet seine Daten
über Reports. Auch diese Reports werden mit Deskriptoren definiert.
Ergänze ich nun einen Maus-Report-Descriptor mit einem
Keyboard-Descriptor, dann kann mein Gerät beides (natürlich muss man
noch ein paar Kleinigkeiten anpassen, aber vom Prinzip her stimmt das).
>Ich will ein Gerät dass seine Daten über einen FT232 an den PC schickt>als Joystick verwenden.
So macht man das aber eher nicht! Ich käme auch nicht auf die Idee eine
Tastatur mit einer Maus zu simulieren: 50 x klicken = 'a', 51 x = 'b'.
>Um das Schreiben eines Treibers für WinXP, Win7 und Linux zu vermeiden,>will ich die Daten an einen AVR senden, der sie als Joystick wieder>zurücksendet.
Wenn Du für Deinen PC keine Treiber schreiben möchtest, warum nimmst Du
dann nicht die vorgesehenen. Alles was zu tun ist, Dein USB Gerät muss
sich als Joystick anmelden (da HID!). Also läuft es wieder auf die
Deskriptoren hinaus, sonst nix.
Es sei Dir gesagt: vor den Erfolg haben die Götter den Schweiss gesetzt
(sollte so richtig sein).
Gruß Potter
Potter schrieb:>>Ich will ein Gerät dass seine Daten über einen FT232 an den PC schickt>>als Joystick verwenden.> So macht man das aber eher nicht! Ich käme auch nicht auf die Idee eine> Tastatur mit einer Maus zu simulieren: 50 x klicken = 'a', 51 x = 'b'.
Das Eingabegerät liefert 7 16 Bit Analogwerte und 12 boolsche
Digitalwerte.
Der Gerät kann von der Herstellersoftware her neben seiner eigentlichen
Funktion noch Maus und Tastatur Simulieren.
Das Simulieren eines Joysticks wird zwar schon eine gefühlte Ewigkeit
versprochen, wurde aber bis jetzt noch nicht implementiert.
Potter schrieb:> Alles was zu tun ist, Dein USB Gerät muss> sich als Joystick anmelden (da HID!). Also läuft es wieder auf die> Deskriptoren hinaus, sonst nix.
Genau darum gehts ja die ganze Zeit.
Aber das Ganze ist so aufgebaut, dass ich das Gerät komplett zerfleddern
müsste um den Joystick-Chip direkt einzubauen.
Da währe mir das Risiko etwas zu zerstören viel zu groß.
Ich versuche gerade das Komunikationsprotokoll herauszufinden um
abschätzen zu können ob ich mit dem Vinculum / AVR Übersetzer eine
Chance zu haben.
Potter schrieb:> Es sei Dir gesagt: vor den Erfolg haben die Götter den Schweiss gesetzt> (sollte so richtig sein).
Das weis ich.
Wenn man ohne Plan mit dem Hammer auf einem großen Stein herumzuhammert
fließt auch Schweiß.
Es ist aber trotztem besser zu fragen und dann nach einem Tipp mit einem
Presslufthammer ans Werk zu gehen.
In diesem Fall währen die Daten 3 mal über USB versendet worden wenn
nicht Rufus Τ. Firefly die gute Idee gehabt hätte einen USB-Host Chip zu
verwenden.
>Der Gerät kann von der Herstellersoftware her neben seiner eigentlichen>Funktion noch Maus und Tastatur Simulieren.
Das ist ein fertiges Gerät - also nichts mit Zugriff auf die Firmware?
Das ging beim Durchlesen verloren. Dann kannst Du natürlich nichts an
den Deskriptoren ändern.
> Es sei Dir gesagt: vor den Erfolg haben die Götter den Schweiss gesetzt> (sollte so richtig sein).
Damit wollte ich nur sagen, falls Du an der Firmware rumschrauben
willst, musst Du Dich in die USB-Thematik einlesen. Aber wenn es nun ein
Fertiggerät ist fällt das flach.
Rufus Τ. Firefly schrieb:> Da allem Anschein nach eine serielle Schnittstelle genutzt wird, sollte> das mit einem "Mithörer" à la PortMon oder "Free Serial Port Monitor"> leicht untersuchbar sein.
Ich lausche eigentlich immer mit dem Portmonitor von Microsoft.
(Genauer gesagt von der Firma die von Microsoft aufgekauft wurde.)
Das Progrämmchen finde ich sehr hilfreich.
Die Datenmenge beim Initalisieren und im Betrieb ist nicht gerade wenig.
Da muss ich erst den Aufbau verstehen und eine Schnittstelle selbst
stricken zu können.
Erst wenn ich vom PC aus mit dem Teilnehmer reden kann wie es die
Originalsoftware tut, werde ich mich an die Hardware wagen.