Forum: Mikrocontroller und Digitale Elektronik UART und Mega169


von Jabber W. (jabber)


Lesenswert?

hallo, mein Ziel ist es über UART was an den PC zu schicken.
Ich habe mich ans Tutorial gehalten und bekomme jetzt eine Warnung und 
den  Fehler das der Baudratenfehler zu groß ist.

Die Warnung lautet: interger overflow in expression
und bezieht sich auf die zuweisung der Bautrate in die Register UBRRH 
und  UBRRL.

1
#ifndef F_CPU
2
#define F_CPU 8000000L   //systemtakt in Hz
3
#endif
4
5
#define BAUD 9600      //Baudrate 
6
7
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)  //clever runden
8
#define BAUD_REAL (F_CPU/(16*UBRR_VAL+1))    //Reale Baudrate
9
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000)  //Rehler in Promille 
10
11
#if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
12
  #error Sysematiser Fehler der Baudrate grösser 1% und damit zu hoch!
13
#endif
14
15
int main(void)
16
{    
17
  //Bautrate setzen durch makro  
18
  //UBRR = UBRR_VAL;
19
  
20
  UBRRH = UBRR_VAL >> 8;    // interger overflow 
21
  UBRRL = UBRR_VAL & 0xFF;
22
  
23
  // UART enable TX 
24
  UCSRB |= (1<<TXEN);
25
  UCSRC |= (0<<UMSEL) | (3<<UCSZ0);

bis auf die Register habe ich gegentlich nichts geändert.
Wobei die laut datenblatt eigentlich anderst (UBRRH0 UBRRL0) heißen aber 
die bezeichung mag er auch nicht.

von Jörg X. (Gast)


Lesenswert?

Behebt ein "#define BAUD 9600L" statt "#define BAUD 9600" das Problem?
9600 * 8 ist ja größer als 32767 (0x7fff bzw. der Größte der Wert den 
ein AVR-GCC-int annehmen kann).
Sieht nach schlecht abgeschrieben aus ;)
da 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#UART_initialisieren 
stehts nämlich richtig...

hth. Jörg

von Falk B. (falk)


Lesenswert?

@ Jabber Wock (jabber)

>Ich habe mich ans Tutorial gehalten und bekomme jetzt eine Warnung und
>den  Fehler das der Baudratenfehler zu groß ist.

Dann wird das wohl so sein.

>Die Warnung lautet: interger overflow in expression
>und bezieht sich auf die zuweisung der Bautrate in die Register UBRRH
>und  UBRRL.

Lass das mit der Umschreibung von Fehlermeldungen. Kopier die 1:1 hier 
rein.

MFG
Falk

von Jabber W. (jabber)


Lesenswert?

Ok danke, damit ist die Warnung schon mal weg.
Hab ich wohl verschluckt das L.

Aber was bleibt ist die Fehler in der Bautrate. Wie bekomme ich die hin?
Der butterfly arbeitet ja mit dem internen RC, muss da noch was gemacht 
werden?
Ich habe irgendwo gelesen das die zu ungenau sind.

mfg
Jabber

von Falk B. (falk)


Lesenswert?

@ Jabber Wock (jabber)

>Aber was bleibt ist die Fehler in der Bautrate. Wie bekomme ich die hin?

Mit dem richtign Quarz bzw. einer niedrigeren Baudrate. Wobei 9500 Baud 
bei 8MHz machbar sind. Schau mal, ob du nicht F_CPU in den 
Projekteinstllungen noch definiert hast.

>Der butterfly arbeitet ja mit dem internen RC, muss da noch was gemacht
>werden?

IHN VERGESSEN!

>Ich habe irgendwo gelesen das die zu ungenau sind.

EBEN!

AVR-Tutorial: UART

MFG
Falk

von Jabber W. (jabber)


Lesenswert?

Aber der Butterfly hat doch von Haus aus eine UART Funktion mit der man 
einen Namen über die serielle Schnittstelle in den Butterfly schicken 
kann. Wie machen die das denn?

von Jörg X. (Gast)


Lesenswert?

AFAIK kalibrieren die den internen Oszillator am Uhrenquarz..
Hier hast du was dazu zu lesen ;)
http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app

Und eben die Butterfly-Doku, z.B. im AVR-Studio unter 'help' ;)

hth. Jörg

von Jabber W. (jabber)


Lesenswert?

Danke für die Hilfe.
Hab ich auch schon gefunden gehabt.
Klappt super bis jetzt und es ist ja nur zum üben... wenn ich mal was 
richtiges mache kann ich mir ja ein Quarz dran löten.

von rene (Gast)


Lesenswert?

Jabber,
ich hab auch mal was mit dem butterfly gemacht :
http://www.ibrtses.com/embedded/avrosccal.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.