Forum: Mikrocontroller und Digitale Elektronik Fragen zu Quarzoszillatoren für Mikrocontroller


von Stephan E. (loetzinn02)


Lesenswert?

Grüß Gott an die Wissensgemeinschaft,

vorab: Ich bin reiner Hobbybastler und spiele seit einiger Zeit mit 
Mikrocontrollern (AVR, bisher nur attiny) rum.

Dabei habe ich bei meinen Mikrocontroller-Spielereien immer nur den 
internen Taktgeber verwendet. Jetzt möchte ich auch mal einen externen 
Taktgeber einbinden (einfach so aus Neugier und Spieltrieb, es gibt 
keine konkrete Anforderung), und zwar an einen atmega328p.

Es geht um diesen Oszillator:
Reichelt-Bestellnummer "OSZI 1,843200", 5V, baudratenkompatibel.
Die serielle Kommunikation steht als nächstes auf meiner 
Experimentier-Liste, deshalb dieser Oszillator.

Über den Anschluß bin ich mir noch nicht so ganz im klaren, und auch 
sonst habe ich noch ein paar Fragen, die ich mir zum Großteil schon 
selbst beantwortet habe, aber nicht weiß, ob die Antwort auch richtig 
ist.
Deshalb möchte ich hier um Korrekturen bzw. Richtigstellungen bitten:

So weit ich das richtig verstanden habe, hat der Oszillator die passende 
Elektronik schon verbaut. Ich brauche keine weiteren Kondensatoren, 
richtig?

Und im Datenblatt des Mikrocontrollers finde ich auf Seite 49 zum Thema 
fuses:
"Low power crystal oscillator"
"Full swing crystal oscillator"
"Low frequency crystal oscillator"
Alle mit unterschiedlichen fuse-settings.

Auf der hiesigen AVR_Fuses-Seite finde ich diese Einträge ebenfalls, 
allerdings lauten sie dort etwas anders:
"External Crystal/Ceramic Resonator"
"External Low-frequency crystal"
"External RC Oscillator"

Wenn ich die AVR_Fuses-Seite richtig interpretiere, wäre ich mit dem 
Oszillator auf der sicheren Seite und muß den "External RC Oscillator" 
für die fuse-settings wählen. Aber welche settings genau?

Die AVR_Fuses-Seite für External RC Oscillator sagt "1000-0101", aber 
das ist nur ein Beispiel von irgendeinem Mikrocontroller.

Im Datenblatt des atmega328p, Seite 49 finde ich keinen Eintrag mit 
"1000-0101", vermutlich schlicht deshalb, weil das ein anderer Typ ist.

Dafür finde ich dort:
"Low Power", "Full swing" oder "Low frequency"-oscillator.
Was genau muß ich hier bei den fuses wählen und was sind die 
Unterschiede zwischen den Typen? Low Frequency scheint ein Oszillator im 
"Uhren-Tempo" zu sein, aber was ist ein "Full swing" oder "low power" 
oscillator?

Vielen Dank schon im Voraus für alle sachdienlichen Hinweise.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stephan E. schrieb:
> Wenn ich die AVR_Fuses-Seite richtig interpretiere, wäre ich mit dem
> Oszillator auf der sicheren Seite und muß den "External RC Oscillator"
> für die fuse-settings wählen. Aber welche settings genau?

Nicht durcheinander bringen lassen :-P
Die für deinen Oszillator richtige Einstellung ist 'Ext. Clock' 
(CKSEL=0000).
Der Ausgang des Oszillators wird an XTAL1 angeschlossen. XTAL2 steht als 
GPIO zur Verfügung.

von HildeK (Gast)


Lesenswert?

Stephan E. schrieb:
> Und im Datenblatt des Mikrocontrollers finde ich auf Seite 49 zum Thema
> fuses:
> "Low power crystal oscillator"
> "Full swing crystal oscillator"
> "Low frequency crystal oscillator"
> Alle mit unterschiedlichen fuse-settings.

Das ist für Quarze, nicht für Quarz-Oszillatoren.
Du brauchst 'External Clock'.

von m.n. (Gast)


Lesenswert?

Stephan E. schrieb:
> Es geht um diesen Oszillator:
> Reichelt-Bestellnummer "OSZI 1,843200", 5V, baudratenkompatibel.

Der ist keine besonders gute Wahl. 18,432 MHz würden den ATmega deutlich 
besser nutzen. "Baudratenquarz" ist bei diesen Taktfrequenzen aber 
garnicht mehr so angesagt. Auch mit 20 MHz bekommt man hohe Baudraten 
recht genau eingestellt.

Ein separater Taktgeber ist zunächst einmal ein nicht abschaltbarer 
Stromverbraucher. Das ist eigentlich nur dann sinnvoll, wenn man 
besonders stabile Ausführungen mit ca. 1 ppm Genauigkeit über den 
gesamten Temperaturbereich -25 - +85 °C braucht.
Für "normal genaue" Anwendungen ist ein einfacher Quarz die bessere 
Wahl. Die beiden zusätzlichen Kondensatoren sind doch kein Problem.

von Achim H. (pluto25)


Lesenswert?

m.n. schrieb:
> Auch mit 20 MHz bekommt man hohe Baudraten
> recht genau eingestellt.

Die meißten mit kaum tollerierbaren Fehler.
Mit 1.8432 alle bis 230400 fehlerfrei, sogar Exoten wie 76800 oder 7200 
und das bei erheblich weniger Stromverbrauch.

von ... (Gast)


Lesenswert?

> Die meißten mit kaum tollerierbaren Fehler.

Bei diesem Deutsch dreht sich der Quarz ja im Fels um.

von Stephan E. (loetzinn02)


Lesenswert?

Matthias S. schrieb:
> Die für deinen Oszillator richtige Einstellung ist 'Ext. Clock'
> (CKSEL=0000).
> Der Ausgang des Oszillators wird an XTAL1 angeschlossen. XTAL2 steht als
> GPIO zur Verfügung.

Danke, das hätte ich doch glatt falsch gemacht. Wieder was g'lernt. :)
Und wenn ich das Datenblatt richtig interpretiere, greift der Vorteiler 
auch bei einem externen Takt, oder?
D.d. wenn der Vorteiler aktiv ist, habe ich effektiv 1.8432 MHz/8 ~ 230 
KHz.


M.n. schrieb
> Der ist keine besonders gute Wahl. 18,432 MHz würden den ATmega
> deutlich besser nutzen.

Das ist natürlich vollkommen richtig. Mir geht's aber generell um den 
Lerneffekt und weitere Erfahrungen sammeln - und nicht zuletzt macht's 
einfach Spaß, und genau das erwarte ich von einem Hobby.
Ich muß damit kein Geld verdienen und ich bin mir sicher: bislang habe 
ich noch nichts gebastelt, was die Leistung auch nur annähernd optimal 
ausreizen würde.
Aber bis jetzt habe ich immer versucht, so wenig wie möglich der 
Leistung zu "nutzen". Warum 8MHz, wenn's mit abgeändertem Quellcode auch 
mit nur einem MHz augenscheinlich genauso gut läuft? Selbst mit 128KHz 
ist's (zumindest zum Teil) noch ganz ok für meine Verhältnisse. Genau 
das ist es, was für mich derzeit den Reiz ausmacht. Aber das sind 
natürlich nur Spielereien, kein Vergleich zum Profi, der in ganz anderen 
Dimensionen denkt und arbeitet.

Irgendwann komme ich sicher auch mal an die Grenze - aber so weit bin 
ich noch nicht. Und ein Oszillator ist schnell getauscht.

von Einer K. (Gast)


Lesenswert?

Stephan E. schrieb:
> 1.8432 MHz/8 ~ 230 KHz.

Tja...
Es ist schon ok, zu lernen .....
Aber logisch ist dein Vorhaben nicht unbedingt.

Niedrigen Takt verwendet man eigentlich nur, wenn man Strom sparen will, 
bzw wenig Spannung vorliegen hat.
Aber dann ist ein Uhrenquarz meist die bessere Wahl, mit dem man den RC 
Oszillator "trimmt", dann klappts auch fein mit der Baudrate.
Und viel Tiefschlaf.

Zudem hast du dich mit dem Oszillator auf 5V angenagelt.
Aber was solls, ist ja nicht meine Baustelle.

von wendelsberg (Gast)


Lesenswert?

... schrieb:
>> Die meißten mit kaum tollerierbaren Fehler.
>
> Bei diesem Deutsch dreht sich der Quarz ja im Fels um.

Sachlich falsch ist es auch noch, meist ist der Baudratenfehler 
tolerierbar.

wendelsberg

von m.n. (Gast)


Lesenswert?

A. H. schrieb:
> Mit 1.8432 alle bis 230400 fehlerfrei,

Für mich ist es ein Fehler, den µC ohne zwingenden Grund nur mit 1/10 
seiner max. Frequenz zu betreiben. Wenn Du schon im Datenblatt 
blätterst, sieh Dir auch mal die Tabelle mit 20 MHz und U2Xn = 1 an.

> sogar Exoten wie 76800 oder 7200

Interesant, gerade 7200 Bd habe ich immer wieder vermisst!

Stephan E. schrieb:
> Und ein Oszillator ist schnell getauscht.

Wozu? Wenn Du es nicht so eilig hast, dann schalte doch den internen 
Vorteiler ein. Sobald Du schnelle PWM, viele LEDs, ... brauchst, geht so 
ein ATmega auch schnell in die Knie. Irgendwann willst Du Interrupts 
nutzen, und da kann die Ausführungsgeschwindigkeit nicht hoch genug 
sein, gerade auch, wenn es darum geht, die Zeichen der USART rechtzeitig 
zu verarbeiten.
Die Oszillatoren kosten wohl alle ähnlich viel. Warum dann nicht gleich 
den passenden für die Zukunft nehmen?
Aber mach, wie Du meinst!

von Arno (Gast)


Lesenswert?

...und gerade der 328P hat - anders als noch ältere AVRs - einen zur 
Laufzeit verstellbaren Prescaler.

Gerade beim Herumspielen: Lieber 18,xx MHz Quarz per Prescaler auf 1,xx 
MHz oder weniger runterteilen, wenn du den Takt nicht brauchst. Und wenn 
du feststellst, dass du doch mehr Takt brauchst, kurze Änderung im Code, 
fertig. Andersherum geht (ohne PLL) nicht.

Aber ist ja eh zu spät, du hast den Oszillator ja schon. Immerhin kannst 
du damit fast jeden AVR retten, wenn du die Clock Selection Fuse Bytes 
falsch setzt...

MfG, Arno

von Stephan E. (loetzinn02)


Lesenswert?

Arno schrieb:
> ...und gerade der 328P hat - anders als noch ältere AVRs - einen zur
> Laufzeit verstellbaren Prescaler.
>
> Gerade beim Herumspielen: Lieber 18,xx MHz Quarz per Prescaler auf 1,xx
> MHz oder weniger runterteilen, wenn du den Takt nicht brauchst. Und wenn
> du feststellst, dass du doch mehr Takt brauchst, kurze Änderung im Code,
> fertig. Andersherum geht (ohne PLL) nicht.

Das ist in der Tat ein sehr gutes Argument. Habe ich mir für meine 
nächste Bestellung vorgemerkt. Danke - genau solche Dinge (zur Laufzeit 
einstellbarer Vorteiler - hatten meine bisherigen attinies nicht) sind 
es, die ich noch lernen will.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Viele attraktive Quarzfrequenzen gibts hier:
https://en.wikipedia.org/wiki/Crystal_oscillator_frequencies

Am besten nach UART sortieren und mit der Verfügbarkeit beim Händler 
vergleichen.

von Jacko (Gast)


Lesenswert?

> Die meißten mit kaum tollerierbaren Fehler.

Die/der hat wohl nicht nur Rechtschreibprobleme...

Mit billigen Standard-Quarzen ab 4,194 MHz, 6,4 MHz, ... habe
ich bisher alle üblichen Baudraten bis 38,4 kBd mit Fehler < 0,5% 
hinbekommen.
Das funktioniert sehr gut, weil sich jede USART (und jede sachkundig
programmierte SW-UART) bei jedem Startbit neu synchronisiert. Nach
10..12 Steps (8n1 ... 8-Parity-2) geschieht die Abtastung der
Bitpolarität dann eben nicht mehr in der Mitte (50%), sondern bei
50% +/-5% bis 50% +/-6%. - Vollkommen unerheblich!

Bei 2% Frequenzablage wird es langsam kritisch, da geschieht die
Abtastung (worst case, 8-Parity-2) zuletzt bei 50% +/- 24%.
Das geht auch gut, solange kein weiterer Fehler (z.B. 2% Ablage
bei der Gegenstelle) dazukommt!

von m.n. (Gast)


Lesenswert?

Jacko schrieb:
> Mit billigen Standard-Quarzen ab 4,194 MHz, 6,4 MHz, ... habe
> ich bisher alle üblichen Baudraten bis 38,4 kBd mit Fehler < 0,5%
> hinbekommen.

38,4 kBd ist doch ein recht antiker Wert, der vor > 30 Jahren 
interessant war. Die µPs (bzw. deren UARTs) waren mit nur einstelligen 
MHz-Werten getaktet und daher nicht "erfreut" mit 3,84 kHz 
Interruptfrequenz traktiert zu werden. Wenn man 9600 oder 19200 Bd 
verarbeiten konnte war es schon hinreichend schnell.
Die absolute Grenze schien bei 57,6 kBd (11,0592 MHz /12/16) zu liegen 
;-)

Bei einem ATmega würde ich als Vorgabe 115,2 kBd einstellen. Der schafft 
das locker und langweilt die Anwendung nicht. Wenn es in Richtung PC 
geht, dann auch gerne 250 oder 500 kBd, da die RS232->USB-Umsetzer das 
auch locker mitmachen.
Bei aktuellen µCs mit fraktionalem Baudratengenerator sind 
"Baudratenquarze" eher störend denn nützlich.

Falls jetzt jemand das USB-Lied singen möchte: ich finde UARTs nach wie 
vor gut und praktisch, besonders, wenn sich µCs untereinander 
unterhalten sollen.

von c-hater (Gast)


Lesenswert?

m.n. schrieb:

> Bei aktuellen µCs mit fraktionalem Baudratengenerator sind
> "Baudratenquarze" eher störend denn nützlich.

Wie sollte das gehen? Man braucht doch den fraktionalen Teil dann 
einfach nur auf Null setzen und alles ist schick.

von Peter R. (pnu)


Lesenswert?

Beim UART-Einsatz haben sog.UART-Quarze den Vorteil, dass viele der 
üblichen Takte mit dem programmierbaren UART-Teiler genau eingestellt 
werden können.
Bei "runden" Zahlen wie 20MHz werden die Taktfrequenzen der UART meist 
nur mit Fehler (<1%) einstellbar. Macht aber wenig, denn erst bei etwa 
5% bekommt die UART Probleme.

Ein Quarz hat Vorteile gegenüber einem externen Osz:

-nahezu jeder Kontroller enthält bereits den für einen Quarz nötigen 
Oszillator, also warum soll man den nicht verwenden?
-auch die Pinbelegung der Kontroller ist meist direkt für den Quarz 
ausgelegt
-Das Layout ist einfacher zwei C's direkt am Quarz und an den 
Kontrollerpins brauchen weniger Platz als der Oszillator mit seinen 
Zuleitungen
-Er ist etwas billiger (bei Massenfertigung wichtig)
-deutlich weniger Stromverbrauch und Wärmeentwicklung
-Quarz + C's meist kleiner als ext.Oszillator

Externen Oszillator nimmt man eigentlich nur, wenn auf der Platine 
bereits ein Fremdtakt vorliegt, mehrere Kontroller/ICs' gleichgetaktet 
laufen sollen oder besondere Anforderungen an die Frequenzgenauigkeit 
besteht, die nur ein externern Taktosz. erfüllen kann

: Bearbeitet durch User
von Wollvieh W. (wollvieh)


Lesenswert?

Peter R. schrieb:
> Beim UART-Einsatz haben sog.UART-Quarze den Vorteil, dass viele der
> üblichen Takte mit dem programmierbaren UART-Teiler genau eingestellt
> werden können.
> Bei "runden" Zahlen wie 20MHz werden die Taktfrequenzen der UART meist
> nur mit Fehler (<1%) einstellbar. Macht aber wenig, denn erst bei etwa
> 5% bekommt die UART Probleme.

Wenn man die Geräte auf beiden Seiten der Leitung baut, kann man so mit 
besonders krummen Quarzen eine abhörsichere Verbindung aufbauen. 
Jedenfalls für Lauscher mit VT100-Röhrenterminals. :)

von Stefan F. (Gast)


Lesenswert?

m.n. schrieb:
> Der ist keine besonders gute Wahl. 18,432 MHz würden den ATmega deutlich
> besser nutzen.

Nein, das liegt nämlich außerhalb seiner Spezifikation. Er kann maximal 
16 MHz.

von Stefan F. (Gast)


Lesenswert?

Stephan E. schrieb:
> Warum 8MHz, wenn's mit abgeändertem Quellcode auch
> mit nur einem MHz augenscheinlich genauso gut läuft? Selbst mit 128KHz
> ist's (zumindest zum Teil) noch ganz ok für meine Verhältnisse.

Du kannst die Taktfrequenz per Software mit dem CLKPR Register herunter 
teilen. Damit hast du freie Wahl, wenn du mit einen schnellen Oszillator 
verwendest.

Wenn du aber mit 1,8 MHz anfängst, kannst du sie nur auf noch niedrigere 
Frequenzen herunter teilen, aber nicht erhöhen.

von Stefan F. (Gast)


Lesenswert?

m.n. schrieb:
> Die absolute Grenze schien bei 57,6 kBd (11,0592 MHz /12/16) zu liegen

Ja, über 20km Telefonleitung. Aber nicht in lokalen Anwendungen. 115200 
Baud waren vor 30 Jahren schon normal. Jeder einfache PC konnte das.

von Peter D. (peda)


Lesenswert?

Ich würde die üblichen 11,0592 oder 14,7456MHz nehmen.
Als Teiler ist nicht nur 8, sondern binär gestuft 2..256 einstellbar.

von m.n. (Gast)


Lesenswert?

c-hater schrieb:
>> Bei aktuellen µCs mit fraktionalem Baudratengenerator sind
>> "Baudratenquarze" eher störend denn nützlich.
>
> Wie sollte das gehen? Man braucht doch den fraktionalen Teil dann
> einfach nur auf Null setzen und alles ist schick.

Oh, ich dachte nicht, daß man das so missverstehen kann.

Stefan ⛄ F. schrieb:
>> Der ist keine besonders gute Wahl. 18,432 MHz würden den ATmega deutlich
>> besser nutzen.
>
> Nein, das liegt nämlich außerhalb seiner Spezifikation. Er kann maximal
> 16 MHz.

Halt Dich doch einfach mal mit Deinen unqualifizierten Kommentaren 
zurück.

Stefan ⛄ F. schrieb:
> m.n. schrieb:
>> Die absolute Grenze schien bei 57,6 kBd (11,0592 MHz /12/16) zu liegen
>
> Ja, über 20km Telefonleitung. Aber nicht in lokalen Anwendungen. 115200
> Baud waren vor 30 Jahren schon normal. Jeder einfache PC konnte das.

Und schon wieder: das Augenzwinkern hast Du wohl schon garnicht mehr 
gesehen und vom 8051 wohl nur aus der Zeitung erfahren. Auch geht es 
hier nicht um PCs :-(

Peter D. schrieb:
> Ich würde die üblichen 11,0592 oder 14,7456MHz nehmen.

Ich sehe keinen Grund, auf die max. 20 MHz zu verzichten. Wer 62,5 kBd 
braucht nimmt 16 MHz.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nein, das liegt nämlich außerhalb seiner Spezifikation. Er kann maximal
> 16 MHz.

Wer hat dir das erzählt? 20Mhz sind bei 5V die offizielle Grenze.

von Arno (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> m.n. schrieb:
>> Der ist keine besonders gute Wahl. 18,432 MHz würden den ATmega deutlich
>> besser nutzen.
>
> Nein, das liegt nämlich außerhalb seiner Spezifikation. Er kann maximal
> 16 MHz.

Ich lese im Datenblatt 
https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf 
20MHz.

Hast du versehentlich das Datenblatt zu der Automotive-Version 
herangezogen?

MfG, Arno

von Dietrich L. (dietrichl)


Lesenswert?

Peter R. schrieb:
> Ein Quarz hat Vorteile gegenüber einem externen Osz:
>
> -nahezu jeder Kontroller enthält bereits den für einen Quarz nötigen
> Oszillator, also warum soll man den nicht verwenden?

Das kann aber auch ein Nachteil sein: die Zuverlässigkeit, dass der 
Oszillator richtig arbeitet, hängt ab von den Eigenschaften von Quarz, 
Kondensatoren, Oszillatorschaltung und dem Layout.
Es mag ja sein, dass die µC-Oszilatoren inzwischen recht zuverlässig 
arbeiten, aber ich kenne das noch den Anfangszeiten der µCs: es kam 
gelegentlich vor, dass ein nach Jahren gefertigtes Seriengeräte nicht 
mehr einwandfrei lief, da sich die Eigenschaften des µCs geändert 
hatten. Der µC-Hersteller kommentierte das so: "Da muss man halt die 
Werte der Kondensatoren anpassen".
In der Zeit hatten wir in der Firma beschlossen, nur noch fertige 
Quarzoszilatoren zu verwenden. Allerdings war der Stromverbrauch hier 
nicht relevant, die Zuverlässigkeit aber wohl (Industrieanwendung!)

von Rechtspeiber (Gast)


Lesenswert?

A. H. schrieb:
> Die meißten mit kaum tollerierbaren Fehler.

Boah ey :-(

von m.n. (Gast)


Lesenswert?

Rechtspeiber schrieb:
> A. H. schrieb:
>> Die meißten mit kaum tollerierbaren Fehler.
>
> Boah ey :-(

Bleib mal ganz ruhig! Daß hier anstatt 'ß' oder 'ss' vielfach nur ein 
's' geschrieben wird, liegt meiner Einschätzung nach um den Faktor 100 
höher. Die fehlenden Kommata werden dann als ''''' nachgereicht :-(

Dietrich L. schrieb:
> aber ich kenne das noch den Anfangszeiten der µCs: es kam
> gelegentlich vor, dass ein nach Jahren gefertigtes Seriengeräte nicht
> mehr einwandfrei lief,

Und, mit 7404? Wie lange ist das her? Willst Du diese Erfahrung in alle 
Ewigkeit verallgemeinern?
Solange man Quarze auf dem Grundton betreibt, sind diese doch recht 
schwingfreudig. Gut, bei superkleinen Ausführungen muß man etwas 
sorgsamer entwicklen, aber ein HC49U-S rennt doch mit fast jeder 
Beschaltung.
Wenn ein XO mehr verbraucht als die restliche Schaltung inkl. µC, dann 
hat man etwas falsch gemacht ;-)

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Matthias S. schrieb:
>> Nein, das liegt nämlich außerhalb seiner Spezifikation. Er kann maximal
>> 16 MHz.

> Wer hat dir das erzählt? 20Mhz sind bei 5V die offizielle Grenze.

Siehe Bild. Da habe ich das her.

https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

Arno schrieb:
> Hast du versehentlich das Datenblatt zu der Automotive-Version
> herangezogen?

Scheint so. Misst.

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.