Forum: Mikrocontroller und Digitale Elektronik Kann man mit V-USB zwei Geräte gleichzeitig auf einem AVR betreiben


von Bernd (Gast)


Lesenswert?

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.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Hab jetz nur ne Notfallösung:
Zur Not kommt eben nen USB Hub IC auf deine Platine.
zB TUSB2046B

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

Du kannsrt froh sein, wenn Dein V-USB überhaupt zuverlässig 
funktioniert. Die Idee ist zwar genial, aber absolut auf Nadel 
gestrickt.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

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!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Klaus schrieb:
> aber absolut auf Nadel
> gestrickt.

... auf Kante genäht vielleicht?!

von Klaus (Gast)


Lesenswert?

>... auf Kante genäht vielleicht?!
Natürlich! Die Nadel war ja heiss.

von Bernd (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von scherzkeks (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von scherzkeks (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Detlev T. (detlevt)


Lesenswert?

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)

von Bernd (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.).

von scherzkeks (Gast)


Lesenswert?

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.

von Bernd (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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 ...

von Kein Name (Gast)


Lesenswert?

Nicht so schnell aufgeben!
Dein MC kann sich als HID anmelden. Da lässt sich noch einiges an 
Polling-Intervall und Paketgröße drehen.

von Bernd (Gast)


Lesenswert?

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.

von Potter (Gast)


Lesenswert?

>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

von Bernd (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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/

von Potter (Gast)


Lesenswert?

>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.

von Bernd (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.