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
Falscher Fehler, ich nehm alles zurück. Die schwachen Linen haben einen Abstand von 50 Hz, das ist Netzbrumm.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.