Hallo,
ich benutze den Timer 1 eines ATmega128, um mittels "output compare"
einen Impuls definierter Länge zu erzeugen, welcher über den OC-Pin an
einen externen Frequenzzähler geht. Nun ist es so, dass die
Frequenzanzeige sehr stark schwankt und ich vermute, dass da evtl. im µC
ein Takt oder so fehlt.
Der relevante Codeauszug:
1
#define XTAL 7372800L
2
3
//TIMER1 initialize - prescale:256
4
// WGM: 4) CTC, TOP=OCRnA
5
// desired value: 1Sec
6
// actual value: 1,000Sec (0,0%)
7
8
TCCR1B=0x00;// stop
9
TCNT1H=0x8F;// setup
10
TCNT1L=0x82;
11
12
// Torzeit 1s
13
OCR1AL=0x7E;// theoretischer Wert
14
TCCR1A=0x40;
15
TCCR1B=0x0C;// start Timer
16
17
TIMSK|=1<<OCIE1A;
18
19
SEI();
20
21
while(1)
Ist es so, dass da mal ein Takt mehr oder weniger vergeht, bis zum
Interrupt oder kommt dieser wirklich stets exakt nach der gleichen
Anzahl Takte?
Tom
Ich denke ein per Timer Hardware erzeugter Timingpuls sollte immer
gleich lang sein. Das kann man von einem per Interrupt Erzeugten nicht
mehr sagen. Wie waer's mit Nachmessen mit einem Scope. Das sollte
schneller zu sehen sein als hier zu fragen.
Die zu messende Frequenz liegt im Bereich von 80 MHz, die
Frequenzschwankeungen im Bereich von ca. +- 200 Hz. Die Schwankung der
Torzeit lässt sich daher mit einem Scope leider nicht messen.
@ Tom (Gast)
>Frequenzanzeige sehr stark schwankt und ich vermute, dass da evtl. im µC>ein Takt oder so fehlt.
Welche Taktquelle misst du? Läuft dein AVR wirklich mit dem Quarz? [[AVR
Fuses]] richtiggesetzt?
>Ist es so, dass da mal ein Takt mehr oder weniger vergeht, bis zum>Interrupt oder kommt dieser wirklich stets exakt nach der gleichen>Anzahl Takte?
Wenn du das mit Output Compare machst, dann ist der Interrupt egal, die
Hardware macht das alleine. Und das ist immer auf den Takt genau gleich
(wenn du nicht zwischendurch am Timer oder Prescaler rumfummelst).
MfG
Falk
Fuses sind definitiv korrekt. Für Debuggingzwecke nutze ich auch die
UART bei 38K4 und die läuft fehlerfrei.
Kleine Korrektur: die Schwankung der Torzeit lässt sich mit MEINEM Oszi
leider nicht mehr messen :)
@ Tom (Gast)
>Die zu messende Frequenz liegt im Bereich von 80 MHz, die>Frequenzschwankeungen im Bereich von ca. +- 200 Hz. Die Schwankung der>Torzeit lässt sich daher mit einem Scope leider nicht messen.
Logisch, die Schwankung sind 2,5 ppm!!! Das ist fast gar nix! Woher
kommt das Messignal? Kann auch Jitter sein, in der Torzeit oder im
Messignal.
MfG
Falk
Das Messignal stammt von einem herkömmlichen Quarzoszillator, wie er in
z. B. in PCs eingesetzt wird. Wie hoch ist denn der Jitter bei
handelsüblichen Oszillatoren?
@ Tom (Gast)
>Das Messignal stammt von einem herkömmlichen Quarzoszillator, wie er in>z. B. in PCs eingesetzt wird.
Sollte passen. Hast du auch 100nF an Vcc/Gnd?
> Wie hoch ist denn der Jitter bei handelsüblichen Oszillatoren?
Kann du nicht messen, liegt im Sub-Nanosekundenbereich (typisch 40ps).
Mfg
Falk
>sehr stark schwankt
:-))
witzig, das sind rund 2 ppm;
in dem bereich liegt die genauigkeit, die ein standard quarz überhaupt
hat!
geht also perfekt.
für etwas (!) mehr genauigkeit brauchste low-jitter oszillator + ofen
für deutlich mehr...atomuhr.
wozu soll das denn sein?
@ Düsentrieb (Gast)
>witzig, das sind rund 2 ppm;>in dem bereich liegt die genauigkeit, die ein standard quarz überhaupt>hat!
Naja, nicht ganz. Du haust hier Genauigkeit und Stabilität in einen
Topf, das sind aber zwei verschiedene Paar Schuhe.
>geht also perfekt.
Würde ich nicht so ohne weiteres behaupten. Ich weiss jetzt aber nicht,
wieviel so ein 0815 Oszillator an niederfrequentem Jitter innerhalb
einer Sekunde macht. Ich würde da eher den Oszillator vom AVR im
Verdacht haben, so dolle sind die nicht.
MfG
Falk
@ sechszweifuenf (Gast)
>Da die 80MHz ja nicht synchron zum AVR laufen denke ich die 2.5ppm sind>ein sehr guter Wert.
NEIN! Nicht bei einer Torzeit von 1 Sekunde!
Bei 80 MHz misst du in einer Sekunde 80.000.000 Takte. Durch die
Asynchronität hast du einen systematischen Messfehler von EINEM Takt.
Das sind hier gerade mal 1 / 80.000.000 = 0,0125 ppm!
Die 2,5 ppm werden erst bei einer Torzeit von 400.000 Takten ereicht,
sprich 5ms.
Mfg
Falk
>Du haust hier Genauigkeit und Stabilität in einen
Topf
jein...
grund-genauigkeit is -ohne abgleich- eher bei 10-20ppm;
kurzzeit-jitter hängt sehr vom kristall+oszillator-typ ab, mit dem
gatter-oszillator in einem ratternden chip liegt er optimal .... :-)
minimum wäre extra externen osz. bauen...siehe quarzkochbuch
oder low-jitter osz. fertig, zb von valpey-fisher
ala http://www.valpeyfisher.com/Products.aspx?ProductCode=XO
typ VFXO202 , 1ps jitter :-)))
Also Gegenprobe : Lass den AVR mit einem Teiler zB 1:10 am 80MHz laufen.
Dh den AVR auf ext clock umkonfigurieren, die Werte auf 8MHz umrechnen
und los geht's. Dann darf der Jitter nur noch 1 Takt betragen. Die
Gating Steuerflanken muessen natuerlich auch steil genug sein.
@ Düsentrieb (Gast)
>gatter-oszillator in einem ratternden chip liegt er optimal .... :-)
Ja eben.
>typ VFXO202 , 1ps jitter :-)))
Jaja, RMS mit Mogelfaktor. Peak Peak macht der sicher auch so 5..10ps.
Kostenpunkt? 100Euro++?
@ sechszweifuenf (Gast)
>Also Gegenprobe : Lass den AVR mit einem Teiler zB 1:10 am 80MHz laufen.>Dh den AVR auf ext clock umkonfigurieren, die Werte auf 8MHz umrechnen>und los geht's. Dann darf der Jitter nur noch 1 Takt betragen. Die>Gating Steuerflanken muessen natuerlich auch steil genug sein.
Bringt wenig. Ein eindeutiger Test wäre, mittels eines weiteren
Oszillators über 74xx Zähler die Torzeit zu generieren und dann nochmal
zu messen. Ist die Schwankung weniger liegt es am instabilen
AVR-Oszillator.
MFG
Falk
Ich hab in diesem Frequenzbereich schon hochstabile Oszillatoren wie den
HP8662 gegegen einen Quarz laufen lassen und mir so angeschaut was die
denn so machen. Der PLL Synth ist im Minutenrythmus um den Quarz
rumgewabbert, waehrend der Quarz langsam davonlief.
# falk
...RMS mit Mogelfaktor... nee, is ja nur "mittelklasse"
V.F. macht schon coolere dinger...
zb VFTX130 , ±0.28ppm , 0.18ps Jitter RMS
-120 dBc/Hz @ 1KHz
aber die kosten natürlich richtig asche...
>Ein eindeutiger Test wäre, mittels eines weiteren Oszillators über>74xx Zähler die Torzeit zu generieren und dann nochmal zu messen.
Ich habe mir jetzt mal einen 23-Bit Zähler in einem CPLD modeliert und
den mit einem 10 MHz Takt gefüttert. Ja und Falk scheint recht zu haben,
ich habe nur noch Schwankungen im einstelligen Bereich. Das sieht jetzt
jedenfalls ziemlich gut aus.