Fehler in uart-lib von Peter Fleury?

Gast #5273510
Lesenswert?
• ▲
▼
Aus uart.c Zeile ??? (von 
http://homepage.hispeed.ch/peterfleury/avr-software.html, abgerufen 
heute):
1
#if defined(UART0_UBRRH)
2
UART0_UBRRH = (unsigned char)((baudrate>>8)&0x80) ;
3
#endif    
4
UART0_UBRRL = (unsigned char) (baudrate&0x00FF);

Wozu ist das &0x80 gut?

Im alten ATmega8 gibt es zwar das URSEL-Bit an der entsprechenden 
Stelle. Das soll aber 0 sein, wenn man nach UBRRH schreiben möchte.

Ausserdem werden durch das &0x80 die unteren 4 Bit gelöscht, die ja für 
langsame Baudraten nötig sind.


Ich bin auf dieses Problem gestoßen, als ich versucht habe, ein UART mit 
300 Baud auf meinem ATtiny841 mit 8MHz zu programmieren. Egal wie hoch 
ich die Zahl in
1
uart_init(ubrr_value)
geschrieben habe, die Baudrate war immer etwas über 4000 Baud.

Ich habe das &0x80 entfernt, und so funktioniert es.
#5273526
Lesenswert?
• ▲
▼
@tuxpilot (Gast)

>http://homepage.hispeed.ch/peterfleury/avr-software.html, abgerufen
>heute):
>#if defined(UART0_UBRRH)
>UART0_UBRRH = (unsigned char)((baudrate>>8)&0x80) ;

Sieht nach einer Verschlimmbesserung auf. Das sollte wohl eher ein | 
sein.

>Im alten ATmega8 gibt es zwar das URSEL-Bit an der entsprechenden
>Stelle. Das soll aber 0 sein, wenn man nach UBRRH schreiben möchte.

Dann sollte es eher ein & ~0x80 sein. Oder ein & 0x7F.

>Ausserdem werden durch das &0x80 die unteren 4 Bit gelöscht, die ja für
>langsame Baudraten nötig sind.

Eben.
Gast #5273709
Lesenswert?
• ▲
▼
Habe gerade bemerkt, dass dieses Bit 0x8000 den Double Speed Mode 
aktivieren soll, was auch für &~0x80 spricht.

Zeile 458:
1
if ( baudrate & 0x8000 )
2
{
3
    #if UART0_BIT_U2X
4
    UART0_STATUS = (1<<UART0_BIT_U2X);  //Enable 2x speed 
5
    #endif
6
}

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.