mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Baudrate laesst sich nicht aendern!


Autor: Fenfen "x" (x24)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich stehe kurz vorm Verzweifeln. Es gibt mal wieder ein Problem mit dem 
UART und der Baudrate. Bitte nicht die Augen verdrehen, denn zu diesem 
Fehler konnte ich hier im Forum keine Loesung finden.

Ich verwende einen ATmega16 mit externem 8MHz Quarz. Die Baudrate 
berechne ich nach der "genaueren" Formel aus dem Wiki, die auch mit den 
Werten fuer UBBR im Datenblatt Uebereinstimmung liefert.
Jedoch stimmt die Baudrate nicht mit der im UBBR ueberein (mit Jtag 
UBBRL/H ueberprueft)! Egal welche Werte ich waehle, es kommt immer nur 
nur ca. 300Baud raus (Messung mit Oszi).
Ich habe keine Ahnung wieso!? Die Fusebits sind auf externen Quarz 
gesetzt. Daran duerfte es auch gar nicht liegen, denn dann muesste man 
ja wenigstens eine Veraenderung auf dem Oszi sehen koennen.

Ich brauch daher dringend eure Hilfe. Danke.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"s" "xy" schrieb:

> Ich brauch daher dringend eure Hilfe. Danke.

Vorher brauchen wir aber dein Hilfe.
Ohne Code ist sowas nämlich immer nur Rätselraten.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Baudrate ist also viel zu niedrig, stimmt's?  Hast Du beachtet, dass 
UBRRH und UCSRC sich dieselbe Adresse teilen und mit dem URSEL-Bit 
umgeschaltet werden?  Viel zu niedrige Baudrates ergeben sich nämlich 
dann, wenn Du nach UCSRC schreiben möchtest, in Wirklichkeit aber UBRRH 
adressierst, weil das URSEL-Bit (0x80) nicht gesetzt ist.

Autor: Fenfen "x" (x24)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl Heinz

Tut mir leid, den Code habe ich ganz vergessen. Ich habe ihn aus der 
AppNote 306 entnommen.
/* Initialize USART */
void usart_init( unsigned int baudrate )
{
  unsigned char x;

  /* Set the baud rate */
  UBRRH = (unsigned char) (baudrate>>8);                  
  UBRRL = (unsigned char) baudrate;
  
  /* Enable UART receiver and transmitter */
  UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) ); 
  
  /* Set frame format: 8 data 1stop */

  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);              //For devices with Extended IO
  
  
  /* Flush receive buffer */
  x = 0;           

  USART_RxTail = x;
  USART_RxHead = x;
  USART_TxTail = x;
  USART_TxHead = x;
}

womit wir schon beim Thema Hazeh waeren:

Du hast recht, der Code aus der AppNote war wohl allgemein fuer alle 
Controller gehalten und das URSEL Bit nicht vorgesehen. Jetzt aendert 
sich die Baudrate!!! Vielen Dank euch beiden.

Eine Frage haette ich noch, ist es normal dass das Jtag das UCSRC nicht 
auslesen kann? Ich sehe im Debugger immer nur 0x00. Im Dateblatt steht 
ja was drin, dass es da eine etwas aufwendige zeitabhaengige Prozedur 
sein soll. Naja, wie auch immer...soweit sehe ich zumindest eine 
Aenderung der Baudrate. :-)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Eine Frage haette ich noch, ist es normal dass das Jtag das UCSRC nicht
> auslesen kann? Ich sehe im Debugger immer nur 0x00.

Die im Datenblatt beschriebene Sequenz für UCSRC dürfte über JTAG nicht 
zu machen sein.

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.