USB-Lib für Bascom

OP (Firma: Q3) #863124
Lesenswert?

Hallo,

ich bin auf der Suche nach einer Library, die unter Bascom ein Soft-USB 
bereitstellt (CDC oder HID). Leider bin ich in C nicht so firm, dass ich 
eines der vielen Software-USB-Beispiele dafür anpassen könnte, die es im 
Web so gibt.

Könnte natürlich sein, dass es aus bestimmten Gründen nicht möglich ist, 
dann bitte ich darum, dieses hier zu diskutieren. Danke.

Frank
OP (Firma: Q3) #863152
Lesenswert?

> Du willst also einen AVR ohne Hardware-USB verwenden? Das USB-Timing ist
> kritisch ...

Ich hörte/las, dass es bei USB einen Low-Speed-Modus gibt. Dass damit 
keine großen Dinge machbar sind ist klar, aber vielleicht diese oder 
jene Kleinigkeit. Ginge da Nichts im Interrupt?

Evtl. könnte man als HID-Device zwischen Programm-Abarbeitung und 
USB-Kommunikation umschalten? Wie schnell wird die Verbindung eigentlich 
nach einer (software-seitigen) Unterbrechung wieder aufgenommen?

Wenn das geht, könnte man ja einen Puffer mit Daten füllen und dann für 
1 Sekunde in den USB-Modus schalten, die Daten senden, evtl. welche 
empfangen und sich dann wieder ausklinken ... ?

Frank
#863167
Lesenswert?

USB ist kein "Bus", sondern eine Strikte Host/Device-Architektur. Dein 
AVR kann also nicht einfach senden, wenn er grad Lust und Daten hat, er 
muss warten bis der PC ihn dazu auffordert.
Und nach der Aufforderung muss er sofort antworten (minimaler Timeout).
Das ist schon in C fast nicht hinzubekommen, diese 
Software-Implementierungen machen das alle mit ASM.
Dabei ergeben sich dann sogar noch Einschränkungen für den restlichen 
Application-Code, wie z.B. andere ISRs / Bereiche mit ausgeschalteten 
IRQs dürfen max. xx Taktzyklen lang sein usw.

einfache Lösung: Nimm nen zweiten AVR (Tiny25/45/85 z.B.), lass den das 
ganze USB machen, und dein "Haupt"-AVR beschickt den nur mit Daten (über 
SPI/I2C/UART)

Ist immernoch billiger als ein FT232...
OP (Firma: Q3) #863182
Lesenswert?

OK. Lass' und das mal bitte unter dem speziellen Aspekt HID diskutieren.

Beispiel zweite Tastatur (gerade eben ausprobiert). Wenn ich die an 
meinen Mac stecke, wird die innerhalb einer nicht fühlbaren Zeit 
angemeldet und ich kann sie parallel zur ersten benutzen**

Ich kann sie abziehen - nix passiert. Ich stecke sie wieder an, sie ist 
(quasi) sofort verfügbar.

Dass die eigentlichen USB-Routinen in C oder Assembler sein müssen, ist 
mir klar. Aber wenn man, wie oben beschrieben, zwischen den Programmen 
umschalten könnte ... Wenn man die USB-Pins hochohmig schaltet, sollte 
das doch den gleichen Effekt wie Stecker rausziehen haben, oder?

Frank

**(ausser beim allerersten mal, da kommt ein Dialog zur Layouterkennung, 
dann aber nie wieder)
#863189
Lesenswert?

Das kannst du natürlich versuchen. Dafür würds reichen, den Pullup, der 
an einer der Datenleitungen hängt, schaltbar zu machen.
Wie und ob du die beiden Programmteile dann aber zusammenlinken 
kannst.... Keine Ahnung.

Rein theoretisch sollte das ganze auch ohne ständiges an- und abmelden 
in Bascom gehen (Die armen Windows-User würden bei dem ständigen 
ding-dong-device erkannt ja wahnsinnig werden), vermutlich mit der 
Einschränkung dass keine anderen Interrupts verwendet werden dürfen, und 
evtl einige Libraries nicht mehr gehen...
OP (Firma: Q3) #863243
Lesenswert?

> Rein theoretisch sollte das ganze auch ohne ständiges an- und abmelden
> in Bascom gehen (Die armen Windows-User würden bei dem ständigen
> ding-dong-device erkannt ja wahnsinnig werden), vermutlich mit der
> Einschränkung dass keine anderen Interrupts verwendet werden dürfen, und
> evtl einige Libraries nicht mehr gehen...

:-) Windows-User ...

Ja, ok. Jetzt müsste sich nur noch jemand finden, der in der Lage ist, 
so eine Bacom-Lib oder einen einfügbaren ASM-Block zurechtzufriemeln :-(

(So schnell können Stimmungen schwanken ...)

Frank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren