Forum: Mikrocontroller und Digitale Elektronik UART und interner Oszillator oder doch Quarz?


von Hewald (Gast)


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.

von Hewald (Gast)


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!

von Timmo H. (masterfx)


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.

von Thomas E. (thomase)


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.

von Walter S. (avatar)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

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

von Hewald (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Theoretisch ja. Praktisch ist das Unsinn.

warum denn? damit wird der fehler doch geringer gehalten und die 
übertragung stabiler.

von Hewald (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Ich benutze aber auch nicht die alten Atmega8.

gutes thema!
im prinzip brauch ich 0 rechenpower, sondern ich muss nur ab und am mal 
ein zeichen per uart verschicken.
der atmega8 war der kleinste den ich kannte :o)

von Walter S. (avatar)


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?

von dolf (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Ich glaube bei den
> neueren Controllern ist der Oszillator besser.

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

von Spess53 (Gast)


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

von Spess53 (Gast)


Lesenswert?

Hi

Korrektur:

spannungsabhängigkeit -> Temperaturabhängigkeit

MfG Spess

von Thomas E. (thomase)


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.

von Spess53 (Gast)


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

von Thomas E. (thomase)


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.

von Hewald (Gast)


Lesenswert?

danke schonmal für die hohe anteilnahme! hab schon wieder einiges 
gelernt..

Thomas Eckmann schrieb:
> Bei 8Mhz hast du 0,2% Baudratenabweichung

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

von Spess53 (Gast)


Lesenswert?

Hi

>Das schreit dann aber schon nach 1MHz, Sleep usw.

Mit 1MHz kannst du 9600Bd knicken (7%). 4800 würden gehen.

MfG Spess

von Spess53 (Gast)


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

von Michael (Gast)


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?

von Sam .. (sam1994)


Lesenswert?

Thomas Eckmann schrieb:
> Das schreit dann aber schon nach 1MHz, Sleep usw.

Eine Verringerung der Taktfrequenz ist unnötig, wenn man die Sleepmodes 
nutzt.

von Bernie (Gast)


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!

von Thomas E. (thomase)


Lesenswert?

Sam .. schrieb:
> Eine Verringerung der Taktfrequenz ist unnötig, wenn man die Sleepmodes
> nutzt.
Hat das jemand gesagt?
Aber für die üblicherweise <3V-Batteriespannung.

mfg.

von Hewald (Gast)


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)

von Thomas E. (thomase)


Lesenswert?

Hewald schrieb:
> da er die meiste zeit eh  schlafen wird.
Wie wird der denn aufgweckt?

mfg.

von Hewald (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Wie wird der denn aufgweckt?

INT

von Thomas E. (thomase)


Lesenswert?

Hewald schrieb:
> INT
So genau wollte ich das jetzt gar nicht wissen.

mfg.

von Hewald (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> So genau wollte ich das jetzt gar nicht wissen.

:o)

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.