Forum: Mikrocontroller und Digitale Elektronik XMega128 und USART


von Mike R. (thesealion)


Angehängte Dateien:

Lesenswert?

Moin,

ich versuche gerade die USART Schnittstelle eines XMega128A1 zum laufen 
zu bringen. Allerdings sendet der Controller einfach nicht das was ich 
will.

Ich probier es jetzt schon mit einem ganz einfachen Testprogramm:
1
int main (void) 
2
   {
3
4
   PORTE.DIR   = PIN3_bm;
5
   PORTE.OUT   = PIN3_bm;
6
  
7
8
   USARTE0.CTRLA = 0;
9
   USARTE0.CTRLB = 8; // senden einschalten
10
   USARTE0.CTRLC = 3; // 8 Bit
11
   USARTE0.BAUDCTRLB = 0;
12
   USARTE0.BAUDCTRLA = 12;
13
14
15
16
   USARTE0.DATA = 0xAA;
17
   USARTE0.DATA = 0xAA;
18
19
   for(;;)
20
      {
21
      } 
22
   }
und trotzdem wird nicht das gesendet, was eigentlich übertragen werden 
sollte. Hab ich hier irgendeine Feinheit übersehen oder was klappt 
nicht?

Senden tu ich wie man sieht 0xAA, am Terminal kommt 0x2A an. Und das 
Scop sieht sogar 0x95 und 0xF5.

Gruß Mike

von Mario (Gast)


Lesenswert?

Du willst scheinbar 2 mal 0xaa versenden. Wartet da auch irgendjemand 
darauf, daß das 2te 0xaa ins Senderegister geschrieben werden darf, oder 
ist das da nicht erforderlich? Oedr verstehe ich da was falsch ?

von Simon K. (simon) Benutzerseite


Lesenswert?

Natürlich ist das erforderlich. Da war wohl jemand zu faul um das 
Datenblatt genau zu lesen.

Übrigens würde ich die Register lieber durch Bitnamen setzen anstatt 
durch einfache schwer zuzuordnende Integer Zahlen.

von Mike R. (thesealion)


Lesenswert?

Das 2. mal 0xAA war einfach nur ein Test. Der Versuch nur ein 0xAA zu 
senden führt zu einem 0xF5 auf der Leitung.

Der XMega hat übrigens ein zweites Buffer Register, so daß es laut 
Datenblatt ohne Probleme möglich ist 2 Byte in die Register zu schieben 
und
so die Pause zwischen den Übertragungen zu elemenieren.

Normalerweise benutze ich auch lieber die Bitnamen, ich hab auch schon 
die ApNote von Atmel zur USART (incl. Beispielcode) probiert, aber das 
Ergebnis ist immer das gleiche. Deshalb was das hier der letzte Versuch 
um mögliche Fehler in den Headerdateien auszuschließen.

von Mike R. (thesealion)


Lesenswert?

So, habe mein Problem mitlerweile selber lösen können.

Hauptproblem war eine alte Version von HTerm, die gerne das erste 
empfangene Bit ignoriert bzw auf Null gesetzt hat.

Zwietens habe ich
1
   PORTE.DIR   = PIN3_bm;
2
   PORTE.OUT   = PIN3_bm;
noch die Abfolge der beiden Zeilen getauscht. Danach konnte auch das 
Scope die Daten richig dekodieren. Und das zwei Zeichen direkt 
hintereinander schreiben funktioniert tatsächlich ohne Probleme.

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.