UART und interner Oszillator oder doch Quarz?

Gast #2905016
Lesenswert?

Hi,
kurze frage,
ich möchte ein eine kleine batteriebetriebene Schaltung mit einem 
ATMEGA8L bauen.
im Großen und Ganzen ist die Sache nicht Timing-kritisch, nur dass ich 
ein paar Zeichen per UART übertragen muss. die sollten aber schon 
zuverlässig ankommen!
hätte an eine Betriebsfrequenz von ca. 8Mhz gedacht.
reicht dafür der interne Oszillator, oder soll ich schon einen Quarz 
nehmen?
kann das aufgrund mangelnder Erfahrung leider nicht einschätzen.

wenn Quarz: wo kauft ihr die Dinger günstig? SMD und schön klein!
hat jemand zufällig einen lieblingstyp zum empfehlen? die auswahl ist ja 
schier unendlich bei den dingern ...

danke.
#2905024
Lesenswert?

Für 9600 Baud sollte der interne Oszillator eigentlich immer reichen. 
Aber bei höheren Baudrate (>= 38400) kann es schon durch Temperatur- 
und/oder Spannungsschwankungen zu Übertragungsfehlern kommen. Mal davon 
abgesehen dass du die meisten Standardbaudraten dann auch nicht mehr 
sauber hinbekommst.
Also wenn du den Platz hast würde ich gleich ein Baudratenquarz 
vorsehen, dann bist du auf der sicheren Seite und kannst eben auch 
Baudraten wie 115200 sauber einstellen. Den internen Oszillator des 
Atmegas hat 8 MHz und kann durch CKDIV noch (ganzzahlig) runtergeteilt 
werden.
Klar durch den OSCAL kann man ggf. den interen Oszillator auf die 7,3... 
MHz "runterbiegen", aber das ist eher Fusch und ändert auch nichts an 
der Spannungs- und Temperaturabhängigkeit.

Beim Atxmega geht aber auch der interne Oszillator für alle möglichen 
Baudraten, da er zum einen genauer ist und zum anderen der UART-Teiler 
genauer eingestellt werden kann.
#2905040
Lesenswert?

Hewald schrieb:
> Frequenz besser auf 7.3728MHz legen??  geht das mit dem internen
> Oszillator?
Theoretisch ja. Praktisch ist das Unsinn.
Der 7,3728MHz-Quarz ist ein Baudratenquarz, mit dem die Baudrate ohne 
Abweichung eingestellt werden kann. 9600Bd kannst du aber mit geringer 
Toleranz auch mit 8MHz mit dem dem internen Oszillator erzeugen. Siehe 
Tabelle im Datenblatt.
Die Stabilität des internen Oszillators ist aber geringer als beim 
Quarz. Ändert sich die Temperatur, ändert sich auch die Frequenz. Beim 
Quarz ist das auch so, aber im ganz kleinen Rahmen und damit irrelevant.
Ich benutze den UART auch mit 9600Bd und internem Takt. Das ist kein 
Problem solange die Datenpakete klein und mit einer Checksumme versehen 
sind. Wenn etwas falsch rüberkommt muß der Block eben wiederholt werden. 
Kommt bei Zimmertemperatur allerdings sehr sehr selten vor.
Ich benutze aber auch nicht die alten Atmega8. Ich glaube bei den 
neueren Controllern ist der Oszillator besser.

mfg.
#2905071
Lesenswert?

Timmo H. schrieb:
> Walter S. schrieb:
>> Timmo H. schrieb:
>>> Für 9600 Baud sollte der interne Oszillator eigentlich immer reichen.
>>
>> wenn der interne zu ungenau oder zu unstabil ist, dann ist er das bei
>> jeder Baudrate
> Bei 9600 Baud ist es aber nicht so kritisch

wenn der Takt um 10% daneben liegt, nach viel Bit trifft er dann 
daneben?
#2905150
Lesenswert?

Hewald schrieb:
> warum denn? damit wird der fehler doch geringer gehalten und die
> übertragung stabiler.
Bei 8Mhz hast du 0,2% Baudratenabweichung. Das brauchst du nicht zu 
kalibrieren. Die Temperaturabweichung bleibt aber. Die ist das Problem.
Beim 88er hält sich das in aber Grenzen. Sofern die Spannung stabil ist.
Aber wenn es kein Batteriebetrieb ist, sollte man davon ausgehen können.

mfg.
Gast #2905168
Lesenswert?

Hi

>Aber wenn es kein Batteriebetrieb ist, sollte man davon ausgehen können.

Der TO schrieb:

>ich möchte ein eine kleine batteriebetriebene Schaltung mit einem
>ATMEGA8L bauen.

Das legt nahe, das mit Spannungs- und Temperaturschwankungen zu rechnen 
ist. Es muss aber nicht unbedingt ein Quarz sein. Ein Keramikoszillator 
mit integrierten Kondensatoren ist allemal stabiler als der interne 
RC-Oszillator.

mfG spess
#2905176
Lesenswert?

Spess53 schrieb:
>>ich möchte ein eine kleine batteriebetriebene Schaltung mit einem
>>ATMEGA8L bauen.
Tatsächlich. Erster Satz. Hatte ich schon wieder vergessen.
Da kommt dann ja alles zusammen.
Das schreit dann aber schon nach 1MHz, Sleep usw.
Und Atmega88(p)a.
Denn wenn es klein sein soll, trifft das wohl auch auf die Batterien zu.

mfg.
Gast #2905209
Lesenswert?

Hi

>naja, bei 9600 wäre das dann alle 2ms eine fehlerhafte übertragung!?
>klingt doch schon viel, oder hab ich da was falsch verstanden?

Die 0.2% sind akzeptabel, da bei jedem Startbit neu synchronisiert wird. 
0,2% sind es aber nur, wenn es genau 8MHz sind. Die Abweichungen des 
RC-Oszillators kommen also noch dazu. Außerdem spielt die 'Genauigkeit 
der Gegenstelle noch eine Rolle.

MfG Spess
Gast #2905211
Lesenswert?

Timmo H. schrieb:
> Bei 9600 Baud ist es aber nicht so kritisch
Guck dir mal denn Dreisatz an. Ein Frequenzfehler von 6% summiert sich 
bei jeder Baudrate über 9 Bit (Start+8Daten) zu einem Fehler von mehr 
als 50% der Bitdauer auf. Damit liegt der Pegelwechsel im Zeitfenster 
des vorherigen bzw nächsten Bits. Wieso soll das baudratenabhängig sein?
Gast #2905224
Lesenswert?

@ Hewald:

Denke mal, das hast du wirklich falsch verstanden:

Eine U(S)ART im Asynchron-Mode taktet nicht stur alles ein,
sondern erkennt Start- und Stoppbit.

Warum ist wohl der Takt das 8-, oder 16-fache der Baudrate???
Bei Beginn des Startbits wird synchronisiert,
nach 4, oder 8 Takten das Startbit verifiziert und dann
alle weiteren 8, oder 16 Takte der Level der Datenbits,
evtl. des Paritybits und des Stoppbits gesampelt.

Rechne mal nach, bei welcher Frequenzablage im worst-case
(8-odd/even-2) Fehler auftreten können!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren