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.
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
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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.