Forum: Mikrocontroller und Digitale Elektronik Verständisfragen zu Quarzen und der Taktfrequenz


von Michael Ebel (Gast)


Lesenswert?

Hallo liebe Experten,

zunächst einmal vorweg, ja ich habe mich bereits durch das Internet 
geklickt, aber nie so recht eine kompakte Antwort gefunden.

Dann zu meiner Hardware/Software (einfach der Komplettierung halber)
1. Als Board benutze ich den Ateval von ehajo (der bestens über ISP 
funktioniert)
2. Betriebssystem ist in meinem Fall Win10 x64
3. Entwicklungsumgebung ist das Atmel Studio 7
4. Mein (momentaner) uC ist der ATtiny45


So nun zu meinen Fragen bei denen ich eigentlich nur um ein "ja" oder 
ein "nein, weil" bitte.
1. Die Zeile
1
 #define F_CPU [WERT]UL
 hat auf die physikalische Taktfrequenz des uC keine Auswirkung?
2. Der interne Oszillator liefert immer 8MHz? (Abgesehen vom Komp-Mode 
zum ATtiny15)
3. Die Taktrate des Gesamstsystems kann (bei Verwendung des internen 
Oszillators) über OSCCAL, CLKPR und die CKDIV8-Fuse angepasst werden?
4. WD. Osc und PLL Clock sind auch interne Taktgeber die "alternativ" 
zum internen Oszillator genutzt werden können?

Und abschließend noch zu ein paar tatsächlichen Fragen
1. Was ist der Unterschied zwischen normalen Quarz und Quarz Oszillator?
2. Wenn der interne Oszillator (8MHz) benutzt wird und die CKDIV8-Fuse 
gesetzt ist (Rest auf Standard) ergibt sich ein Systemtakt von 1 MHz 
(oder?).
Schreibe ich nun im Code bei
1
 #define F_CPU 8000000UL
 oder
1
 #define F_CPU 1000000UL
 ?

Vielen Dank schonmal im voraus
Michael

von Einer K. (Gast)


Lesenswert?

Michael Ebel schrieb:
> 1. Was ist der Unterschied zwischen normalen Quarz und Quarz Oszillator?

https://de.wikipedia.org/wiki/Quarzoszillator

von Jope (Gast)


Lesenswert?

Aus der AVR-Libc-Dokumentation:

"The macro F_CPU specifies the CPU frequency to be considered by the 
delay macros."

>Wenn der interne Oszillator (8MHz) benutzt wird und die CKDIV8-Fuse
>gesetzt ist (Rest auf Standard) ergibt sich ein Systemtakt von 1 MHz
>(oder?).

Ja. Und F_CPU muss auf 1000000UL gesetzt werden.

von Georg G. (df2au)


Lesenswert?

Michael Ebel schrieb:
> 1. Die Zeile #define F_CPU [WERT]UL  hat auf die physikalische
> Taktfrequenz des uC keine Auswirkung?
Richtig.

> 2. Der interne Oszillator liefert immer 8MHz? (Abgesehen vom Komp-Mode
> zum ATtiny15)
Nein. Die 8MHz sind nur nominell 8MHz, in der Praxis können sich 
Abweichungen ergeben.

> 3. Die Taktrate des Gesamstsystems kann (bei Verwendung des internen
> Oszillators) über OSCCAL, CLKPR und die CKDIV8-Fuse angepasst werden?
Ja

> 4. WD. Osc und PLL Clock sind auch interne Taktgeber die "alternativ"
> zum internen Oszillator genutzt werden können?
Ja. Sieh dir das Bild "Clock Distribution" im Datenblatt an.

> Und abschließend noch zu ein paar tatsächlichen Fragen
> 1. Was ist der Unterschied zwischen normalen Quarz und Quarz Oszillator?
Quarz: Das nackte Stück Gestein mit Elektroden daran.
Quarz Oszillator: Ein Quarz mit aktiven Bauelementen herum.

> 2. Wenn der interne Oszillator (8MHz) benutzt wird und die CKDIV8-Fuse
> gesetzt ist (Rest auf Standard) ergibt sich ein Systemtakt von 1 MHz
Ja

> Schreibe ich nun im Code bei #define F_CPU 8000000UL  oder #define F_CPU
> 1000000UL  ?
Du schreibst das, was du als Systemtakt eingestellt hast.

: Bearbeitet durch User
von Michael Ebel (Gast)


Lesenswert?

Schonmal danke für die vielen, schnellen und guten Antworten

Eine Folgefrage tut sich mir noch auf.
Wenn ich beispielsweise im CLKPR eine Division des Systemtakts durch 256 
einstelle läuft er dann bis dahin mit der Standard Frequenz von 1 bzw 8 
MHz oder? Und ab dem Zeitpunkt an dem ich den geänderten Wert in das 
Register eintrage dann mit 1 bzw 8 /256 MHz?
Dann wäre noch die Frage wo ich das ganze im Code hinschreiben soll?
Vor die defines und includes oder vor die main oder erst in die main?
Ich würde rein instinktiv mal sagen nach define und includes und vor die 
main, aber evtl  gibts da ja gewisse "Regeln".

Michael

von Einer K. (Gast)


Lesenswert?

Michael Ebel schrieb:
> 1 bzw 8 /256 MHz?

Nicht 1!
Nur 8/256
Der interne RC läuft immer mit 8MHz

Michael Ebel schrieb:
> aber evtl  gibts da ja gewisse "Regeln".

Natürlich!
Jeglicher C Code hat sich in Funktionen zu befinden.

von Michael Ebel (Gast)


Lesenswert?

Die 1 war auf die gesetzte CKDIV-8 Fuse bezogen.
Oder ist die Fuse auch nur ein Prescale?

Im Nachhinein ne doofe Frage mit der Position ja :D
Hab das grade wie ne Variablen Deklaration betrachtet facepalm

Michael

von Georg G. (df2au)


Lesenswert?

Michael Ebel schrieb:
> in das
> Register eintrage dann mit 1 bzw 8 /256 MHz?

Es gibt im Datenblatt eine wunderbare Zeichnung, die die Taktverteilung 
darstellt. Hast du die noch nicht gefunden?

von Michael Ebel (Gast)


Lesenswert?

Doch schon nur hat sie mich bisher immer ein bisschen verwirrt deshalb 
wollte ich eben sicherstellen, dass ich es wirklich richtig verstehe

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.