Forum: Mikrocontroller und Digitale Elektronik Atmel ATMEGA32U4 mit USB


von Benny (Gast)


Lesenswert?

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!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von NN (Gast)


Lesenswert?

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.

von Benny (Gast)


Lesenswert?

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

von Joshi (Gast)


Lesenswert?

www.msc-ge.com

Distributor für Atmel (kein Verkauf an Privatpersonen)

von Ulrich R. (ureinelt)


Lesenswert?


: Bearbeitet durch Moderator
von Pat R. (patrik)


Lesenswert?

Hallo Leute,
den ATmega32U4 in TQFP44 gibt es bei mir zu kaufen. Wer Interesse hat, 
einfach ne Nachricht schicken.
Grüsse

von Dr Strange (Gast)


Lesenswert?

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

von stromflo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.