USART Baudrate berechnungsfehler - Mega8

OP #602765
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.
1
#ifndef F_CPU
2
#define F_CPU 4000000
3
#endif
4
#define UART_BAUD_RATE 9600
5
// Hilfsmakro zur UBRR-Berechnung ("Formel" laut Datenblatt) 
6
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
7

8
unsigned char get;
9

10

11
void init_uart(void)
12
{
13
  UCSRA &= (0<<U2X);
14
  UCSRB |= (1<<TXEN);  //Transmitter Enabled
15
  UCSRC |= (1<<URSEL) | (3<<UCSZ0);  //Asynchron 8N1
16
  
17
  UCSRB |= (1<<RXEN);  //Emfpang enabl
18

19
  UBRRH=(uint8_t) (UART_UBRR_CALC(UART_BAUD_RATE,F_CPU)>>8);
20
  UBRRL=(uint8_t)UART_UBRR_CALC(UART_BAUD_RATE,F_CPU);
21
  //UBRRH=0;
22
  //UBRRL= 25;  //19200 -> 25,0416
23
}
24

25

26

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


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

Greez
Nick
Angehängte Dateien:
OP #602991
Lesenswert?

Hallo

Habe jetzt
1
#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

1
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.
OP #602992
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren