Forum: Mikrocontroller und Digitale Elektronik UART bei 115200Baud und 12Mhz Quarz


von Hannes (Gast)


Lesenswert?

Hi,

ich habe mich im Artikel bereits umgesehen:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

Dennoch bekomme ich bei der Konstellation keine Ausgabe, alle anderen 
Baudraten sind kein Problem.

Nutze die zweite Formel:

#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)

Sollte 6 ergeben. Ich bekomme immer ein ü statt einem A.

Was kanns sein?

Gruß,
H.
von Hannes (Gast)


Lesenswert?

...bin jetzt auf 16Mhz umgestiegen, läuft. Eine Info wäre trotzdemm sehr 
interessant. liegt wahrscheinlich ungünstig...

H.
von Walter (Gast)


Lesenswert?

Hannes schrieb:
> #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
>
> Sollte 6 ergeben. Ich bekomme immer ein ü statt einem A.
>
> Was kanns sein?

wo hast du denn diese schräge Formel her?
von Karl H. (kbuchegg)


Lesenswert?

Hannes schrieb:

> #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
>
> Sollte 6 ergeben.

Der genaue Wert ist 6.010...

Indem du die 0.01... ignorierst, machst du einen Fehler von ca 16%.
Das ist zu viel.
von H.Joachim S. (crazyhorse)


Lesenswert?

Bei 16MHz liegst du auch kräftig daneben (2% bzw 4% ).
Besser mit 12MHz und double speed mode, das passt.
von Walter (Gast)


Lesenswert?

oops, falsch hingeguckt, die Formel stimmt schon.
Der Fehler ist bei 12 übrigens geringer als bei 16MHz
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Hannes schrieb:
>
>> #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
>>
>> Sollte 6 ergeben.
>
> Der genaue Wert ist 6.010...
>
> Indem du die 0.01... ignorierst, machst du einen Fehler von ca 16%.
> Das ist zu viel.

Was hab ich'n da für einen Müll gerechnet.
Wird Zeit fürs Bett
von Hannes (Gast)


Lesenswert?

...tja, dies Thema - wie gesagt mit 16Mhz habe ich alle Zeichen auf dem 
Schirm...und das obwohl der Fehler höher ist...

>>ignorierst, machst du einen Fehler von ca 16%

ich habe 0,1% als Fehler berechnet, nach der Formel, siehe Link oben!?

((7,0/7,01)-1)*100=0,1%

Bei 16Mhz:(8,18)

((9,0/9,18)-1)*100=1,9%

Das kann doch nicht sein...

Gruß,

H.
von Hannes (Gast)


Lesenswert?

>>Was hab ich'n da für einen Müll gerechnet.

War gerad am Nachrechnen - jap!

Nacht.

Ich mach das jetzt noch fertig.

H
von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Datenblatt zu deinem Controller - Sektion UART - Seite "Tabellen mit 
Baudratensettings zu X verschiedenen Takten"
von Hannes (Gast)


Lesenswert?

Atmega 168 Seite 197, danke. Leider kein 12Mhz dabei :-)

H.
von Peter D. (peda)


Lesenswert?

Nimm einfach nen Standardquarz, z.B. 11,0592 oder 14,7456MHz, dann 
klappt es super mit der UART.

Ganzzahlige Quarze braucht man doch nur für CAN oder USB.


Peter
von spess53 (Gast)


Lesenswert?

Hi

>Nimm einfach nen Standardquarz, z.B. 11,0592 oder 14,7456MHz, dann
>klappt es super mit der UART.

115200Bd bei 12MHz ist bei Double Speet hinreichend genau (0,2% Fehler).

MfG Spess
von spess53 (Gast)


Lesenswert?

Hi

Ups. 'Speet' -> 'Speed'.

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