Forum: Mikrocontroller und Digitale Elektronik Falsche Initialwerte Atmega16


von Markus W. (kornbanane)


Lesenswert?

Hallo,

mir ist gerade bei der Programmierung der UART Schnittstelle etwas 
seltsames aufgefallen. Und zwar soll es sich um eine 8-Bit Übertragung 
handeln, also:
1
UCSRC |= ((1<<URSEL) | (1<<UCSZ1)| (1<<UCSZ0));  // Übertragung 8 Bit

Nun kann man sich ja laut Datenblatt diese Zeile sparen, da als 
Initialwerte bzw. Defaultwerte das Bit UCSZ1 und UCSZ2 = 1 sind.

Aber hier liegt das Problem... wenn ich diese Werte nicht "per Hand" 
vorgebe dann kommt bei der Übertragung nur misst raus.

Wie kann das sein ? Schließlich funktionieren die anderen Defaultwerte 
wie zb. das Standartmäßig 1 Stopbit benutzt wird doch auch.

Ist das ein Bug im AVR ? Oder hängt es mit dem Compiler zusammen 
(WINAVR) dass der sein eigenes Ding macht wenn ich nix vorgebe ?

von Hubert G. (hubertg)


Lesenswert?

Wo steht das mit dem Defaultwert.

von Dennis X. (Gast)


Lesenswert?

Markus Wi*** schrieb:
> das Bit UCSZ1 und UCSZ2 = 1 sind.

SOll der angenommene DEFAULT Wert sein.

Markus Wi*** schrieb:
> UCSRC |= ((1<<URSEL) | (1<<UCSZ1)| (1<<UCSZ0));  // Übertragung 8 Bit

Und das setzt du...
Klingelts?

von Markus W. (kornbanane)


Lesenswert?

Ja mir is schon klar wieso es jetzt geht aber mir war nicht klar wieso 
es nicht geht, wenn ich es nicht selber setze, da es ja Defaultmäßig 
schon so eingestellt sein sollte.

Also wenn du sagst angenommener Defaultwert dann heißt dass, das man nie 
weiß wie der Wert wirklich ist ? Dann müsste man ja immer das komplette 
Register beschreiben - bei allen Registern die eine Funktionalität 
steuern.

Das steht im Datenblatt auf Seite 166 oben beim UCSRC Register bei 
"initial value".

von spess53 (Gast)


Lesenswert?

Hi

Hast du die Bedeutung der URSEL-Bits verstanden?

MfG Spess

von holger (Gast)


Lesenswert?

>Ja mir is schon klar wieso es jetzt geht aber mir war nicht klar wieso
>es nicht geht, wenn ich es nicht selber setze, da es ja Defaultmäßig
>schon so eingestellt sein sollte.

Weil du vorher vermutlich in UBRRH die Baudrate reinschreibst.
Damit ist der Default Wert Geschichte.

von Markus W. (kornbanane)


Lesenswert?

dumm ... ja da hast du wohl recht

von holger (Gast)


Lesenswert?

>Weil du vorher vermutlich in UBRRH die Baudrate reinschreibst.
>Damit ist der Default Wert Geschichte.

Seite 163 lesen;)

von Krapao (Gast)


Lesenswert?

> UCSRC |= ((1<<URSEL) | (1<<UCSZ1)| (1<<UCSZ0));  // Übertragung 8 Bit
        ^

Schau dir das Beispiel zum setzen des UCSRC bei AVRs mit URSEL Bit im 
Datenblatt ganz genau an. Bzw. im Tutorial hier ist auch erklärt, wieso 
da kein | hingehört.

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.