Forum: Mikrocontroller und Digitale Elektronik ATXmegaAU USB->COM-port


von Johannes W. (tintifaxx)


Lesenswert?

Hallo,
ich möchte gern einen ATXMega128A4U über USB am PC als virtuelle COM 
haben und einfach ASCII-Zeichen über z.B. PuTTY hin- und herschicken.
Dazu hab ich im Atmel Studio das code-example aus der "application note 
AVR4907" geöffnet. In diesem Beispiel wird der XMega über USB und 
gleichzeitig über RS232 mit dem PC verbunden. Man kann dann zwei 
Terminals für die beiden COM-ports aufmachen, und wenn man in ein 
Terminal etwas eintippt erscheint es im anderen. Ich muss also 
eigentlich nur den RS232-Teil rausschmeissen.
Mein Problem: Ich kann es nicht testen, da das Beispiel für ein 
Entwicklungsboard ausgelegt ist, ich aber keins besitze. Mein XMega 
sitzt auf einem selbst erstellten print auf dem die UART nicht 
hinausgeführt ist. (USB ist richtig angeschlossen, wenn ich das Beispiel 
flashe meldet sich mein XMega am PC als "Communication Device Class ASF 
example (COM3)). Soweit funktioniert es also. Ich kann aber nichts 
ausprobieren um den code zu verstehen da kein RS232-Anschluss vorhanden 
ist.
Kann mir da jemand helfen was ich z.B. tun muss, um mal einfach ein 
Zeichen an PuTTY zu senden? In der uart_xmega.c gibt es z.B. 
"udi_cdc_putc(value)"
Aber wo setz ich das hin? Im main wird ja sofort der sleepmode aktiviert 
und der Rest läuft über interrupts. Ich fürchte auch dass solange über 
die UART keine Verbindung aufgebaut ist das Programm nichts tut. Ich 
müsste also den ganzen UART-Teil rauswerfen, ich bekomme aber keinen 
Überblick bei diesen vielen .c- und .h-files. Hab zwar schon etwas in C 
programmiert, aber das ist doch etwas "too much".
Vielleicht kann mir jemand zumindest sagen, wo ich anfangen könnte.
Danke!

Gruß,
T.

von Johannes W. (tintifaxx)


Lesenswert?

Okay, da war ich mal wieder zu ungeduldig. Hab jetzt endlich gecheckt 
wie wie der ASF-Wizard funktioniert und ein leeres Projekt mit einem 
"User-board" erstellt und das USB-CDC-stdio-modul geladen.
Jetzt geht alles, zum PuTTY schreiben und asynchron davon lesen über die 
callback-functions.
Sorry für diesen unnötigen thread!

Gruß,
T.

von Werner (Gast)


Lesenswert?

Welche Version des Atmel Studios hast Du denn verwendet? Ich versuche da 
gerade mit dem Studio 7, will aber noch nicht so richtig klappen...

Werner

von Johannes W. (tintifaxx)


Lesenswert?

Hallo Werner,

sorry, war über Pfingsten weg.
Ich verwende auch Atmel Studio 7.
Was funktioniert denn bei dir nicht?

Gruß,
T.

: Bearbeitet durch User
von Mike J. (linuxmint_user)


Lesenswert?

Wenn ihr ein Zeichen vom PC über USB (V-Com) zum Xmega schicken wollt, 
dann müsst ihr eine Routine drin haben welche die Zeichen ausliest.
Müsste "udi_cdc_getc()" heißen.

Ich hatte in der Main eine handle_cdc() und in der stand diese 
getc-Routine ganz am Anfang. Danach stand dann eine Routine welche das 
Zeichen wieder zurück geschickt hat.

handle_cdc(void)
{
uint16_t c = 0;
c = udi_cdc_getc();
udi_cdc_putc(c);
}

So hat man einfach eine Echoroutine geschaffen.

Mein Codebeispiel hatte ich aus dem USB-CDC Beispiel aus der Atmel 
ASF-API genommen.

http://asf.atmel.com/docs/3.11.0/common.services.usb.class.cdc.device.example.stk600_atxmega128a4u/html/index.html

In der Main kannst du den AVR ja auch schlafen legen, aber eben nicht in 
den Tiefschlaf. IDLE sollte reichen.


Johannes W. schrieb:
> "udi_cdc_putc(value)"
> Aber wo setz ich das hin? Im main wird ja sofort der sleepmode aktiviert
> und der Rest läuft über interrupts.

Du kannst die die putc-Routine auch in eine Interruptroutine schreiben 
die zum Beispiel jede Sekunde ausgeführt wird.
Mit "udi_cdc_putc('#');" bekommst dann jede Sekunde ein "#"-Zeichen auf 
den Bildschirm geschrieben.

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.