www.mikrocontroller.net

Forum: Compiler & IDEs Warum empfängt mein UART immer nur 1 Zeichen?


Autor: Daniela (Gast)
Datum:

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Violation of Rule #1 (Give Complete Source Code) detected!
Thread will be eliminated in 24 hours!

Autor: Ronny (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

>>Habe ich vielleicht ein Bit gesetzt das ich nicht sollte ?

ja, RXCIE und TXCIE solltest du auf 0 setzen wenn du
keine Interrupts zum empfangen/senden benutzt.


Gruss
 Holger

Autor: Daniela (Gast)
Datum:

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

Autor: Ronny (Gast)
Datum:

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

Autor: Daniela (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Ronny

Komischerweise läuft es so wie ich es eingestellt habe.
Werde aber denoch die sache berichtigen.

Gruss

Daniela

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.