Hallo, habe zur Zeit vor mich ein wenig mit USB zu beschäftigen. Mein Ziel ist es ein Atmega32 so zu beschalten und zu programmieren, das Daten mit ca. 1MBit/s mit dem PC ausgetauscht werden können. Als Software soll dazu die AVR USB Implementierung von obdev.at genutzt werden: http://www.obdev.at/products/avrusb/index.html Bei obdev.at sind allerdings nur Beispielschaltungen zu Devices die ihren Strom aus dem USB Bus ziehen. Daher wollte ich fragen, ob ein Anschluss nach dem angehängten Plan Sinn macht. Ich selbst bin noch recht am Anfang was Elektronik angeht. Die Frage ist kann ich V_bus so "in der Luft" stehen lassen? Reicht es die GND Leitungen der externen Spannungsversorgung mit dem USB GND zu verbinden, das die D+ und D- Signale ordentlich übermittelt werden? Für Hinweise wäre ich sehr Dankbar! Gruß Thomas
Keiner "zwingt" dich Strom aus dem USB Bus zu beziehen, nur GND sollte halt verbunden sein dann klappt das schon :)
Hab mir nochmal das Metaboard in dem Projekt angeschaut und den Kondensator und den 1k5 Ohm Widerstand an die Vcc Leitung des Atmega gebunden. Werd es jetzt mal zusammenlöten und einen Versuch starten. Vielen Dank! Gruß Thomas
Viel Glück! Berichte mal ob es geklappt hat!
Gast
#972019
und wenn du die Vcc/Gnd-Symbole auch an jedem Bauteil benutzt, welches an Vcc/gnd liegt, werden die Schaltpläne nicht ganz so wirr...
Gast
#972160
Die Spannungsversorgung usw. muss erst beim Layout komplett verbunden werden :-P Mit den VCC/GND-Symbolen werden imaginäre Leitungen gezogen und dein Schaltplan sieht um einiges übersichtlicher aus :)
Gast
#972205
Mit wenig Ahnung von USB, noch von Elektronik wuerde ich mir das nicht antun, dafuer alternativ fuer 4 Euro einen FT232 chip drauf tun.
Gast
#972210
Oder AT90USB. Der hat USB onboard.
Hallo, leider kann ich die AT90USB nicht verwenden, da bereits ein Atmega32 in dem Projekt verwendet wird, wo die USB Schnittstelle eingepflegt werden soll. Da schon einige IO-Pins belegt sind, kam mir die AVR USB Lösung am besten vor. Bisher habe ich einen Grundschaltung (siehe Anhang), jetzt erstmal als Bus Powered USB Device angelegt und die PowerSwitch Software aus: http://www.obdev.at/products/avrusb/powerswitch.html Aufgespielt und angepasst. Bisher bekomme ich ca. jeden 3. oder 4. Versuch einen Verbindung mit dem PC hin. Unter Linux zumindest, bei Windows Vista meldet er sich noch nicht. Unter Linux wird die entsprechende Device und Vendor ID bei lsusb angezeigt, allerdings mehr auch nicht. Wollte zunächst mal einen 1MOhm Pull-Down Wiederstand an D+ anbringen, um falsche Interrupts zu vermeiden. Werde dann nochmal berichten. Gruß Thomas
der 1.5K Pull-Up zur Device-Speed-Erkennung muss nach 3.3V geschaltet werden, nicht an 5V. So fliesst da zuviel Strom, das kann deine "wacklige" USB-Verbindung erklären. Versuch da mal eher 2.2k, wenn du nur 5V zur Verfügung hast.
Hab mal gerade umgelötet, und habe jetzt scheinbar noch häufiger ein Connect. Allerdings so ganz in Ordnung scheint es auch noch nicht zu sein, werde nochmal prüfen, ob es neben den 2k2 Widerstand noch andere Optimierungen gibt oder evtl. ein Software Problem. Danke für den Tip! Gruß Thomas
Juhu, hab eine erste Kommunikation! Hab mit dem PowerSwitch Projekt kurze Abfragen gesandt, die die usbFunctionSetup beantwortet hat ;) Der Schaltplan ist noch der alte (s.o. ca. 2 Antworten). Denke der Schaltplan bräuchte noch kleine Änderungen, da eine Verbindung nur jedes 2. oder 3. mal zustande kommt. Die Firmware enthällt die folgende usbconfig.h
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
Insbesonder die auskommentierung von den letzten Interrupt Einstellungen, hat die Kommunikation im letzten Schritt zum laufen gebracht. Als main habe ich folgendes Konstrukt:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
Der Code ist ein bisschen zusammenkopiert aus dem AVR USB PowerSwitch Projekt. Daher nochmal ein herzliches Danke und hier der Hinweis auf die Homepage: http://www.obdev.at/products/avrusb/powerswitch.html Die Abfragen an das Device wurden ebenfalls mit dem PowerSwitch commandline Tool gesandt. Als erfolgreiche Kommunikation hat mir heute Nacht erstmal die Statusabfrage gelangt. Es wird immer 0x00 und 0xFF zurückgesandt, und entsprechend werden die Zustände der (nicht vorhandenen) LED's angezeigt. Ich hoffe es hilft vielleicht auch einigen anderen, auch wenn hier noch ein bisschen Arbeit nötig ist. - Verbindung funktionier nicht auf anhieb - Vendor und Produktbeschreibung werden nicht übertragen Unter Linux bisher nur getestet, werde mich Morgen mal an Windows dran wagen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.


