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.
Hab jetz nur ne Notfallösung: Zur Not kommt eben nen USB Hub IC auf deine Platine. zB TUSB2046B
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
Du kannsrt froh sein, wenn Dein V-USB überhaupt zuverlässig funktioniert. Die Idee ist zwar genial, aber absolut auf Nadel gestrickt.
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!
>... auf Kante genäht vielleicht?!
Natürlich! Die Nadel war ja heiss.
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 ...
Nicht so schnell aufgeben! Dein MC kann sich als HID anmelden. Da lässt sich noch einiges an Polling-Intervall und Paketgröße drehen.
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.
Bernd schrieb: > Ich versuche gerade das Komunikationsprotokoll herauszufinden 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. http://technet.microsoft.com/de-de/sysinternals/bb896644.aspx http://www.serial-port-monitor.com/
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.