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!