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.
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).
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?
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.
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.
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.
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?
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
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?!!
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.
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