xmega mit 115200 baudrate

OP #1284105
Lesenswert?

Hallo zusammen,

ich wollte mal fragen wie ihr bei einem ATXMEGA die baudrate von 115200 
einstellt.

mein cpu frequenz begrägt 8Mhz.

Ich berechne mir einen wert für das BAUDCTRLA register, für den uart auf 
port d.

CPU_Frequenz / (16 * Baudrate)) - 1)

Ich will also eine Baudrate von 115200 erreichen.

Daher sollte mein Wert 3 oder 4 betragen, den ich in das Register 
BAUDCTRLA schreiben will.

Doch komischer weise bekomme ich bei dieser Baudrate nur datenmüll 
zurück.

Es funktioniert hingegen bis zu einer baudrate von 38400.

was kann ich da machen?

gruß anno
#1284632
Lesenswert?

@Hans:
Baudquarze erkennt man daran, dass sie eine sehr eigenartig gebrochene 
Frequenz haben. Also z.B. 11,xxx MHz anstatt 12,00 Mhz.

Hast du mal geguckt ob du das mit dem BScale Register vielleicht umgehen 
kannst? Ich meine genau dafür ist dieses Register da, um auch ohne 
Baudquarz höhere Baudraten erreichen zu können.
Persönliche Seite #1284968
Lesenswert?

Johann L. schrieb:
> Das funktioniert nicht. Mit 8MHz kommst du mit U2X=1 auf einen Fehler
> von 3.5%. Der Fehler sollte nicht größer sein als 0.2%

Quatsch. Beim xmega kann man mit internem Oszillator, der auch auf einer 
geraden Frequenz läuft so ziemlich jede Baudrate mit vertretbarem Fehler 
erzeugen, da der xmega einen Fractional Baud Rate Divider hat. Mehr dazu 
siehe a) Datenblatt b) Atmel AppNote.
#1285020
Lesenswert?

Hallo Hans,

wenn Du ein Oszi zur Hand hast und auf internen Takt stellst, dann 
solltest Du das 1x überprüft haben... Bei mir war Led-Toggeln sehr 
aufschlussreich; da kam heraus dass der µC mit der falschen Frequenz 
läuft. Ansonsten: einfach auf internen Takt einstellen - das reicht für 
jede RS232 Kommunikation.

Gruß
Helmut
Gast #1607669
Lesenswert?

Hallo zusammen,

ich hatte ein ähnliches Problem wie der OP, ich wollte einen XMEGA64A1 
mit dem internen 32 MHz Oszillator takten und UART mit 115200 Baud 
verwenden. Zum setzen des Taktes habe ich das Beispiel von Atmel benutzt 
(mit der Bibliothek clksys_driver.h).

Dabei hatte ich übersehen, dass der UART eben nicht den CPU-Takt als 
Quelle verwendet, sonder den Peripherietakt. Dieser wird mittels PSBCDIV 
vom CPU-Takt abgeleitet.

Vielleicht hilft das ja mal jemandem mit einem ähnlichen Problem :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren