Warum empfängt mein UART immer nur 1 Zeichen?

Gast #508388
Lesenswert?
• ▲
▼
Hallo

Ich Programmieren einen ATMega32 mit WinAVR

Ich schicke einen String von ca. 5 Buchstaben mit einem Terminalprogramm 
an den UART.

Leider kommt immer nur der 1. Buchstaben an. Warum das?

Habe ich vielleicht ein Bit gesetzt das ich nicht sollte ?



UCSRA = 
(1<<RXC)|(1<<TXC)|(1<<UDRE)|(01<<FE)|(0<<DOR)|(0<<PE)|(0<<U2X)|(0<<MPCM) 
;
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(0 
<<RXB8)|(0<<TXB8);
UCSRC = 
(1<<URSEL)|(1<<URSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1 
)|(1<<UCSZ0);


Grüsse

Daniela
Gast #508399
Lesenswert?
• ▲
▼
> UCSRA =
> (1<<RXC)|(1<<TXC)|(1<<UDRE)|(01<<FE)|(0<<DOR)|(0<<PE)|(0<<U2X)|(0<<MPCM) ;
> UCSRB=(1<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(0 
<<RXB8)|(0<<TXB8);

Das sind aber ganz schön viele Bits,die du da in einem 8-Bit Register 
setzen möchtest ;) Welche Settings(Baudrate,Bits pro Zeichen,etc) 
möchtest du den gern haben?Schau dir vielleicht besser nochmal das 
Kapitel über die UART im Datenblatt an,da steht eigentlich alles prima 
beschrieben,inklusive der Kontrollbits für die Register UCSRA,UCSRB und 
UCSRC.
Gast #508421
Lesenswert?
• ▲
▼
Hallo zusammen

Danke ich habe wirklich zu viele gesetzt. Hier die Lösung:

UCSRA=(1<<RXC)|(1<<TXC)|(0<<UDRE)|(0<<FE)|(0<<DOR)|(0<<PE)|(0<<U2X)|(0<< 
MPCM);
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(0<<UCSZ2)|(0 
<<RXB8)|(0<<TXB8);
UCSRC=(0<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(0<<UCSZ2)|(0< 
<UCSZ1)|(0<<UCSZ0);

UCSRA brauch ich gar nicht.

Gruss

Daniela
Gast #508438
Lesenswert?
• ▲
▼
Wir nähern uns zumindest ;)

Schau nochmal das Bit URSEL in UCSRC genauer an.Und dann wirst du 
sicherlich nicht nur 5 Bit pro Frame übertragen wollen (wird mit 
UCSZ0..UCSZ2 eingestellt,siehe Datenblatt).

Als nächstes wirst du nun auf das Problem stossen,das dein Programm in 
eine Interruptroutine springen will,sobald ein Zeichen empfangen oder 
gesendet wurde.Wenn du die entsprechenden Vektoren schon korrekt gesetzt 
hast,bist du schon fast fertig.Wenn nicht,wird dein Programm abstürzen.

Um die UART sauber zu initialisieren fehlen dir dann noch die korrekten 
Werte für das Baudraten-Register UBRL/UBRH.Damit legst du in 
Abhängigkeit vom CPU-Takt die Baudrate fest.Auf Seite 143 im Datenblatt 
steht die Formel zur Berechnung des Baudraten-Prescalers und wie man ihn 
ins entsprechende Register bekommt.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.