Forum: Mikrocontroller und Digitale Elektronik Usart beim Xmega128a3


von Wolfgang K. (polarwolf_94)


Angehängte Dateien:

Lesenswert?

Hallo

Hab ein kleines Problem mit dem Xmega.

Und zwar habe ich ein Board, wo ein Grafik-display mit einem Xmega128a3 
verbunden ist.
Intern sind sie mit D1->Reset; D2->RX; und D3->TX

Baudrate soll 9600 sein.
Mit Usart wird der Grafikcontroller Picaso SGC angesteuert.

Habe ich im programm einen Fehler?

von Robert W. (robwa)


Lesenswert?

Hallo,

ohne Deinen Code genau durchgeschaut zu haben, ist mir aufgefallen, dass 
Deine Baudberechnung meiner Meinung nach nicht stimmt.
Bei 32MHz und 9600 Baud wäre der günstigste Wert für BSCALE -4 und für 
BSEL 3317. Das würde für
USARTD0.BAUDCTRLA = 0b11110101;
und
USARTD0.BAUDCTRLB = 0b10111100;
ergeben.

von Gerhard G. (g_g)


Lesenswert?

Hallo,

du hast zwar die CPU Geschwindigkeit definiert:
#define F_CPU 32000000UL

aber vermutlich läuft deine CPU mit 2Mhz(Grundeinstellung)
Die Einstellung für einen System-Clock von 32 MHz fehlt in deinem Code.



Gruß G.G.

von Robert W. (robwa)


Lesenswert?

Ach ja, hab ich auch übersehen, für 2MHz sind die besten Einstellungen:
BSEL=-7 und BSCALE = 1539 -> Fehler=-0,02%.
BSEl=0 und BSCALE=12 geht auch -> Fehler=0,16%

von Wolfgang K. (polarwolf_94)


Lesenswert?

Das heißt, entweder ich stelle den oscil. Auf 32mhz und den bsel und 
bscale ändern dementsprechend.
Oder ich lasse den osci und stelle nur bsel unr bscale anders ein?

von Robert W. (robwa)


Lesenswert?

Genau, probiers einfach aus. Du kannst für BSEL und BSCALE zwei 
Variablen verwenden z.B.:
  uint16 BSEL=1539;
  int8 BSCALE=-7;
Ich hab gerde gesehen, dass ich im letzten Beitrag BSEL und BSCALE 
verwechselt habe.

und die Variablen so zuweisen:
USARTD0.BAUDCTRLA  = (uint8) (BSEL);
USARTD0.BAUDCTRLB  = (uint8) (BSEL>>8) | (BSCALE & 0x80) | (BSCALE<<4) ;

So habe ich es in meinem letzten Projekt gelöst

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.