Hallo, ich habe eine Frage zum ATMEGA32U. Der Chip hat einen integrierten USB-Controller. Ich will jetzt über die Applikationsseite (PC) auf den USB-Controller zugreifen um die Kommunikation zwischen PC und uC durchzuführen. Leider finde ich überhaupt keine Angaben über Treiber, DLL usw. wie ich den Zugriff handeln kann. Habe bisher immer mit 8051er gearbeitet und hinten dran ein FT232RL (von FTDI) mit dem konnte man über eine DLL Funktionen aufrufen um mit dem Burschen zu kommunizieren. Vielleicht sind ja hier ein par Atmel Spezi's :-) Vielen Dank!
Das ist wie bei jedem anderen "echten" USB Device auch, Du musst entweder eine Standard-USB-Geräteklasse wie CDC oder HID implementieren und kannst dann die Standardgerätetreiber des Betriebssystems nutzen, oder aber Du implementierst ein USB-Device, das keiner Standardgeräteklasse entspricht und musst dann auch auf der Betriebssystemseite Dich selbst um das Erstellen von passenden Gerätetreibern kümmern. Der zweite Weg ist erheblich steiniger als der über eine der Standardgeräteklassen. Mit libusb/libusb-win32 kann man sich das zwar etwas vereinfachen, aber auch das ist nicht "ohne". Daher bietet sich der Gebrauch von Standardgeräteklassen an; beispielsweise bedarf CDC nur einer angepassten .inf-Datei und kann dann annähernd wie eine klassische serielle Schnittstelle behandelt werden.
Auf der Atmel-Seite gibt es ein Software-Paket: "ATmega32U4 USB Software Package". Darin enthalten sind Beispiele z.B. HID etc. inkl. der auf der PC-Seite notwendigen Software. Beim ersten überfliegen scheint aber nur die erste Variante mit Beispielen beschrieben zu sein. Über welche Bezugsquelle hast du den ATmega32U4 bekommen ? Ich finde das Teil recht interessant, habe aber auf die Schnelle nur Digikey als Händler gefunden.
Danke für eure Antworten. @NN Habe den Atmega noch nicht bekomme ihn auch nicht einzeln, wenn ist er vom Kunden schon bestückt auf einem fertigen Produkt. Als Quelle kann ich dir nur Digikey, buerklin.de nennen, die den evtl. führen. Viele Grüße Benny
Hallo Leute, den ATmega32U4 in TQFP44 gibt es bei mir zu kaufen. Wer Interesse hat, einfach ne Nachricht schicken. Grüsse
Benny schrieb: > Habe bisher immer mit 8051er gearbeitet und hinten dran ein FT232RL (von > FTDI) mit dem konnte man über eine DLL Funktionen aufrufen um mit dem > Burschen zu kommunizieren. Du kannst eine serielle Schnittstelle simulieren. Dazu gibt es ein Atmel app note .... AVR272_USB_CDC_Virtual_Com_Port die Series4 Version passt zum Atmega32u4. Die Ordner ->modules ->lib_mcu und deren Unterordner und Files müssen ins Projekt eingebunden werden. Im Ordner Demo befinden sich die Dateien, welche spezifisch für die Anwendung verändert, bzw. erstellt worden sind. Sowie die Treiber *.inf Datei !!!! D.h. eingebunden werden müssen die in diesem Ordner vorhandenen .c und .h Files. Auch der Unterordner conf muss eingebunden werden. In cdc_task.c findet sich die eigentliche Abhandlung wieder. Im Beispiel wird eine USB-UART Bridge gebaut, diese kann man aber einfach verändern.
1 | //! @brief This function initializes the hardware ressources required for CDC demo.
|
2 | //!
|
3 | //!
|
4 | //! @param none
|
5 | //!
|
6 | //! @return none
|
7 | //!
|
8 | //!/
|
9 | void cdc_task_init(void) |
10 | {
|
11 | Usb_enable_sof_interrupt(); |
12 | }
|
13 | |
14 | |
15 | |
16 | //! @brief Receive data from USB(Serial Port)
|
17 | //!
|
18 | //! RX from USB Handling
|
19 | //!
|
20 | //! @param none
|
21 | //!
|
22 | //! @return none
|
23 | void cdc_task(void) |
24 | {
|
25 | |
26 | if(Is_device_enumerated()) //Enumeration processs OK and COM port openned ? |
27 | {
|
28 | |
29 | if (uart_usb_test_hit()) // Something received from the USB ? |
30 | {
|
31 | |
32 | while (rx_counter) |
33 | {
|
34 | //Loopback
|
35 | U8 sbyte = uart_usb_getchar(); |
36 | usb_sendbyte(&sbyte); |
37 | }
|
38 | }
|
39 | }
|
40 | }
|
41 | |
42 | //! @brief sof_action
|
43 | //!
|
44 | //! This function increments the cpt_sof counter each times
|
45 | //! the USB Start Of Frame interrupt subroutine is executed (1ms)
|
46 | //! Usefull to manage time delays
|
47 | //!
|
48 | //! @warning Code:?? bytes (function code length)
|
49 | //!
|
50 | //! @param none
|
51 | //!
|
52 | //! @return none
|
53 | void sof_action() |
54 | {
|
55 | cpt_sof++; |
56 | }
|
57 | |
58 | void usb_sendbyte(U8* tsend){ |
59 | U8 save_ep; |
60 | |
61 | if(Is_device_enumerated()) |
62 | {
|
63 | save_ep=Usb_get_selected_endpoint(); |
64 | Usb_select_endpoint(TX_EP); |
65 | uart_usb_send_buffer(tsend,1); |
66 | Usb_select_endpoint(save_ep); |
67 | }
|
68 | |
69 | }
|
Im passenden .h file noch den Eintrag hinzufügen
1 | void usb_sendbyte(U8* tsend); |
In der Main-Routine sollte man dann noch folgendes einfügen
1 | wdtdrv_disable(); |
2 | Clear_prescaler(); |
3 | scheduler(); |
Es wird dann der USB-Scheduler in einer Endlosschleife ausgeführt. Will man also etwas nebenbei ausführen, muss das in diese Schleife rein. ->modules->scheduler->scheduler.c Damit sollte es laufen. Das Testprogramm oben schickt jedes byte, welches über den COM-Port geschickt wurde wieder zurück. mfg
Guten Abend, weitere Beispiele gibt es auch unter http://www.pjrc.com/teensy/usb_debug_only.html zu finden. Beziehen kann man den Atmega32U4 auch beim HBE Shop. (Shop für Privatpersonen von Farnell) Gruß Flo
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.