Genauigkeit, Toleranz UART vs RC Oszillator

Gast #1795512
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??
Gast #1795537
>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?
Gast #1795552
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
Gast #1795554
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...
#1795569
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
Moderator (Firma: Titel) Persönliche Seite #1795582
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....
#1795593
@  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
Gast #1795621
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!
#1795624
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 ...
#1795817
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?
#1795823
@  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
#1795830
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.