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.
Gast #2905020
Lesenswert?

bzw. möchte ich gleich noch eine frage anhängen:
da mir die UART-zeichen wichtig sind bei der Anwendung, sollte ich die 
Frequenz besser auf 7.3728MHz legen??  geht das mit dem internen 
Oszillator?
Übertragungsrate reicht mir 9600kbps
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.
Gast #2905122
Lesenswert?

HI

>glaube --> kirche....
>weist das wirklich?

Brauchst doch nur die Datenblätter vergleichen. Dann siehst du es

ATMega8  (20°C)  2,7V 7,1MHz       5,5V  8,1MHz
ATMega88 (20°C)  1,8V 7,81MHz      5V    8 MHz

Bei der spannungsabhängigkeit sieht es ähnlich aus.

MfG Spess
#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
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!
Gast #2905246
Lesenswert?

na dann klingt das ja schon wieder garnicht so schlimm, wenn der dauernd 
synced.
ich werd schon eher im bereich 8mhz bleiben, da er die meiste zeit eh 
schlafen wird.

als chip gehe ich auf den 88er, der ist ja sogar noch einen tick 
günstiger zu kriegen als der 8er :o)

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