Ich habe mir einmal das Referenzprojekt von
https://www.obdev.at/products/vusb/easylogger.html
aufgebaut. Die Schaltung ist ja auch sehr einfach und hoffentlich nicht
so fehlerträchtig. Die gängigen Fehler sind vermieden (UB sauber und
kurz mit 220nF terminiert, alle Verbindungen kurz). Einzige Änderung am
AD Wandler hängt ein lm335 zur Temperaturmessung. Der liefert sinnvolle
Spannungen.
Ein kleines Testprogramm tut auf der Hardware problemlos und läßt die
LED blinken. Nun flugs das Referenzprojekt angepaßt (tiny45 -> tiny85,
Programmer ist anders), make - alles Ok, make flash, alles Ok.
Beim Anstecken an den USB Bus bekomme ich aber leider keine Funktion
sondern
diese Fehler (Linux):
Jan 31 22:34:29 hans kernel: usb 4-1.6: device descriptor read/64, error
-32
Jan 31 22:34:30 hans kernel: usb 4-1.6: device descriptor read/64, error
-32
Jan 31 22:34:30 hans kernel: usb 4-1.6: new full-speed USB device number
6 using ehci-pci
Jan 31 22:34:30 hans kernel: usb 4-1.6: device descriptor read/64, error
-32
Jan 31 22:34:30 hans kernel: usb 4-1.6: device descriptor read/64, error
-32
Jan 31 22:34:30 hans kernel: usb 4-1.6: new full-speed USB device number
7 using ehci-pci
Jan 31 22:34:31 hans kernel: usb 4-1.6: device not accepting address 7,
error -32
Jan 31 22:34:31 hans kernel: usb 4-1.6: new full-speed USB device number
8 using ehci-pci
Jan 31 22:34:31 hans kernel: usb 4-1.6: device not accepting address 8,
error -32
Jan 31 22:34:31 hans kernel: usb 4-1-port6: unable to enumerate USB
device
Beim drücken des Tasters geht die LED an, aber es kommen keine
Tastaturdaten. Die HW ist so simpel, da kann doch nichts schiefgehen ?
Einzige Unbekannte ist das USB Kabel, das mußte eine alte USB Maus
spenden und ist ca. 80cm lang und ungeschirmt.
Im Forum hatte ich ein paar ähnliche Beiträge gefunden wo es kritisch zu
sein scheint mit dem Takt, der im Beispielcode automatisch kalibriert
wird.
Ich habe diese Routine einmal entfernt und den Takt der CPU mit einem
Fregquenzzähler (Testrogramm LED an, LED aus, 6 Taktzyklen) genau auf
16,50x MHz abgeglichen - kein Erfolg, gleiches Verhalten.
Hat jemand eine Idee was das sein kann ?
Ich bin recht ratlos.
Der Treiber sollte wohl recht gut "abgehangen" sein und keine Bugs
enthalten.
Bei den Bildern ist der Abblockkondensator im IC Sockel und nicht
sichtbar.
Mach mal die frei rumhängenden USB-Adern (ohne Schirmung) kürzer. Das
hat bei mir nie gut funktioniert wenn die so rumschlackern.
Ich bin dann dazu übergegangen die V-USB Teile (damals noch tinyUSB)
direkt mit Stecker zu bauen, wie ein USB-Stick eben.
Ich sehe auch in deiner Schaltung nicht wo da der Kerko direkt am Vcc
vom Tiny sein soll - der ist wichtig. Ich werd jetzt nicht deine
Schaltung aus dem Board reversen, ich kann aber sagen, dass diese
Schaltung bei mir immer einwandfrei funktioniert hat - so krude sie auch
sein mag!
https://www.obdev.at/Images/vusb/circuit-zoomed.gif
Ja, das Kabel habe ich auch in Verdacht, ich werde es einmal kürzen und
berichte.
-
Der Kerko ist direkt unter dem IC (kurze Leitungen).
Test Softwas läuft ja auch problemlos.
Allen schon mal vielen Dank!
Und ja, die funktioniert auch mit dem tiny45 - es geht mir um die Vcc
aus USB über 2 Dioden und USB D+/- ohne Z-Dioden nor mit Widerständen
auf Int1/2.
Ich vergaß zu erwähnen, daß das Verhalten ohne Z-Dioden mit 3,3V UB das
gleiche, Falsche ist.
Jedoch wir der Controller bei 3,3V und 16,5 MHz ein wenig außerhalb der
Specs betrieben (geht aber, nur Serienfertigung sollte man sicherlich
nicht so machen).
Hat eigentlich jemand mal einen Tiny mit externem Takt hochgejagt ?
Ich vermute bei 5V wird es mit einzelnen Exemplaren auch noch mit 40MHz
gehen (aber ohne den Segen von Atmel) ?
Nana, das ist doch hier kein Overclocker-Forum.
Die Z's hängen an den USB-D+/- um den Pegel zu begrenzen wenn der Chip
nur mit 3,xV läuft. Denn die AVR's dürfen an den Digitalpins ja nur was
- Vcc+0,?V bekommen? Ist schon etwas her das Datenblatt.
Mit den zwei 1n4148 in der 5V-Leitung vom USB lief mein Tiny45 immer so
mit ca. 3,6V. Klar sind die 16MHz für 3,3V und auch 3,6V außer Spec.
aber das ist kein Problem gewesen. Lief trotzdem immer. Die Mega8 im
USBasp laufen ja auch bei 3,3V noch problemlos. Bisher hab ich noch
keinen AVR gefunden der nicht bei 3,3V trotzdem mit seinem für 5V
garantierten Takt lief. Ist halt eben nur nicht von Atmel garantiert...
Warte mal, ich hab mir gerade doch noch mal dein Aufbau angesehen. Der
Tiny läuft doch mit 5V und du ziehst die D+/- Signale auf Z-Spannung
runter. DAS hat nie zuverlässig funktioniert meiner Erfahrung nach.
Lass den Tiny auf 3,?V laufen - dann wird alles gut. 2x 4148 in die USB
5V oder ein 3V3 Regler. Z-Stabilisierung würde vieleicht auch gehen, hab
ich aber nie gesehen.
Viel Erfolg - Zeit fürs Bett!
Hans Müller schrieb:> Jan 31 22:34:30 hans kernel: usb 4-1.6: new full-speed USB device number> 6 using ehci-pci
Man beachte das "full-speed" bei der Meldung. VUSB ist nur Low-Speed,
und die unterscheiden sich daran dass der Pullup bei Low Speed an D-
gehängt wird.
Du hast also mit fast 100%iger Sicherheit irgendwo D+ und D- vertauscht.
Das kann so nicht tut.
Hi
Gibt es diese vUSB-Routinen auch als ASM?
Fand bis jetzt nur C-Files und damit kann ich nicht so :/
(Klar kann ich die HEX zerpflücken, aber so richtig glücklich werde ich
damit wohl auch nicht werden)
MfG
Patrick J. schrieb:> Gibt es diese vUSB-Routinen auch als ASM?
Es gibt sogar deutlich besseres als das. Nur leider nicht öffentlich
verfügbar.
Der eigentliche Trick von V-USB ist allerdings auch bei V-USB selber
NATÜRLICH direkt in Assembler geschrieben. Weil: Es gibt schließlich
nix, was besser ist, wenn es um exaktes Timing geht und es gibt auch nix
besseres, wenn es um maximale Performance geht.
Sprich: Du musst einfach mal in die Tiefen der Verzeichnistruktur der
Quelltexte schauen, dann findest du auch reichlich Assembler. Vermutlich
sogar deutlich mehr als du jemals sehen wolltest und verstehen kannst...
> Fand bis jetzt nur C-Files und damit kann ich nicht so :/> (Klar kann ich die HEX zerpflücken, aber so richtig glücklich werde ich> damit wohl auch nicht werden)
Du könntest statt dessen auch einfach die USB-Specs lesen. Das bissel
recht triviales Zeug, was V-USB in C implementiert, kann man (deutlich
effizenter) recht leicht auch in Asm umsetzen. Wenn man denn Assembler
wirklich kann und obendrein weiss, was man da eigentlich programmieren
will. Für letzteres muss man halt die USB-Specs gelesen und verstanden
haben.
So einfach ist das eigentlich...
Hi c-hater
Von mir ist die '-1' nicht anmerk
Werde mich dann Mal, ... wenn Zeit ... Lust ... Kleingeld ... weitere
Ausreden hier einfügen ... daran machen, dem Zeug 'unter den Rock' zu
schauen.
Bei den ganzen Spezifikationen bin ich mit meinen minimalistischen
Englisch-Kenntnissen (wurde schon versucht, Diese aufzupäppeln ...) wohl
eher Außen vor - aber auch Das wird mich nicht aufhalten!
Eigentlich hast Du ja Recht, man muß ja 'nur' schauen, daß der
USB-Controller Das bekommt, was Er haben will - wird aber trotzdem noch
einiges an Zeit brauchen - bin da noch etwas feucht hinter den Ohren,
gelobe aber Besserung :)
MfG
Patrick J. schrieb:> Eigentlich hast Du ja Recht, man muß ja 'nur' schauen, daß der> USB-Controller Das bekommt, was Er haben will - wird aber trotzdem noch> einiges an Zeit brauchen - bin da noch etwas feucht hinter den Ohren,> gelobe aber Besserung :)
Warum der Stress? Es gibt schließlich Controller wie den PIC16F1454, die
nicht/kaum teurer sind, auch in DIL erhältlich und USB 2.0 Full Speed
in Hardware eingebaut haben, welches auch ohne Quarz auskommt. Natürlich
alles 100% standardkonform und zertifiziert.
fchk