www.mikrocontroller.net

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


Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Ferkel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Basti (Gast)
Datum:

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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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


   v      v       v       v
 ______        ______        
|      |______|      |______|

 v  v  v  v
 _   _
| |_| |_|


Oder was verstehe ich da falsch?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.