Forum: Mikrocontroller und Digitale Elektronik Problem mit V-USB


von Michael S. (redrabbit)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche seit geraumer Zeit die v-usb libary einzubinden.
Nach einigen Problemen mit der Makefile, kompiliert das ganze Programm 
ohne Fehler.
Leider bekomme ich von meinem Laptop nur die Meldung "Gerät nicht 
erkannt", wenn ich den USB einsteck.
Zu Kontrolle, ob der Microcontroller auch wirklich taktet, hab ich eine 
LED an PD6 gehängt und PD6 am Anfang von main auf hight gesetzt.
Also kann ich schonmal falsche Fuses oder Fehler beim kompilieren 
ausschließen.
Hat jemand von Euch ne Idee, was ich tun kann, damit die korrekte Vendor 
und Devive ID am Laptop ankommen?
(Ich verwende eine Atmega mit 12Mhz Quarz, Programmers' Notepad und 
mfile.)

mfg
und frohe Weihnachten  :-)

von Max W. (max96)


Lesenswert?

Hast du auch den internen Teiler deaktiviert? Zeigt dir der inf-wizard 
als VID 0x00 an? Dann hast du vielleicht grün und weiß vertauscht.

von Michael S. (redrabbit)


Lesenswert?

Welchen internen Teiler? :D
Eigentlich sollten D+ und D- stimmen. Ich hab mal zum Spaß D+ und D- 
vertauscht und habe das selbe Resultat erhalten.
Der inf-wizard zeigt für VID und PID in beiden Fällen leider 0x00 an.

von Max W. (max96)


Lesenswert?

Der Atmega hat ab Werk einen internen Teiler von 8 eingestellt. Wenn du 
den in den Fuses nicht rausnimmst läuft VUSB nicht. Hängt D+ auch am 
INT0 des Megas?

von Michael S. (redrabbit)


Lesenswert?

teilt dieser Teiler die Inputs um den Faktor 8, oder wie kann man das 
verstehen?
Nein, ich hab D+ an PB0 und D- an PB1. Allerdings sollte das in 
usbconfig.h eingestellt sein:

#define USB_CFG_IOPORTNAME      B
#define USB_CFG_DMINUS_BIT      1
#define USB_CFG_DPLUS_BIT       0

von Max W. (max96)


Lesenswert?

Der Teiler teilt deine 12MHz intern auf 1,5MHz. Du musst D+ an PD2 
hängen, sonst funktioniert das nicht. Hälst du dich an irgendein 
Beispielprojekt oder ähnliches? Das erleichtert den einstieg um einiges. 
Hier ist es zB. für einen Tiny gut erklärt, das kannst du auf den Mega 
umstricken: 
http://codeandlife.com/2012/01/22/avr-attiny-usb-tutorial-part-1/

von Michael S. (redrabbit)


Lesenswert?

Genau DAS hatte ich auch als Vorlagen :-)
Die USB-Verbindung ist nur die Vorraussetzung für ein Projekt, mit dem 
ich einen NAND auslesen und beschreiben will. Die Kommunikation mit dem 
klappt schon recht gut, aber ich muss relativ große Datenmengen (max. 
528 pro Schreibvorgang) zum Mega schicken. Deshalb hab ich mich für USB 
und nicht RS323 entschieden. Für die NAND-Ansteuerung hätte ich gern 
Port D frei :/
Aber ich aknn D+ und D- nur an INT0 und INT1 hängen, oder?

Weißt Du, wie dieser Teiler offiziell heißt? Weil ich berechne meine 
Fuses immer mit dem engbedded Fusecalculator.

mfg
und vielen Dank :D

von Bernd (Gast)


Lesenswert?

sorry, aber du hast zuwenig Ahnung um so ein Projekt in 0,nix auf dich 
umzustricken!
Wenn Du schon so groß einsteigen willst:
Halte dich erst Mal an ein funktionierendes Projekt und mach erst wenns 
läuft deine Änderungen

von Michael S. (redrabbit)


Lesenswert?

Ich verwend ja auch nicht zum Spaß ne fertige Libary.
Die Ansteuerung des NANDs ist kein Prolem nur der Datentrasfer.
Ich kann auch alles über RS323 machen (was mei 16mb n paar Stunden 
dauert).
Aber es kann doch nicht so schwierig sein ne fertige libary einzubinden.

von Max W. (max96)


Lesenswert?

Die Fuse heißt CLKDIV. Hast du überhaupt den Quarz als Taktquelle in den 
Fuses eingestellt? Am Besten ist es, wenn du erst einmal den selben Code 
wie im Tut nimmst, nur in der usbconfig.h D+ auf PD2 und D- auf 
meinetwegen PD3 legst (bei D- muss es kein INT-Pin sein). Dann bekommst 
du erstmal den Treiber zum laufen und schickst dir lustige Hello-Worlds 
hin und her. Wenn das dann funktioniert strickst du die Software Stück 
für Stück auf dein Projekt um. So habe ich es auch gemacht, als ich das 
erste mal mit VUSB gearbeitet habe. Pass auf jeden Fall auf gute 
Verbindungen und kurze Leitungen auf, VUSB ist ziemlich störanfällig 
aber wenn es einmal läuft dann läufts :-). Lass dich nicht aus der Ruhe 
bringen, ich saß damals auch 5 Stunden, eh das Teil richtig erkannt 
wurde.

von Michael S. (redrabbit)


Lesenswert?

Ich hatte zum Test des Quarzes ein Programm geflasht, das eine LED 
blinken lässt. Sobald ich den Quarz rausgezogen habe, ging sie aus und 
wenn ich ihn wieder eingesteckt habe, gings weiter ;)
Aber von dem Teiler wusst ich nicht :D
Das probier ich heut Nachmittag gleich mal aus.
Ich hab ja für den Anfang auch das Beispielprojekt mit copy-paste 
abgeschrieben.
Vielen Dank für deine Hilfe und Motivation
Frohe Weihnachten :D

EDIT: Leider Finde ich weder "CLKDIV" noch "CLKD" im Datenblatt :/

von Bernd (Gast)


Lesenswert?

Michael Stoffels schrieb:
> EDIT: Leider Finde ich weder "CLKDIV" noch "CLKD" im Datenblatt :/

dann such nach fuse

von Michael S. (redrabbit)


Lesenswert?

Ja, dummerweise gibts davon aber mehr als eine und ich weiß nicht, wie 
die Fuse auf englisch heißt. Sowas wie "internal divider" hab ich auch 
nicht gefunden. Leider Gottes scheint es im Fusecalculator auch keine 
Option dafür zu geben.
Da bleibt mir wohl nix anderes übrig, als mich in die Fuses mal näher 
einzulesen.

von bloedzinn (Gast)


Lesenswert?

V-USB macht heute eigentlich keinen Sinn mehr, da es genug Alternativen 
mit echter Hardware-USB Unterstützung gibt.
Ansonsten verschwendet man sehr viel Zeit mit Problemen, die sonst nie 
auftreten würden.

von Bernd (Gast)


Lesenswert?

Michael Stoffels schrieb:
> Ja, dummerweise gibts davon aber mehr als eine und ich weiß nicht, wie
> die Fuse auf englisch heißt.
also auf Deutsch heißt die Fuse: Sicherung
beim Tiny 45 gibt es 3 davon, ist nicht schwierig sich die Bits dazu 
anzuschauen

>Sowas wie "internal divider" hab ich auch
> nicht gefunden. Leider Gottes scheint es im Fusecalculator auch keine
> Option dafür zu geben.
dann schau halt noch Mal hin, da gibt es eine!

von g457 (Gast)


Lesenswert?

Hast Du Gnd verbunden? Dem Augenschein nach kommen aus dem 
USB-ähm-Gefrickel nur zwei Leitungen raus auf das Brotbrett.

von Michael S. (redrabbit)


Angehängte Dateien:

Lesenswert?

Ja, falls ich nicht hinkriegen sollte, werd ich wohl nen atmega mit usb 
interface kaufen müssen :/
Ja, das ist auf meinem Foto leidr nicht zu erkennen. +5V und GND laufen 
unter dem USB-Stecker raus (siehe Anhang)
Ich installier grad AVR studio 6 um die Fuse zu finden.
(der rote drah, der von oben kommt ist übrigens +3,3V aus meinem 
Netzteil.)

Ich hoffe ich finde die Fuse in AVR studio. Weil mit Strg+F hab ich im 
Dateblatt nichts gefunden.

von g457 (Gast)


Lesenswert?

> Ich hoffe ich finde die Fuse in AVR studio.

Der m32 keine extra 'CKDIV' oder ähnliches. Bei dem kann man den 
internen Takt via CKSEL[3:0] runterteilen (siehe Datenplatt [0] Kapitel 
"System Clock and Clock Options/Calibrated Internal RC Oscillator", 
"System Clock and Clock Options/Crystal Oscillator" und "Memory 
Programming/Fuse Bits" [1]). Der externe welche ist beim m32 nicht 
teilbar.

Was machen D+/D- (nur) auf PB0/PB1? Sollte da nicht einer davon (auch) 
auf einen INT gehen?

[0] http://www.atmel.com/Images/doc2503.pdf
[1] welche Nase nummeriert die Kapitel nicht durch damit man sie auch ja 
nicht einfach referenzieren kann ∗arrgs∗

von Spess53 (Gast)


Lesenswert?

Hi

>Die USB-Verbindung ist nur die Vorraussetzung für ein Projekt, mit dem
>ich einen NAND auslesen und beschreiben will.

Dazu brauchst du aber einen USB-Host. Und das ist V-USB nicht.

>Ich hoffe ich finde die Fuse in AVR studio. Weil mit Strg+F hab ich im
>Dateblatt nichts gefunden.

Der ATMega32 hat keinen Clock-Divider, also auch keine CKDIV-Fuse.

MfG Spess

von Michael S. (redrabbit)


Angehängte Dateien:

Lesenswert?

Also heißt das, dass er auch wirklich mit 12MHz taktet, wenn ich nen 
externen 12Mhz Quarz dran hab und die Fuses für den Taktgeber auf 
externen Quarz, hight frequency und 64ms Anschwingkeit gestellt habe. 
(CKSEL=111, SUT=11).
Das es die Fuse nicht gibt, erklärt, wieso ich sie im Datenblatt nicht 
gefunden habe ;)
Dann ist das Problem mit dem Teiler schonmal vom Tisch :/

Also auf wikidocs hab ich das hier für den Nineauausgleich zwischen USB 
und AVR gefunden (4.PNG). Ich hab lediglich das rot eingekreiste durch 
+3,3V ersetzt (und natürlich die Verbindungen zu +5V vom USb und die zu 
GND gekappt ;))
Im Tutorial von hackaday.com ist die Beschaltung wie in 5.PNG 
beschrieben.
So wie ich das verstanden habe, liegen D+/- nur an 2 I/O-Pins, die in 
usbconfig.h festgelegt werden.

Woran könnte es den noch liegen, das ich keine VID und PID kriege?

mfg

von paul (Gast)


Lesenswert?

Was soll die Provokation?!
Was sollen die Fotos im PNG-Format?
Bist du wirklich an ernsthaften Beiträgen interessiert?

von Michael S. (redrabbit)


Lesenswert?

Versteht man unter Host bei USB-Verbindungen nicht den PC mit 
USB-Schnittstelle und unter Divice den Controller mit V-USB?

mfg

von Max W. (max96)


Lesenswert?

Wie ist das zu verstehen? Du versorgst die Schaltung über ein 
Labornetzteil mit 3,3V? hast du USB-GND mit dem Netzteil GND verbunden? 
D+ auf den INT0 gelegt?

von g457 (Gast)


Lesenswert?

> So wie ich das verstanden habe, liegen D+/- nur an 2 I/O-Pins, die in
> usbconfig.h festgelegt werden.

Ja. Wenn D+ dabei zufällig auf dem passenden INT landet schon. Wenn man 
unbedingt andere Pins nehmen will muss man D+ noch zusätzlich auf eine 
INT rüberlegen. Ausschnitt aus der usbconfig-prototype.h:
1
#define USB_CFG_DPLUS_BIT       2
2
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
3
 * This may be any bit in the port. Please note that D+ must also be connected
4
 * to interrupt pin INT0!
5
[..]

von Michael S. (redrabbit)


Lesenswert?

Das is ne schaltung und schaltungen in PNG, oder etwa ned?!
Die Bildgöße is ja wohl mehr als sinnvoll und die Fotos... das is dann 
wohl mein Fehler gewesen, sry :/
Leider kann ich den Beitrag nicht mehr editieren. Also kann ichs jetzt 
auch nimmmer ändern -.-

von Michael S. (redrabbit)


Lesenswert?

genau, GND vom netzteil liegt auch auf GND vom USB ;D
Die 3,3V vom Netzteil ziehen D- über 1,5K gegen 3,3V
Wie konnt ich nur so blöd sein und das überlesen!
DANKE! :D

mfg

von qwertz (Gast)


Lesenswert?

> Das is ne schaltung und schaltungen in PNG, oder etwa ned?!
> Die Bildgöße is ja wohl mehr als sinnvoll und die Fotos...

Es war von den Fotos die Rede! Abgesehen vom unpassenden PNG-Format, ist 
1MB für diesen Bildinhalt eindeutig zu viel!

> Leider kann ich den Beitrag nicht mehr editieren. Also kann ichs jetzt
> auch nimmmer ändern -.-

Selber schuld. Hättest vor dem Posten mal etwas denken sollen.

von Spess53 (Gast)


Lesenswert?

Hi

>Versteht man unter Host bei USB-Verbindungen nicht den PC mit
>USB-Schnittstelle und unter Divice den Controller mit V-USB?

Der Host ist der Master. V-USB ein Slave. Wenn dein ominöses 'Nand' kein 
Host ist, kannst du das Ganze vergessen. Zwei Slaves können nicht 
miteinander kommunizieren.

MfG Spess

von holger (Gast)


Lesenswert?

>Ich verwend ja auch nicht zum Spaß ne fertige Libary.
>Die Ansteuerung des NANDs ist kein Prolem nur der Datentrasfer.
>Ich kann auch alles über RS323 machen (was mei 16mb n paar Stunden
>dauert).

Wird beim V-USB kaum anders sein. Ein FT232RL oder der FT245
ist da wohl die bessere Wahl.

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.