2,048Mhz mit AVR messen

Gast #1549667
Lesenswert?

Hallo,

Folgendes Problem:
Ich muss genau 2048000Hz erzeugen. Dazu verwende ich eine DDS mit recht 
genauem Osziallator. Das funktioniert auch schon sehr gut. Um die 
Ausgangsfrequenz der DDS jetzt ganz genau einzustellen und irgendwelche 
Drifts zu kompensieren verwende ich den 1PPS Puls von einem GPS 
Empfänger. Dieser ist extrem genau. Ich möchte jetzt einfach die Anzahl 
Pulse zählen, die zwischen zwei PPS Pulsen aufgelaufen sind und damit 
weiß ich die Ausgangsfrequenz der DDS aufs Hz genau. Das Problem ist 
nur, das Mein Mega128 mit anderen Applikationen auf 7,3728Mhz läuft. Ich 
hatte jetzt gedacht einen Tiny2313 mit 20Mhz zusätzlich zu nehmen, der 
nur für das Zählen zuständig ist und nach der Zählung mir den Wert per 
irgendeiner Schnittstelle überträgt. Würde der 2313 das von der 
Geschwindigkeit überhaupt schaffen? (Interrupt erkennen, in 
Interruptroutine springen, Plus 1 addieren und Interrupt wieder scharf 
schalten)

Grüsse
Jasper
#1549704
Lesenswert?

@  Jasper (Gast)

>Ich muss genau 2048000Hz erzeugen.

WIE genau? 1ppm? 1ppb?

> Dazu verwende ich eine DDS mit recht
>genauem Osziallator. Das funktioniert auch schon sehr gut. Um die
>Ausgangsfrequenz der DDS jetzt ganz genau einzustellen und irgendwelche
>Drifts zu kompensieren verwende ich den 1PPS Puls von einem GPS
>Empfänger. Dieser ist extrem genau. Ich möchte jetzt einfach die Anzahl
>Pulse zählen, die zwischen zwei PPS Pulsen aufgelaufen sind und damit
>weiß ich die Ausgangsfrequenz der DDS aufs Hz genau. Das Problem ist
>nur, das Mein Mega128 mit anderen Applikationen auf 7,3728Mhz läuft.

Dann musst du halt deinen 2,048MHz Takt extern vorher teilen, durch zwei 
per FLipFLop reicht. Dann kann dein AVR mittels Timer die Pulse zählen.

>nur für das Zählen zuständig ist und nach der Zählung mir den Wert per
>irgendeiner Schnittstelle überträgt. Würde der 2313 das von der
>Geschwindigkeit überhaupt schaffen? (Interrupt erkennen, in
>Interruptroutine springen, Plus 1 addieren und Interrupt wieder scharf
>schalten)

Macht man so nicht, sondern per Timer!
Aber wenn man es sich GENAU überlegt muss der AVR innerhalb EINER 
Taktperiode des Messsignals (hier 1,024 MHz) den Timer abschalten. Das 
wird sehr knapp. Mit Interrupt, ASM und 20 MHz CPU-Takt könnte es gehen.

MFg
Falk

Einfacher wäre das Ganze in einem CPLD.
#1549749
Lesenswert?

Falk Brunner schrieb:
> Macht man so nicht, sondern per Timer!
> Aber wenn man es sich GENAU überlegt muss der AVR innerhalb EINER
> Taktperiode des Messsignals (hier 1,024 MHz) den Timer abschalten. Das
> wird sehr knapp. Mit Interrupt, ASM und 20 MHz CPU-Takt könnte es gehen.

Muss ja nicht unbedingt innerhalb der "letzten" Taktperiode passieren.
Ich würde den Timer durchlaufen lassen, und in der ISR nur den Timerwert 
umkopieren. Das geht zwar nicht innerhalb des einen externen Taktes, hat 
aber vom IRQ-Start immer die gleiche Verzögerung.
andere Interrupts müssen dann halt tabu sein, aber einen Jitter von ± 1 
AVR Takt gibts trotzdem, wg. der unterschiedlichen 
Opcode-Ausführungszeiten.

Vielleicht mal verschiedene Frequenzzähler-Projekte anschauen. Die sind 
zwar meistens mit PIC, weil bei denen der externe Timereingang nicht mit 
der CPU-Clock synchronisiert ist, aber für AVR gibts da sicher auch ein 
paar.
#1549844
Lesenswert?

@  Εrnst B✶ (ernst)

>andere Interrupts müssen dann halt tabu sein, aber einen Jitter von ± 1
>AVR Takt gibts trotzdem, wg. der unterschiedlichen
>Opcode-Ausführungszeiten.

Man könnte wahrscheinlich sogar eher die ICP-Funktion nutzen. Dann wird 
es entspannt und exakt!

MfG
Falk
#1549882
Lesenswert?

Eine Synchronisation mit einem GPS 1 Sekunden Puls ist etwas 
aufwendiger. Man muss dem GPS Signal einen Jitter erlauben. Dh man muss 
ueber einige Sekunden, zB 100 Sekunden integrieren. Dh anstelle in einer 
Sekunde auf 2'048'000 zu Zaehlen muss man in 100 sekunden auf 
204'800'000 zaehlen und aufgrund von dieser Differenz den VCO 
nachstellen. Jetzt mach diesen Vorgang  kontinuierlich.
Gast #1549884
Lesenswert?

Danke für die Tipps schon mal vorweg.

@Ernst
Das mit dem And habe ich nicht ganz begriffen. Kannst du das noch etwas 
näher ausführen? Das Layout ist noch nicht fertig. Somit könnte ich ein 
und noch einfügen.

Wie willst du das denn mit der ICP Funktion lösen.
Gast #1549922
Lesenswert?

@ Nebliger Pfad

Das mit dem integrieren über z.B. 100sek ist eine Gute idee. Meinst du 
es würde auch mit den internen Timern funktionieren? Würde den Timer 1 
in 16Bit ohne Teiler laufen lassen und alle 65536 Takte in einen 
Überlaufinterrupt laufen.
Gast #1550488
Lesenswert?

Es hängt ein wenig vom Jitter des GPS Signals ab, denn der Schwierigere 
Teil ist es die 1 sekunde genau mit einen höheren Takt zu verknüpfen. 
Die Methode der Wahl wäre es das 2 MHz Signal auf etwa 10-100 kHz 
runterzuteilen und dann genau wie die GPS Sekunde per ICP zu vermessen.
Je nach Qualität des GPS Signals lohnt es sich dafür auch einen höheren 
Takt (20 MHz) zu nutzen.

Die einfachere Wahl, und vermutlich besser wäre es einen Quarz mit z.B. 
8x2,048 MHz zu nehmen, und den per Kappazitätsdiode nach zu justieren, 
anhand des GPS Signals. Mit den gut 16 MHz könnte ein µC laufen, der 
dann per ICP das GPS Signal vermisst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren