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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.