mikrocontroller.net

Forum: Compiler & IDEs USART Baudrate berechnungsfehler - Mega8


Autor: Nick Ma. (nickma)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Meine Baudrate wird falsch berechnet.
Und zwar kommt bei folgendem Code (wo ja wohl 9600 rauskommen sollte), 
eine Baudrate von 19200; Partity None; 8 Data Bits; 1 Stop Bit raus.

Und ich weiß nicht wo der fehler liegt.
-) Atmega8
-) Ext. XTAL 4MhZ
-) Datenübertragung generell geht... hald nur mit 19200 Baud
C-File im Anhang.
#ifndef F_CPU
#define F_CPU 4000000
#endif
#define UART_BAUD_RATE 9600
// Hilfsmakro zur UBRR-Berechnung ("Formel" laut Datenblatt) 
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)

unsigned char get;


void init_uart(void)
{
  UCSRA &= (0<<U2X);
  UCSRB |= (1<<TXEN);  //Transmitter Enabled
  UCSRC |= (1<<URSEL) | (3<<UCSZ0);  //Asynchron 8N1
  
  UCSRB |= (1<<RXEN);  //Emfpang enabl

  UBRRH=(uint8_t) (UART_UBRR_CALC(UART_BAUD_RATE,F_CPU)>>8);
  UBRRL=(uint8_t)UART_UBRR_CALC(UART_BAUD_RATE,F_CPU);
  //UBRRH=0;
  //UBRRL= 25;  //19200 -> 25,0416
}



int uart_putc(unsigned char c)
{
  while (!(UCSRA & (1<<UDRE))); // wait for empty (UartDataRegisterEmpty) transmit buffer
  UDR = c; // put data into buffer, sends the data
  return 0;
}


Nehme an dass es irgend was banales sein wird... -.-

Greez
Nick

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

Bewertung
0 lesenswert
nicht lesenswert
Mal mit
#define F_CPU 4000000UL
versucht? Ist auch wirklich ein 4 MHz-Takt eingestellt?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1/ Folgendes kann dir in AVRStudio einen Vogel zeigen:
(ganz aktuell siehe Beitrag "Dringendes Problem mit UART+Baudrate.")

#ifndef F_CPU
#define F_CPU 4000000
#endif

2/ Welchen Wert haben die Fuses? Hoffentlich nicht Interner RC-Oszi bei 
8 MHz...

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

Bewertung
0 lesenswert
nicht lesenswert
Das hier

>  UCSRA &= (0<<U2X);

macht nicht das was du denkst das es tun sollte.

Sollte allerdings keine grosse Rolle spielen, da U2X
per Default ja ausgeschaltet ist.

Aber probieren kann erst mal nicht schaden.
Korregier das mal zu

  UCSRA &= ~(1<<U2X);

Autor: Nick Ma. (nickma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Habe jetzt
#define F_CPU 4000000UL
eingestellt, ohne Veränderung.

Die Fuses sind wie folgt gesetzt:
CKSEL= 0111    SUT= 01
Sollte als ein "Ext. RC Osc. 3.0MHz - 8.0MHz; Start-up time: 18CK + 4ms; 
sein.
Und Extern hängt ein 4.0 MHz Quarz

UCSRA &= ~(1<<U2X);
Das habe ich auch nur zur kontrolle eingespielt, weil es eben per 
Default aus 0 sein müsste. Habe es ausgebessert, ohne Erfolg.

Autor: Nick Ma. (nickma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, PROBLEM GEFUNDEN:
Auf anregung von "Stefan B." (Danke auf dem Weg) habe ich mich im 
Beitrag: Beitrag "Dringendes Problem mit UART+Baudrate." umgesehen.

Die Fuses waren für meinen externen XTAL 4.0 MHz (STK500) nicht richtig 
gesezt.
VORHER:
CKSEL= 0111    SUT= 01
Ext. RC Osc. 3.0MHz - 8.0MHz; Start-up time: 18CK + 4ms;
JETZT (richtig):
CKSEL= 1111    SUT= 01
Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 0ms

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.