USART Empfangs bzw. Sendeproblem

OP #3345527
Lesenswert?

Hey Leute,

habe mal mit dem USART des xmegas rumgespielt und auch schon eine 
Verbindung zum PC herstellen können, doch leider kommen bei mir in HTerm 
immer nur 00 an, wenn ich was an den MC sende.

Wisst ihr woran das liegen kann? Ist die interne Clock vielleicht zu 
ungenau?

Hier der Code:
1
#include <stdint.h>
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4

5
int main(void)
6
{
7
  PORTE.DIR = 0xff;    // LED-Port als Ausgang schalten
8
  PORTE.OUT = 0xff;    // LEDs ausschalten
9
  
10
  cli();          // Globale Interrupts deaktivieren
11
  
12
  USARTC0.BAUDCTRLA = 0x67;              // Baudrate einstellen (19200)
13
  USARTC0.BAUDCTRLB = 0;                // BSEL = 0
14
  USARTC0.CTRLA = USART_RXCINTLVL_HI_gc;        // Receive Interrupt Enable, Interrupt Level High
15
  USARTC0.CTRLC = USART_CHSIZE_8BIT_gc |        // Bit Größe auf 8 Bit stellen
16
          USART_CMODE_ASYNCHRONOUS_gc |    // Asynchroner Modus
17
          USART_PMODE_DISABLED_gc;      // Parity Bit deaktivieren
18
  USARTC0.CTRLB = USART_TXEN_bm | USART_RXEN_bm;    // Transmitt + Receive Enable
19
  PORTC.DIR = 0x08;                  // TxD Pin als Ausgang schalten
20
  
21
  PMIC.CTRL = PMIC_HILVLEN_bm;    // High Level Interrupts aktivieren
22
  sei();                // Globale Interrupts aktivieren
23
  
24
    while(1)
25
    {
26
    PORTE.OUTTGL = 0x01;
27
    }
28
}
29

30
ISR(USARTC0_RXC_vect)
31
{
32
  PORTE.OUTTGL = 0x88;              // wird ISR auch wirklich aufgerufen ?
33
  while (!(USARTC0.STATUS & USART_DREIF_bm));    // Warte bis das Data Register Empty Flag gesetzt ist
34
  USARTC0.DATA = USARTC0.DATA;          // Schreibe den Wert des Receive Buffers gleich wieder in das TX Register
35
}

Ich habe nochmal ein Screenshot von HTerm gemacht, damit ihr seht was 
ich meine.

Viele Grüße
Angehängte Dateien:
#3345550
Lesenswert?

Für 20 gesendete Zeichen hast du 80 Zeichen Echo.
Da musst du aber ordentlich daneben sein.

Was komisch ist: das da immer 0 zurück kommt. Das ist untypisch.

Pegel verkehrt rum? gehst du mit einer TTL-Seriellen auf den Seriellen 
Eingang vom PC? Ist da ein RS232-USB Konverter im Spiel?
OP #3345552
Lesenswert?

Okay, anscheinend bin ich wirklich zu optimistisch gewesen ;) Mit 1200 
Baud gehts einigermaßen, oft kommen die Zeichen aber noch falsch an

@Karl:

Der Wert der in USARTC0.CTRLA geschrieben wird, brechnet sich wie folgt 
(mit BSCALE = 0):

Im Anhang nochmal ein Screenshot von 1200 Baud.
Ist nicht ganz das was zurückkommen sollte, aber schon mal besser als 
vorher :D
Angehängte Dateien:

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