www.mikrocontroller.net

Forum: GCC ATMega 8 - Seltsame Probleme mit UART


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Michael Jogwich (jogibaer)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

ich bin da auf ein Problem gestoßen, welches ich mir nicht erklären 
kann.

Ich konnte das Problem einkreisen und kann es auch umgehen, nur weiß ich 
nicht, warum ich das Problem habe.
(vermutlich sowieso ein Programmierfehler)

Im Anhang sind 2 Dateien.

Im main.c befindet sich ein extra Testprogramm, wo der Fehler auftritt.

Und zwar stimmt die Baudrate des UART nicht.
Wenn ich die UCSRx Register vor den UBRRx Registern beschreibe, habe ich 
meine Baudrate von 9600; wenn ich sie erst nach den UBRRx Registern 
beschreibe,(wie im Datenblatt angegeben,) habe ich laut Oszi ca. 300 
Baud.
Das Terminalprogramm zeigt dann bei 300 baud die Zeichen leicht 
verstümmelt an, sind also nicht ganz genau 300 baud.
-> siehe Kommentar im Quelltext

Ich hatte auch schon statt der Rechnung, die entsprechenden Werte per 
Zuweisung in die UBRRx Register geschrieben, aber auch dort habe ich den 
gleichen Fehler.

noch ein paar Infos:

Linux, avr-gcc 4.3.5, makefile hängt an

low Fuse: 0x1F
High Fuse:0xD0
Bootloader wird noch nicht benutzt



Sieht hier jemand mehr als ich ?

Jogibär

Autor: g457 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> UCSRC = (1<<UCSZ0) | (1<<UCSZ1);

da fehlt noch ein _BV(URSEL)

Dann ggf. noch CKOPT löschen.

HTH

Autor: Magnus M. (magnetus) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
g457 schrieb:
> da fehlt noch ein _BV(URSEL)

Jöpp. Beim Beschreiben von UCSRC muss das höchstwertige Bit (URSEL) 
gesetzt sein. Wenn das Bit nicht gesetzt wird, beschreibst du statt 
dessen das UBRRH Register.

Ein Blick ins Datenblatt hätte dir die Augen geöffnet:
Bit 7 – URSEL: Register Select

This bit selects between accessing the UCSRC or the UBRRH Register.
It is read as one when reading UCSRC. The URSEL must be one when
writing the UCSRC.

Autor: Michael Jogwich (jogibaer)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

oh je, da habe ich aber wirklich gepennt !!

Stimmt, mit URSEL funktioniert es auch andersrum.
Da habe ich wohl an der falschen Stelle gesucht, da ja die andere 
Version
funktioniert hat.


Bit 7 – URSEL: Register Select

This bit selects between accessing the UCSRC or the UBRRH Register.
It is read as one when reading UCSRC. The URSEL must be one when
writing the UCSRC.

Das habe ich anscheinend mit voller Absicht überlesen.

Danke noch mal an alle für die Tips.
Aber schon komisch, das es andersrum funktioniert hat.

Jogibär

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Michael Jogwich schrieb:
> Aber schon komisch, das es andersrum funktioniert hat.

Weil du dann den falschen Inhalt in UBRRH wieder überschreibst. Und dass 
nichts nach UCSRC geschrieben wurde stört nicht weiter, denn das, was du 
da reinschreiben willst, ist eh schon da drin (als Default-Inhalt nach 
einem Reset).

Autor: Michael Jogwich (jogibaer)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

stimmt.

Siehe Beschreibung URSEL weiter oben.

Danke noch mal an alle.

Jogibär

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net