Forum: Mikrocontroller und Digitale Elektronik Genaue Torzeit für Frequenzzähler


von Tom (Gast)


Lesenswert?

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

von sechszweifuenf (Gast)


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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

von Tom (Gast)


Lesenswert?

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 :)

von Falk B. (falk)


Lesenswert?

@ 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

von Tom (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@ 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

von Düsentrieb (Gast)


Lesenswert?

>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?

von sechszweifuenf (Gast)


Lesenswert?

Da die 80MHz ja nicht synchron zum AVR laufen denke ich die 2.5ppm sind 
ein sehr guter Wert.

von Falk B. (falk)


Lesenswert?

@ 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

von Falk B. (falk)


Lesenswert?

@ 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

von Düsentrieb (Gast)


Lesenswert?

>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 :-)))

von sechszweifuenf (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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

von sechszweifuenf (Gast)


Lesenswert?

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.

von Düsentrieb (Gast)


Lesenswert?

# 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...

von Tom (Gast)


Lesenswert?

>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.

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.