Forum: Mikrocontroller und Digitale Elektronik Arduino micro Atmega32u4 serielle Kommunikation


von Lukas (Gast)


Lesenswert?

Hallo,

ich habe vor ein paar Jährchen mal ein wenig was mit Atmel-Controller 
was gemacht (Asuro) und habe mir jetzt einen Arduino micro bestellt. 
Diesen nutze ich jetzt zu Test-Zwecken, weshalb ich gerne auf die 
Arduino-IDE verzichten möchte (zum einen aufgrund des Lerneffekts, zum 
anderen um beispielsweise µC ohne Arduino-Board für eigene Schaltunge 
nutzen zu können)

Die Serielle Kommunikation über die Arduino-IDE funktioniert super, 
unter Eclipse habe ich die entsprechenden Plugins installiert und 
schonmal ein paar LEDs an und aus blinken lassen. Nun wollte ich die 
Serielle Kommunikation über UART hinkriegen. Zur Info: Der Atmega32u4 
scheint über einen internen USB-UART-Wandler zu verfügen, sodass im OS 
ein virtueller serieller Port erscheinen müsste, was es mit 
Initialisierung in der Arduino-IDE auch tut. Nur leider nicht mit meinem 
C-Code. Hier meine Initialisierung:
1
#define BAUD 9600
2
#include <avr/io.h>
3
#include <util/setbaud.h>
4
#include <util/delay.h>
5
6
void uart_init(void) {
7
   UBRR1H = UBRRH_VALUE;
8
   UBRR1L = UBRRL_VALUE;
9
#if USE_2X
10
   /* U2X-Modus erforderlich */
11
   UCSR1A |= (1 << U2X1);
12
#else
13
   /* U2X-Modus nicht erforderlich */
14
   UCSR1A &= ~(1 << U2X1);
15
#endif
16
17
   UCSR1B |= (1<<TXEN1);  // UART TX einschalten
18
   UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
19
}
20
21
int main (void) {
22
   uart_init();
23
24
   while(1) {
25
     _delay_ms(1500);
26
     while (!(UCSR1A & (1<<UDRE1)))  /* warten bis Senden moeglich */
27
         {
28
         }
29
     UDR1 = 'x';
30
   }
31
   return 0;
32
}

Ich vermute mal, man muss einen anderen Port nutzen, der die Daten dann 
über USB schickt und eine virtuelle Schnittstelle emuliert, allerdings 
wurde ich aus meinen Internet-Recherchen nicht wirklich schlau. 
Normalerweise müsste /dev/ttyACMX (X irgendeine Zahl) erscheinen, sodass 
ich z.B. mit Minicom damit kommunizieren kann. Aus der iom32u4.h wurde 
ich auch nicht schlau, weil da genau null Kommentare hinter stehen...

Hatte jemand vielleicht eine Lösung?

Grüße!

von Michael (Gast)


Lesenswert?

Lukas schrieb:
> Der Atmega32u4
> scheint über einen internen USB-UART-Wandler zu verfügen

Nein. Er verfügt über einen USB-Port, der, mit der nötigen Software, als 
USB-Serial-Wandler verwendet werden kann. Die Arduino-IDE macht die 
nötigen Initialisierungen automatisch, wenn du sie nicht verwendest 
musst du natürlich den USB-Port selbst initialisieren und bedienen.

von chester (Gast)


Lesenswert?

Lukas schrieb:
> #define BAUD 9600
> #include <avr/io.h>
> #include <util/setbaud.h>
> #include <util/delay.h>

mir fehlt da sowas wie
1
   #define F_CPU 4000000

von Karl H. (kbuchegg)


Lesenswert?


von Lukas (Gast)


Lesenswert?

Das define wird mit den Compiler-Einstellungen bereits abgedeckt, es 
erscheint sogar eine Warnung, wenn ich die Geschwindigkeit ein zweites 
mal im Quellcode einbaue.

Gut, dann ist es wohl wirklich einfacher ohne virtuelle serielle 
Schnittstelle zu arbeiten, sondern schnell ein Programm zu Coden, 
welches die Kommunikation übernimmt. Ich werde die USB-Bibliothek mal 
ausprobieren, vielen Dank für die schnellen Antworten!

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.