UART zu langsam - wo ist der Fehler?

Gast #1187086
Lesenswert?

Hallo, ich weiß nicht weiter mit diesem Mini-Codeschnipsel. Er soll 
einfach permanent via printf "12345" ausgeben. Aber die UART sendet sehr 
langsam. Ist evtl. mein Chip defekt? Hat jemand gerade einen Mega8 und 
könnte das mal ausprobieren? oder sieht jemand den Fehler? Ich hatte 
schonmmal gepostet und die Register überprüft.. Mit dem Mega2560 und 
angepaßten Registern geht es.. seltsam..
1
#ifndef F_CPU
2
  #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 1000000"
3
  #define F_CPU 1000000UL
4
#endif
5

6
// Berechnungen für RS232
7
#define BAUD 1200UL          // Baudrate 1200
8
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // USART Baud Rate Register 
9
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) 
10
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)
11
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
12
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
13
#endif
14

15
#include <avr/io.h>
16
#include <stdio.h>
17

18
int main(void);
19
static void USART_Init( unsigned int ubrr);
20
int uart_putchar(char c, FILE *stream);
21
static FILE mystdout = FDEV_SETUP_STREAM( uart_putchar, NULL, _FDEV_SETUP_WRITE );
22

23
//*******************************************************
24
int main(void)
25
{
26
  USART_Init(UBRR_VAL);
27
    stdout = &mystdout;
28
  while(1) { printf("12345\n"); }
29
}
30

31
int uart_putchar( char c, FILE *stream )
32
{
33
    if( c == '\n' )
34
        uart_putchar( '\r', stream );
35
 
36
    loop_until_bit_is_set( UCSRA, UDRE );
37
    UDR = c;
38
    return 0;
39
}
40
 
41
void USART_Init( unsigned int ubrr)
42
{
43
  UBRRH = (unsigned char)(ubrr>>8);
44
  UBRRL = (unsigned char)ubrr;
45
  //Enable receiver and transmitter 
46
  UCSRB = (1<<RXEN)|(1<<TXEN);
47
  //Set frame format: 8N1
48
  UCSRC = (3<<UCSZ0);
49
}
Gast #1187100
Lesenswert?

Arrgh.. jetzt sehe ich es auch.. ich war schon dicht dran, hab aber für 
die Init (c-code-example) ins falsche Datenblatt geschaut.. Der Hinweis 
kam ja schonmal im anderen Thread, aber im falschen Datenblatt konnte 
ich natürlich keinen Fehler feststellen.. :-)

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