Forum: Mikrocontroller und Digitale Elektronik Welcher Takt; 7,3728 MHz vs 8MHz


von Peter (Gast)


Angehängte Dateien:

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

von pegel (Gast)


Lesenswert?

1. alles Andere was von 8MHz abgeleitet wird ist runder

2. 0,2% ist im Rahmen der Toleranz

von Christian S. (roehrenvorheizer)


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

: Bearbeitet durch User
von Peter (Gast)


Lesenswert?

Vielen Dank für die schnellen Antworten!

Ich denke ich werde 8 MHz nehmen.

von InFo (Gast)


Lesenswert?

Der Atmega328 verträgt lt. Datenblatt bei 2,7V 10Mhz. Bei 3,3V geht 
theoretisch sogar etwas mehr. (Diagramm)

Ich betreibe den 328 bei 3,3V mit den vollen 20 MHz und hatte noch nie 
Probleme.

von M. K. (sylaina)


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?

von eProfi (Gast)


Lesenswert?

Es gibt weitere Baudrate-kompatible Frequenzen in diesem Bereich:
9,8304 MHz und 11,0592 MHz
https://www.mikrocontroller.net/articles/Baudratenquarz

von Pete K. (pete77)


Lesenswert?

Ich nehme immer den internen 8Mhz Taktgeber. Hatte noch nie Probleme 
damit.

von Peter D. (peda)


Lesenswert?

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.

von M. K. (sylaina)


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.

von Walter S. (avatar)


Lesenswert?

M. K. 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?

von Dauergast (Gast)


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.

von M. K. (sylaina)


Lesenswert?

Walter S. schrieb:
> hast du da eine Kommastelle verschoben?

Nein, hab ich nicht. Ich hab blöder Weise das UBBR mit F_CPU angepasst. 
Was für ein blöder Schnitzer...

von Harald W. (wilhelms)


Lesenswert?


von LOL (Gast)


Lesenswert?

Peter D. schrieb:

1 > Nichts.
2 > Mit 7,3728MHz sind bis zu 921,6kBaud möglich.
3 > Mit 8MHz nur max 38,4kBaud.
1
Wenn der TO die Geschwindigkeit von 2 möchte, dann ist
2
die Geschwindigkeit von 3 ein Widerspruch zur Aussage 1.

von Peter D. (peda)


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.

von Arno (Gast)


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

von A. S. (Gast)


Lesenswert?

Arno schrieb:
> Du kannst einen genauen 1ms-Timer-Tick bauen

bei 7,3728 MHz? wären es 0,1% Fehler bei einem 8Bit-Timer (und 
PreScaler32) und 0,04% Fehler mit 16Bit-Timer (ohne PRescaler).

von Arno (Gast)


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

von 20MHz (Gast)


Lesenswert?

InFo schrieb:
> Ich betreibe den 328 bei 3,3V mit den vollen 20 MHz und hatte noch nie
> Probleme.

Du hast wahrscheinlich auch noch nie gleichzeitig den vollen 
Temperaturbereich des ATmega328 ausgenutzt.

von c-hater (Gast)


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...

von Yalu X. (yalu) (Moderator)


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.

von Norbert (Gast)


Lesenswert?

Also ich sehe bei einer Baudrate von 2.4k, 4.8k, 9.6k, 14.4k, 19.2k, 
28.8k, 38.4k und 76.8k keine Probleme. (Das Manual sieht übrigens auch 
keine)

Suchen wir uns gerade ein Problem?

von S. Landolt (Gast)


Lesenswert?

Also ich würde mich dem Vorschlag von eProfi mit den 11.0592 MHz 
anschließen oder auch, da bei 3.3 V 13.3 MHz zulässig sind, 14.7456 
nehmen, das sollte keine Probleme verursachen.

von Peter R. (Gast)


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.

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.