Forum: Mikrocontroller und Digitale Elektronik Atmega als Binärteiler, wie genau ist das?


von Dil (Gast)


Lesenswert?

Hallo,

wenn man einen Atmega88 (oder M168, M328) mit einem Timer zum 
Binärteiler für seinen eigenen Takt (Oszillatorfrequenz) macht, wie 
genau ist das Ergebnis?

Sind die Takte, die man am Timerausgang messen kann, wirklich 100%ige 
Teiler des Oszillatortaktes?
Oder können Abweichungen entstehen?

Für die Betrachtung soll das Timerinterrupt für die Binärteilung das 
einzige Interrupt (ISR) im Programm und der Timer ein 8-Bit-Timer sein.

von Ulrich (Gast)


Lesenswert?

Die Takte werden schon richtig gezählt. Es kann aber zu etwas mehr 
Jitter kommen, als man es vielleicht von einem TTL IC erwarten kann, 
weil da andere interne Zustände die Flanken minimal (i.A. unter 1 ns) 
verschieben kann. Verloren gehen sollte aber kein Takt.

Beim Mega88 und ähnlichen kann man auch schon gleich den Takt teilen (:2 
bis :256) lassen und direkt ausgeben, auf dem CLKO ( = PortB.0).

von Dil (Gast)


Lesenswert?

Danke für die schnelle Antwort!

Ulrich schrieb:
> Beim Mega88 und ähnlichen kann man auch schon gleich den Takt teilen (:2
> bis :256) lassen und direkt ausgeben, auf dem CLKO ( = PortB.0).

Interessant! Würde das etwas am Jitter ändern und wo stellt man den 
Teiler ein?

von Ulrich (Gast)


Lesenswert?

Den Teiler kann man als :8 über die Fuses einstellen. Sonst per Software 
im  Registern CLKPR - allerdings mit speziellem Zugriff geschützt.

Der ganze µC läuft dann allerdings auch langsamer.

Wenn der µC so lange in einem Sleep Mode ist (wohl auch schon Idel) 
sollte sich der Jitter in Grenzen halten. Das gilt auch weitgehend für 
die Lösung mit dem Timer, denn auch da tut sich dann nichts weiter im 
µC.

Nur einfach als binärer (:2^N) Teiler gibt es aber auch fertige ICs - da 
braucht es also keinen µC. Nur für die Teilerwerte dazwischen wäre der 
µC ggf. noch interessant als Alternative zum CMOS 4059.

von B e r n d W. (smiley46)


Lesenswert?

Mich interessiert jetzt, was +/- 1ns bewirken können. Annahme: Ein 10 
MHz Signal wird durch 2 geteilt, eine 5Mhz Schwingung dauert 
normalerweise 200ns.

Dann wird rein zufällig eine Halbwelle um 1ns kürzer und später eine um 
1ns länger. Innerhalb von zwei Schwingungen kann dann die Frequenz 
zwischen 4,975 und 5,025 MHz schwanken. Das gibt auf dem Spektrum 
Analyser keine feine Linie, sondern ein 50 kHz breites Band.

Je weiter runtergeteilt wird, desto geringer wird der Einfluss dieser 
einen Nanosekunde. Bei 78,125 kHz reicht die Bandbreite nur noch von 
78,112...78,137 kHz.

von Dil (Gast)


Lesenswert?

Ulrich schrieb:
> Wenn der µC so lange in einem Sleep Mode ist (wohl auch schon Idel)
> sollte sich der Jitter in Grenzen halten. Das gilt auch weitgehend für
> die Lösung mit dem Timer, denn auch da tut sich dann nichts weiter im
> µC.

Die geteilten Signale vom AVR klingen in einem Weltempfänger im 
SSB-Modus auf jeden Fall sauber, so weit sich das auf die Schnelle 
akkustisch beurteilen läßt. Auf keinen Fall entsteht ein 50kHz breites 
Band bei 5MHz aus 10MHz-Quarz geteilt.

von Dil (Gast)


Lesenswert?

Noch eine kleine Frage: kann man davon ausgehen, dass das CLKOUT-Signal 
beim M88 und Konsorten jitterfrei ist, oder wird es u.U. auch von 
internen CPU-Prozessen beeinträchtigt?

von Jobst M. (jobstens-de)


Lesenswert?

Jitterfrei wird es nirgendwo sein ...


Gruß

Jobst

von Axel S. (a-za-z0-9)


Lesenswert?

Dil schrieb:
> Noch eine kleine Frage: kann man davon ausgehen, dass das CLKOUT-Signal
> beim M88 und Konsorten jitterfrei ist, oder wird es u.U. auch von
> internen CPU-Prozessen beeinträchtigt?

Abgesehen davon daß es in der Realität sowieso keine jitterfreien 
Signale gibt, halte ich das Argument bezüglich Jitter für Unsinn.

Zumindest solange man das Bit in Hardware setzt (per output capture und 
auch den Timer in Hardware reloaden läßt). In Software per ISR für den 
Timerüberlauf wird es natürlich jittern wie Sau. Und zwar deutlich mehr 
als eine Nanosekunde. Stichwort Interrupt-Reaktionszeit.

Natürlich ist die ganze Fragerei für die Katze. Denn wenn man einen 
jitterarmen Frequenzteiler will, dann ist ein µC schlicht falsch.


XL

von Dil (Gast)


Angehängte Dateien:

Lesenswert?

Habe mal die von 20MHz auf 2,5MHz per Timer heruntergeteilte Frequenz 
des AVR mit einem KW-Empfänger (SSB) "abgehört" und in Spectran 
dargestellt.

Das Graue um die Hauptlinie ist wahrscheinlich der Jitter?!!

von Peter D. (peda)


Lesenswert?

Der Jitter ist nicht größer, als bei einem TTL-Teiler.

Nur wenn Du den MC mit einem anderen Takt laufen läßt und die Frequenz 
an den Zählereingang gibst, hast Du einen Jitter durch die 
Synchronisation mit dem CPU-Takt.

von B e r n d W. (smiley46)


Lesenswert?

Hallo Dil

Mich würde interessieren, wie die 2 schwächeren Linien mit 500 Hz 
entstehen.

Wenn das Signal abgeschwächt wird, gehen die 500 Hz Linien dann 
proportional runter, doppelt so schnell oder 3 mal so schnell verglichen 
zur Hauptlinie?

500 Hz bei 2,5MHz entsprechen 80 ps. Es könnte sein, dass sich die 
Laufzeit in der CPU sporadisch um diesen Betrag ändert. Also dass 
statistisch neben den 400000ps Periode noch 399920ps und 400080ps 
besonders häufig auftreten.

Gruß, Bernd

von B e r n d W. (smiley46)


Lesenswert?

Falscher Fehler, ich nehm alles zurück. Die schwachen Linen haben einen 
Abstand von 50 Hz, das ist Netzbrumm.

von Jobst M. (jobstens-de)


Lesenswert?

Dil schrieb:
> Habe mal die von 20MHz auf 2,5MHz per Timer heruntergeteilte Frequenz
> des AVR

Die Frage ist auch, wie geteilt wurde. Code?


Gruß

Jobst

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.