Forum: Mikrocontroller und Digitale Elektronik UART Mega 164P


von Mario (Gast)


Lesenswert?

Hallo,

bin gerade dabei ein Programm vom Mega16 auf Mega 164P umzustellen. Beim 
initialisieren der USART wird beim schreiben des Registers UCSR0C auch 
das High-Byte der Registers UBRR0 mit diesem Wert überschrieben. Beim 
Mega16 konnte man ja dieses durch das Sezen des URSEL-Bit´s 
beeinflussen. Im Datenblatt habe ich keine Informationen dazu gefunden.

Wo liegt mein Fehler ?

C-Code:
UBRR0 = (uint16_t) (F_CPU / (16*Baud) -1);            // Baurate 
berechnen

UCSR0C = (1<<USBS0)|(3<<UCSZ00);    // Frame 8 Data , 2 Stop

mfg
Mario

: Verschoben durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mario schrieb:

> Beim
> initialisieren der USART wird beim schreiben des Registers UCSR0C auch
> das High-Byte der Registers UBRR0 mit diesem Wert überschrieben.

Womit hast du das verifiziert?

> Beim
> Mega16 konnte man ja dieses durch das Sezen des URSEL-Bit´s
> beeinflussen.

Beim ATmega164P sind diese beiden Register auf zwei verschiedenen
Adressen (0xC2 vs. 0xC5), sodass man den URSEL-Hack nicht braucht.

> UCSR0C = (1<<USBS0)|(3<<UCSZ00);    // Frame 8 Data , 2 Stop

Wer braucht denn heutzutage noch 2 Stoppbits?  Wenn du Standard-8N1-
Framing brauchst, kannst du das C-Register getrost einfach in Ruhe
lassen: dieses Frameformat ist bei allen AVRs voreingestellt.

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.