mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XMega128 und USART


Autor: Mike R. (thesealion)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
int main (void) 
   {

   PORTE.DIR   = PIN3_bm;
   PORTE.OUT   = PIN3_bm;
  

   USARTE0.CTRLA = 0;
   USARTE0.CTRLB = 8; // senden einschalten
   USARTE0.CTRLC = 3; // 8 Bit
   USARTE0.BAUDCTRLB = 0;
   USARTE0.BAUDCTRLA = 12;



   USARTE0.DATA = 0xAA;
   USARTE0.DATA = 0xAA;

   for(;;)
      {
      } 
   }
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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht 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
   PORTE.DIR   = PIN3_bm;
   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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.