www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART - ATmega16


Autor: filzlaus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe mir das STK500 zugelegt und arbeite gerade das Tutorial durch.
Leider hab ich jetzt ein Problem mit der UART und hoffe, dass mir hier
jemand weiterhelfen kann.
Mein Ziel ist ganz einfach, wie im Tutorial beschrieben, den String
"TEST!" über die UART rauszuschicken (mit AVR Studio 4, Assembler).
Mit dem AT90S8515 klappt das auch prima.
Nur mit dem ATmega16 will es einfach nicht funktionieren. Ich glaube
mein Problem ist das Register UBRRH. Obwohl URSEL auf 1 steht wird
trotzdem in UBRRH und UCSRC immer gleichzeitig
derselbe Wert eingetragen. Was mach ich bloß falsch?? Die Taktfrequenz
hab ich auf 1MHz eingestellt. Ist das so richtig??


Danke

Autor: filzlaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab gerade nochmal die Taktfrequenz vom STK500-Programmer ausgelesen.
Ist bei 1,23MHz. Habs damit probiert, aber funktioniert auch nicht.

Autor: Britneypunter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein erster Mega an der UART?
Du mußt bei den Mega's den Tacktgeber als erstes Konfigurieren. Tust
du dies nicht, so läuft er standartmäßig mit dem internen 1MHz
Qszilator. Konfiguriert wird der Tackt mit den Fuses Bits (siehe
Datenblatt).

Andererseits müßte es eigendlich funktioniert haben, da du ja von einem
1MHz Tackt ausgingst und dem entsprechend dann die Baudrate eingestellt
hast.

Also ich habe mich mit dem Problem auch ewig rum geschlagen, als ich
zum ersten mal nen Mega mit der UART verbunden habe. Bei mir lag es
letztlich an der Quarzkonfiguration, also den Fuses bits.

Autor: Axel S. (mayday)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Problem ebenfalls: der von avr-gcc generierte Code schreibt 
unabhängig von URSEL sowohl UCSRC als auch UBRRH. Evtl. ein Bug im 
Compiler?!
Glücklicherweise hat in meinem Fall eine Umordnung der Befehle genügt, 
so dass die Baudrate korrekt eingestellt wird.

Hier ein Codeschnipsel, bei dem das Problem auftritt:

/* Set baud rate */
baudRegister=(uint16_t) 
((uint32_t)F_CPU/(uint32_t)((uint32_t)baud*(uint32_t)16) - 1);
UBRRH = (unsigned char) (baudRegister>>8);
UBRRL = (unsigned char) baudRegister;
/* Set frame format: 8 data, no parity & 1 stop bit */
UCSRC = (1<<URSEL) | (0<<UMSEL) | (1<<UCSZ0) | (1<<UCSZ1);
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN) | (1<<TXEN);

Mit dem UCSRC=.... wird auch UBRRH fälschlicherweise überschrieben.

avr-gcc Version 3.4.6
AVR-Studio Version 4.13 SP1 bzw. build 557

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es kann nicht am Compiler liegen, da der Schreibzugriff µC-intern 
ausschließlich über das URSEL-Bit geregelt wird! Die Register liegen an 
der selben Adresse im Speicher und nur URSEL entscheidet, welches der 
beiden Register geschrieben wird. Es ist also in der Realität schlicht 
unmöglich, beide Register gleichzeitig zu beschreiben (auch der Compiler 
müsste zu dem Zwecke zwei Zugriffe draus machen). Ein Bit kann nunmal 
nicht gleichzeitig gesetzt und nicht gesetzt sein.

Du hast das vermutlich im Simulator ausprobiert, und ja: Der Simulator 
hat an der Stelle einen Bug, der seit langem bekannt und auch in der 
Hilfe zum Simulator unter "Known Issues" aufgeführt ist.

Abgesehen davon ist es schwachsinnig, für so etwas einen fast 4 Jahre 
alten Thread wieder rauszukramen.

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.