Forum: Mikrocontroller und Digitale Elektronik Genauigkeit, Toleranz UART vs RC Oszillator


von Basti (Gast)


Lesenswert?

Hi,

ich habe vor einen Mega8 mit dem internen 8Mhz oszillator laufen zu 
lassen, benötige allerdings die UART. Nun ist ja der RC Oszillator nicht 
der stabilste... :-) Ich benötige allerdings nur 2400 oder maximal 4800 
Baud.
Meint ihr das er dafür stabil genug ist??

von Ferkel (Gast)


Lesenswert?

>Nun ist ja der RC Oszillator nicht der stabilste... :-)

Dann weißt Du ja Bescheid. Warum sollte denn der Taktgeber bei kleiner 
Baudrate stabiler werden?

von Heiko (Gast)


Lesenswert?

Unwahrscheinlich...

Du kannst maximal ein halbes Bit Fehler auf 10Bit (Start, 8 Daten, 
Stoppbit) tolerieren, und das auch nur mit viel Glück (wenn nämlich die 
Abtastung in der Bitmitte genau die richtige Seite der Flanke trifft) - 
stabil dürfte es irgendwo bei 1/4-1/5 Bit auf 10Bit werden. Das wären 
sind 2% Toleranz, in den gängigen Baudraten-Tabellen wird 1% als Maximum 
angesehen, weil der Empfänger ja auch noch eine Toleranz hat.

Wie genau ist der RC-Oszillator? Ich meine mich zu erinnern, dass dessen 
Toleranz deutlich höher liegt. Steht aber im Datenblatt.

Vielleicht funktionierts manchmal, bei konstanter Spannung und 
Temperatur und für eine begrenzte Zeit.

MfG, Heiko

von Jens (Gast)


Lesenswert?

Die Genauigkeit steht meist im Datenblatt. Für einen UART sind max. 5% 
Abweichung zulässig. Andernfalls gibt es Übertragungsprobleme. Das 
dürfte der Mega8 nicht ganz schaffen. Bei den PICs der neueren 
Generation ist der interne RC temperaturkompensiert und vorabgeglichen 
und erreicht bei einigen Typen eine max. Abweichung von 1%. Ich denke, 
dass es das auch bei den AVRs gibt. Also mal auf der Seite von Atmel 
suchen...

von Peter D. (peda)


Lesenswert?

Basti schrieb:
> Ich benötige allerdings nur 2400 oder maximal 4800
> Baud.

Ob 115200 oder 1200Baud, der Fehler ist immer der gleiche.

Bei hohen Baudrate kann aber noch der Rundungsfehler des Teilers 
hinzukommen, wenn er keine ganze Zahl ergibt.
Und außerdem die Flankenverschleifung des Treiber-ICs und des Kabels.


Peter

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich könnte mir eine "Baudratenregelung" vorstellen, wenn du das 
RX-Signal gleichzeitig auf einen Cpature-Timer legst. Dann kannst du die 
Dauer eines Bits berechnen und diesen Wert als Korrekturwert für das 
Baudratenregister verwenden. Wenn du für 2400 z.B. einen "Standardwert" 
von 207 für das UBRR errechnest, dann hast du eine Änderung der Baudrate 
von +0,5% bei 208 und -0,5% bei 206. Damit kannst du dich dann auf die 
korrekte Baudrate des Senders einstellen. Für den geforderten 
Genauigkeitsbereich von etwa +-3% hast du dann also 12 Schritte.
Aber: trivial ist das Ganze nicht....

von Falk B. (falk)


Lesenswert?

@  Basti (Gast)

>ich habe vor einen Mega8 mit dem internen 8Mhz oszillator laufen zu
>lassen, benötige allerdings die UART.

Kein Platz merh für einen kleinen Quarz? Glaub ich kaum.

>Meint ihr das er dafür stabil genug ist??

Wenn du ihn kalibrierst und danach die Temperatur auf +/-15K sowie die 
Versorgungsspannung auf +/- 0,1V stabil hälst, dann geht das schon. Es 
gibt da glaub ich auch eine Application Note von Atmel.

Siehe auch das Datenblatt unter Typical Characteristics.

MFG
Falk

von Basti (Gast)


Lesenswert?

Ist ein Platzproblem. Habe es jetzt so gelöst, dass ich die Platine 
vergrößere und einen Quarz hinzufüge. Im gleichen Atemzug auch noch den 
Tiny gegen einen Mega (Uart als Hardware) und einen RS485 IC..

Danke für eure Ausführungen!

von Lehrmann M. (ubimbo)


Lesenswert?

Falk Brunner schrieb:
> @  Basti (Gast)
>
>>ich habe vor einen Mega8 mit dem internen 8Mhz oszillator laufen zu
>>lassen, benötige allerdings die UART.
>
> Kein Platz merh für einen kleinen Quarz? Glaub ich kaum.

Da muss ich Falk Recht geben. Ein normaler Quarz kostet bei Reichelt 18 
Cent! Okay ja dann noch 2 Kerkos dazu. Macht dann 25 Cent vielleicht ...

Ich kann dir nur raten, einen Quarz dazuzubauen. Du ärgerst dich sonst 
nur ...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ist ein Platzproblem.
> Habe es jetzt so gelöst, dass ich die Platine vergrößere...
Hattest du ein Problem mit einer zu kleinen Platine?  :-o

> noch den Tiny gegen einen Mega
Der mega8 war doch schon zu Beginn des Freds drin...

von Basti (Gast)


Lesenswert?

Stümmt. hab zwei Layoutvarianten angefangen. Tiny wär mir lieber 
gewesen. Aber Software-uart... uiuiui

von Vlad T. (vlad_tepesch)


Lesenswert?

Peter Dannegger schrieb:
> Ob 115200 oder 1200Baud, der Fehler ist immer der gleiche.

warum?
synchronisiert wird doch auf das erste bit.
Das heißt die Startbedingung für jedes Byte ist gleich.
Da die Bitzeiten jedoch sehr viel größer sind, sollte doch eine leichte 
Verschiebung aufgrund falschen Timings sich doch bei der Abtastung 
weniger stark auswirken, als bei einem sehr schnellen Signal


1
   v      v       v       v
2
 ______        ______        
3
|      |______|      |______|
4
5
 v  v  v  v
6
 _   _
7
| |_| |_|

Oder was verstehe ich da falsch?

von Falk B. (falk)


Lesenswert?

@  Vlad Tepesch (vlad_tepesch)

>Oder was verstehe ich da falsch?

Ja. Du hast die Prozentrechnung nicht verstanden. Wenn dein Oszillator 
um X Prozent falsch geht, wird er sowohl bei 155k2 als auch 1200 Baud 
nach Y Bit um Z Prozent falsch gehen.

Z = Y * X

von Karl H. (kbuchegg)


Lesenswert?

Vlad Tepesch schrieb:
> Peter Dannegger schrieb:
>> Ob 115200 oder 1200Baud, der Fehler ist immer der gleiche.
>
> warum?

weil 1% immer 1% sind.
Egal ob bei 300 Baud oder bei 115200 Baud.

> Da die Bitzeiten jedoch sehr viel größer sind, sollte doch eine leichte
> Verschiebung aufgrund falschen Timings

solange du das falsche Timing in absoluten Zahlen (in Form von ns) 
angeben kannst, hast du recht. Nur leider ist der Spielraum des 
Oszillators ebenfalls in % angegeben. Ein Oszillator der dir bei 
Temperaturänderung um 5% davonläuft, läuft die sowohl bei 300 Baud als 
auch bei 115200 Baud um 5% davon.

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.