Forum: Mikrocontroller und Digitale Elektronik Attiny4313 VUSB Problem mit USB-Verbindung


von AVR_Banause (Gast)


Lesenswert?

Hi, hab ein Problemchen bei dem ich nicht mehr weiterkomme.

Ich möchte einen AtTiny4313 als USB HID-Device erkennen lassen (mittels 
VUSB-Lib). Es soll eine Art Mini-Tastatur werden. Sowas habe ich schon 
mehrfach mit einem AtTiny85 mit internen PLL als Taktgeber 
funktionsfähig aufgebaut. Nur dieses mal scheint es mit dem größeren 
AtTiny nicht zu funktionieren zu wollen.

Schaltplan:
vom Prinzip der da, nur mit Attiny4313:
http://www.mikrocontroller.net/attachment/143032/with-zener.png

D+ an INT0 (PD2)
D- an INT1 (PD3)

sonst auch 16Mhz und die laufen auch stabil (mit Timer und Oszi 
gemessen)

Software:
Mit verschiedenen Testprogrammen versucht (ja ich habe immer die 
usbconfig.h angepasst) - leider immer das gleiche verhalten. Kann ich 
später gern mal zeigen, bin nur gerade nicht vor Ort.

Leider wird die Schaltung überhaupt nicht am PC erkannt. Also es tut 
sich wirklich nix. Es wird nicht einmal nach einem Treiber o.ä. gesucht. 
An mehreren PCs immer das gleiche.
Die Kommunikation scheint jedoch stattzufinden (USB Interrupt auf dem 
Controller wird ausgelöst).
Wenn ich den Controller in den Reset ziehe, zeigen mir die PCs an 
"unbekanntes Device" - vermutlich erkennt es dann den 1,5k Pullup an D-.

Also scheint sich irgendwie keine richtige verbindung aufzubauen - 
leider sitz ich hier aufm Schlauch und weiß nicht recht, woran es liegen 
könnte.

bereits versucht - aber gleiches Resultat:
- dieses Tutorial mehrfach durchgeaktert: 
http://codeandlife.com/2012/01/25/avr-attiny-usb-tutorial-part-2/
- 12Mhz Quarz
- diverse andere Einstellungen im usbconfig.h
- Verdrahtung mehrfach überprüft
- Spannungsversorgung (+5V) von extern

Mich verwundert, dass sich wirklich nix tut. Hatte jemand schonmal so 
ein Problem oder irgend einen Tipp, wo ich ansetzen könnte?

besten Dank

von Bohaj (Gast)


Lesenswert?

Das Tool USBTREEVIEW von http://www.uwe-sieber.de/ kann Hilfe leisten.

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


Lesenswert?

AVR_Banause schrieb:
> sonst auch 16Mhz und die laufen auch stabil (mit Timer und Oszi
> gemessen)

> bereits versucht - aber gleiches Resultat:
> - 12Mhz Quarz

Soweit ich meine VUSB-Versuche für den guloprog in Erinnerung habe, 
braucht VUSB entweder 12,0 oder 16,5 MHz. Mit 16,0 MHz wars damals 
zumindest nicht möglich.

Und – die jeweils verwendete Frequenz muss in die Parametrierung von 
VUSB eingetragen werden.
Grundsätzlich geht das auch ohne Quarz, aber dazu müsste der interne 
Oszillator mit 16,5 MHz lauffähig sein. Das geht beim ATtiny4313 nicht, 
dazu müsstest du z.B. den ATtiny861A verwenden (auch 20 Pins).

von Jim M. (turboj)


Lesenswert?

Markus W. schrieb:
> Soweit ich meine VUSB-Versuche für den guloprog in Erinnerung habe,
> braucht VUSB entweder 12,0 oder 16,5 MHz. Mit 16,0 MHz wars damals
> zumindest nicht möglich.

Der aktuelle Code in Github enthält Assembler für 16,0 MHz. Der muss 
korrekt eingebunden werden, und auch die Fuses müssen stimmen.

Falls sich das Device als HID meldet sieht man die Treiberinstallation 
eventuell nicht, da automagisch.

Unter Windoof sieht man angesteckte USB Geräte in der Baumansicht des 
Gerätemanagers, dort würde man An- und Abstecken am Besten sehen.

von AVR_Banause (Gast)


Lesenswert?

Markus W. schrieb:
> Mit 16,0 MHz wars damals
> zumindest nicht möglich.

Ist es aber - seit wann weiß ich nicht.

Markus W. schrieb:
> Und – die jeweils verwendete Frequenz muss in die Parametrierung von
> VUSB eingetragen werden.

Jop, habe ich auch immer gemacht und mit einem Timer & LED-blinken 
verifiziert. Scheint diesbezüglich alles stimmig zu sein.

Bohaj schrieb:
> Das Tool USBTREEVIEW von http://www.uwe-sieber.de/ kann Hilfe leisten.

Nice, werd ich mir mal anschauen wenn ich daheim bin. Danke schonmal - 
so ein Tool hab ich sowieso gesucht.

von AVR_Banause (Gast)


Lesenswert?

Jim M. schrieb:
> Unter Windoof sieht man angesteckte USB Geräte in der Baumansicht des
> Gerätemanagers, dort würde man An- und Abstecken am Besten sehen.

Jo, ist mir bekannt. Leider passiert wirklich überhaupt nix, wenn ich 
die Schaltung an- bzw. abstecke. Mit dem Oszi kann ich zumindest eine 
bestimmte "Kommunikation" auf den USB-Leitungen sehen. Auch der 
USB-Interrupt am Controller wird ausgelöst - aber es meldet sich nicht 
als Gerät bzw. meldet sich im Gerätemanager nix.

von Thorsten (Gast)


Lesenswert?

Usb Erkennung läuft in 3 Schritten ab.

1. Durch den pull-up an d- wird erkannt, dass es sich um ein Low Speed 
Device handelt. Wenn da nix kommt oder ein High Speed Device erkannt 
wird ist d+/d- vertauscht. Diese Erkennung muss funktionieren auch wenn 
der Atmega leer ist - sofern der pull up nicht mit einem Transistor 
gesteuert wird.
2. Dann wird der Device descriptor gelesen, wenn das nicht geht ist 
v-usb falsch konfiguriert oder die Leitungen passen nicht. Auch drauf 
achten, dass usb differentielle Signale benutzt. Die Leitungen müssen 
gleich lang sein.
3. Dann wird der Treiber anhand des Device descriptor ausgesucht und 
installiert.

von AVR_Banause (Gast)


Lesenswert?

hmm...hab jetzt mal mit dem USB_Device_Tree-Tool was versucht 
auszulesen....
1
    =========================== USB Port3 ===========================
2
3
Connection Status        : 0x09 (Device is enumerating)
4
Port Chain               : 3-3
5
6
      ======================== USB Device ========================
7
8
DriverKeyName            : ERROR_BAD_COMMAND
9
10
        ---------------- Connection Information ---------------
11
Connection Index         : 0x03 (3)
12
Connection Status        : 0x09 (DeviceEnumerating)
13
Current Config Value     : 0x00
14
Device Address           : 0x00 (0)
15
Is Hub                   : 0x00 (no)
16
Number Of Open Pipes     : 0x00 (0)
17
Device Bus Speed         : 0x00 (Low-Speed)
18
19
        ------------------ Device Descriptor ------------------
20
bLength                  : 0x00 (0 bytes)

also entweder bin ich wirklich so verstrahlt, dass ich D+/D- vertausch 
habe (hab es aber schon 100x kontrolliert) oder der ca 2cm Kabelverhau 
auf der Platine macht probleme...

Ich check nochmal  alles durch. Danke erstmal für die Feedbacks.

von Jim M. (turboj)


Lesenswert?

AVR_Banause schrieb:
> Device Bus Speed         : 0x00 (Low-Speed)
>
>         ------------------ Device Descriptor ------------------
> bLength                  : 0x00 (0 bytes)
>
> also entweder bin ich wirklich so verstrahlt, dass ich D+/D- vertausch
> habe

Hast Du nicht. Denn sonst würde da "Full Speed" stehen.

Eine Länge von 0 beim Device Deskriptor ist aber nicht OK. Da hätte es 
irgendwann - eventuelle aber erst nach Minuten - ein gelbes 
Ausrufezeichen im Gerätemanager geben müssen.

Ich hänge zum Debuggen von USB die Geräte gerne mal an eine Linux Kiste, 
der Kernel ist da gesprächiger (siehe dmesg).

von Clemens L. (c_l)


Lesenswert?

AVR_Banause schrieb:
> Mit dem Oszi kann ich zumindest eine bestimmte "Kommunikation" auf
> den USB-Leitungen sehen.

Das musst du halt dekodieren.  Oder zumindest hier zeigen.

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.