Welcher Takt; 7,3728 MHz vs 8MHz

Gast #5129073
Lesenswert?

Guten Abend,

ich möchte einen atmega328p mit 3,3V und ca. 8MHz betreiben.

Dabei soll die UART, I2C(Sensor) und ISP(SD-Karte) verwendet werden.

Für eine fehlerfreie Serielle Datenübertragung würde sich ja ein 7,3728 
MHz Quarz anbieten ( 
https://www.mikrocontroller.net/articles/Baudratenquarz ).

Was mich stuzig macht, dass der arduino pro mini und einige andere 
Boards mit 3,3V ein 8MHz Quarz bzw. Oszilator verwenden.

Daher meine Frage:
1)Was spricht für 8 MHz gegenüber 7,3728 MHz?

2)sehe ich das richtig, dass ich bei 9600 baud und 8 MHz kein Problem 
haben sollte (siehe Anhang)(?).


Viele Grüße

Peter
Angehängte Dateien:
#5129076
Lesenswert?

Hallo,

im Dabla des uCs gibt es eine Tabelle mit Taktfrequenzen und 
Teilerverhältnissen für das UART, die angibt, wie groß der Fehler im 
Vergleich zu einer der üblichen Baudraten wird, je nachdem, welchen Takt 
man verwendet. Hinzu kommen noch Toleranzen des eigenen Oszillators und 
desjenigen des Empfängers, so daß man die Toleranz nicht zu groß werden 
lassen sollte.

Dem I2C ist das egal.

MfG
#5129114
Lesenswert?

Peter schrieb:
> Ich denke ich werde 8 MHz nehmen.

Wenn du die noch Shoppen musst: Kaufe dir 18,432 MHz Quarze: Mittels dem 
System-Clock-Prescaler kannst du auch damit die Taktfrequenz deutlich 
runter drehen, hättest aber auch für die Zukunft einen Quarz wenn es 
schnell gehen muss mit dem auch recht hohe Baumarten fehlerfrei drin 
sind.

Wenn du dagegen nur für dieses eine Projekt einen Quarz kaufen musst: 
Hm, klar, 8 MHz geht. 7,3728 MHz geht aber genauso bzw. man kann sich 
fragen: Warum keine 4 MHz oder 12 MHz?
#5129181
Lesenswert?

Pete K. schrieb:
> Ich nehme immer den internen 8Mhz Taktgeber. Hatte noch nie
> Probleme
> damit.

Bei 9600 Baud geht der ja auch problemlos mit dem internen Oszillator, 
dieser schwankt nämlich zwischen 7,4 und 8,4 MHz, je nach Temperatur und 
Spannung. Auf die 9600 Baud bezogen schwankt der Fehler dann zwischen 
etwa -0,4% und +0,6% und das ist völlig im grünen Bereich für eine 
serielle Übertragung.
Gast #5129229
Lesenswert?

Walter S. schrieb:
>> schwankt nämlich zwischen 7,4 und 8,4 MHz, je nach Temperatur und
>> Spannung. Auf die 9600 Baud bezogen schwankt der Fehler dann zwischen
>> etwa -0,4% und +0,6%
> hast du da eine Kommastelle verschoben?

Mindestens :-)

Außerdem bleibt die prozentuale Abweichung natürlich unabhängig von der 
Baudrate gleich; lediglich die Annäherung an die gewünschte Baudrate 
durch verfügbare Teilerverhältnisse ist unterschiedlich.

Ganz abgesehen davon liegt der grüne Bereich bei +/- 0.2%.

Mit 8MHz Quarz sind demnach 2400, 4800, 9600, 19200 und 38400 ok.
Der interne Oszillator taugt lediglich für Morsezeichen.
#5129515
Lesenswert?

LOL schrieb:
> Wenn der TO die Geschwindigkeit von 2 möchte, dann ist
> die Geschwindigkeit von 3 ein Widerspruch zur Aussage 1.

Nö.
Du mußt schon vollständig zitieren und nicht die Frage zu meiner Antwort 
weglassen:

Peter D. schrieb:
> Peter schrieb:
>> 1)Was spricht für 8 MHz gegenüber 7,3728 MHz?
>
> Nichts.
>
> Mit 7,3728MHz sind bis zu 921,6kBaud möglich.
> Mit 8MHz nur max 38,4kBaud.
Gast #5129565
Lesenswert?

Peter schrieb:
> Daher meine Frage:
> 1)Was spricht für 8 MHz gegenüber 7,3728 MHz?

Du kannst einen genauen 1ms-Timer-Tick bauen (sogar mit einem 
8-Bit-Timer - Prescaler 64, CTC bei 124).

Ob du das brauchst (und in den 8000 Takten zwischen den IRQs etwas 
sinnvolles anfangen kannst), musst du schon selbst wissen... genau wie 
du die Frage selbst beantworten musst, ob dir 38400 Baud reichen oder 
nicht.

MfG, Arno
Gast #5129711
Lesenswert?

Das sind 8,6 Sekunden pro Tag (wenn es Prescaler 32 gibt, wimre haben 
das nicht alle AVR?) bzw. 3,5 Sekunden pro Tag. Man kann natürlich auch 
jede fünfte Sekunde verkürzen, um das auszugleichen, aber einfacher wird 
es mit 8MHz :)

MfG, Arno
Gast #5129802
Lesenswert?

Arno schrieb:

> Du kannst einen genauen 1ms-Timer-Tick bauen (sogar mit einem
> 8-Bit-Timer - Prescaler 64, CTC bei 124).

Wozu man auch immer einen exakten 1ms-Takt benötigen sollte, ich kenne 
jedenfalls keine Anwendung, wo so ein Takt wirklich unverzichtbar 
wäre...

In den allermeisten Anwendungen dürfte es tatsächlich keinerlei Rolle 
spielen, wenn er ein paar Prozent daneben liegt, denn so ein Takt wird 
ja üblicherweise nur zur Realisierung irgendwelcher mittellangen 
Wartezeiten benutzt, und dabei spielt eine ms mehr oder weniger 
normalerweise überhaupt keine Geige.

Probleme bekommen nur die, die dann aus so einem Takt wieder einen 
exakten Sekundentakt ableiten wollen und die obendrein nicht zur 
Primfaktorzerlegung in der Lage sind. Alle anderen würden mit einem 
Fehler von 4% beim "ms-Takt" leben und am Ende doch eine genaue Sekunde 
haben, naja, so genau halt der Quarz selber ist...
Moderator #5129870
Lesenswert?

Wenn der Kommunikationspartner des ATmega328P ein selbstprogrammierter
Mikrocontroller oder ein PC mit USB-RS-232-Konverter ist, muss man nicht
an den krummen Bitraten aus dem Zeitalter der Telefonmodems kleben
bleiben, sondern kann bspw. auch 10, 20, 50 oder 100 kbit/s verwenden,
die alle sauber aus den 8 MHz ableitbar sind.

PCs mit nativer RS-232-Schnittstelle auf 16x50-Basis werden ja immer
seltener, und ein USB-UART wie der FT232R kann alle Bitraten exakt
darstellen, die auch ein AVR mit 8 MHz kann, und noch viele weitere
mehr.
Gast #5129950
Lesenswert?

Wenn Du mit UART arbeitest und Angt hast, nimm einen baudrate-Quarz.
Wenn Du es mit genauen Zeiten hast, ist eine vorn ganzzahlige Zahl mit 
Nullen dahinter leichter verwendbar.
Anwendungen mit USB sind oft auf einen 12MHz-Quarz angewiesen.

Nimm halt das was gerade da ist oder am besten von der Baugröße her 
passt.

Ich selbst hab mal einen Gurt mit 50 Quarzen für wenige Euro erworben. 
Seitdem laufen meine Kontrollerplatinen fast alle mit der doppelten 
Frequenz des PAL-Farbträgers. (8,6... MHz)

Mit ein bisschen Rechnung hab ich immmer ausreichend genaue UART-Takte 
oder Zeiten hinbekommen.

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