Forum: Mikrocontroller und Digitale Elektronik Rechteck zwischen 900kHz.1,1Mhz mit 1khz Schrittweite


von crash (Gast)


Lesenswert?

Hallo,

ich sitze jetzt schon seit Stunden dran, komme aber nicht viel weiter.

Für Messzwecke brauche ich einen Frequenzgenerator für Frequenzen 
zwischen 900khz und 1,1mhz (ideal), mit einer Schrittweite von 1khz oder 
weniger (auch ideal).

Abweichungen wären Möglich (aber nicht schön...) bis +80khz in der 
unteren (980khz) und -50khz (1,05mhz) in der oberen Frequenz, nur die 
Schrittweite sollte bei 1khz oder weniger bleiben.

Controller ist mega644@20mhz.

Leider kam ich jetzt nicht allzuweit, hier mal mein Code bisher:
1
DDRD |= (1<<PD5);
2
TCCR1A |=(1<<COM1A0);// OC1A toggle on compare match
3
TCCR1B |=(1<<WGM12); // CTC mode 4
4
TCCR1B |=(1<<CS10);

Mit OCR1A =>
0x07 komm ich auf 1,24977Mhz (laut Oszi),
0x08 = 1,11091Mhz,
0x09 = 999,815Khz,
0x0a = 908,922Khz.

Für mich zwar schonmal toll zum Ausprobieren, aber bringt mich nicht 
sehr viel weiter, da viel zu Große Schritte.

Auf einen DDS-Chip solls nicht rauslaufen, da die Hardware schon fertig 
ist, und das jetzt nachträglich in Software dazu soll. Der Quarz am 
Controller könnte noch getauscht werden.

Vielleicht hab ich da ja auch einen ganz falschen Ansatz. Auf jeden Fall 
hoffe ich dass ich hier Hilfe finde!

von Roland P. (pram)


Lesenswert?

Ich denke das geht mit einem Timer nicht so einfach
um 1 MHz +/- 1 KHz zu erreichen, müsste der Timer ja um den Faktor 1000 
schneller zählen, also mit rund 1 GHz laufen...

Gruß
Roland

von Roland P. (pram)


Lesenswert?

Welcher Jitter wäre denn erlaubt? dann liese sich ggf auch mit dem AVR 
was machen

von Peter (Gast)


Lesenswert?

>Auf einen DDS-Chip solls nicht rauslaufen, da die Hardware schon fertig
>ist, und das jetzt nachträglich in Software dazu soll. Der Quarz am
>Controller könnte noch getauscht werden.

Super voraussblickendes Design! Zuerst die HW hinwursteln und erst 
nachher überlegen, was man braucht!

>Auf einen DDS-Chip solls nicht rauslaufen,
Ich würde aber trotzem so einen nehmen...

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

>rund 1 GHz laufen

Schaue mal bei google nach AVR overclocking

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Was spricht gegen einen LTC6904 oder etwas ähnliches?

von Volker S. (sjv)


Lesenswert?

Hallo,

ein für AM(Mittelwelle) gedachter PLL-Synthesizer müßte auch dafür 
geeignet sein!

MfG

von Matthias L. (Gast)


Lesenswert?

>Super voraussblickendes Design! Zuerst die HW hinwursteln und erst
>nachher überlegen, was man braucht!


FULL ACK!

Ich hab hier noch eine kleine Platine, da ist nur ein uC drauf, der eine 
blaue LED blinken lässt. Ich wollte jetzt das Blinkrogramm so anpassen, 
dass ich damit auch Wäschewaschen kann. Kann mir jemand helfen?

Achja, die Hardware sollte so bleiben, höchstens die Farbe der LED kann 
noch getauscht werden..

von dummy (Gast)


Lesenswert?

crash schrieb:
> Für Messzwecke brauche ich einen Frequenzgenerator für Frequenzen
> zwischen 900khz und 1,1mhz (ideal), mit einer Schrittweite von 1khz oder
> weniger (auch ideal).

Falls du MHz (Mega-) und nicht mHz (Milli) meinst, rechne doch einfach 
mal aus, wieviele Prozessortakte dein Ausgangssignal z.B. bei 1000 kHz 
lang ist und wieviele bei 1001 kHz. Noch Fragen?

von lars (Gast)


Lesenswert?

Es geht mit Frequenz-Dithering.

Angenommen Du hast einen Frequenzgenerator mit 1000.1 kHz. Gibst das 
Signal auf einen Input-Port schreibst folgende Software:

while (1)
  OUT = IN;

dann kommt aus dem Ausgangsport auch wieder 1000.1kHz raus.

Ich schätze den Schwierigkeitgrad in etwa so ein wie das Projekt 
PAL-Testbildgenerator mit AVR.

von Uwe (de0508)


Lesenswert?

Hallo,

was noch keiner beschrieben hat, ist das Frequenzmischen:
Quarzoszillator (Sinus) avr pwm Sinus.

Die Quarzfreq. liegt unterhalb der Ausgabefreq. und wir mischen ein 
weiteres kleiners Signal dazu. Danach noch ein HP-Filter.

von Anna Log (Gast)


Lesenswert?

willi will DDS

von crash (Gast)


Lesenswert?

Peter schrieb:
> Super voraussblickendes Design! Zuerst die HW hinwursteln und erst
> nachher überlegen, was man braucht!

Na toll, immer erstmal ein blödes Kommentar. Ich will dein blödes 
Gesicht sehen, wenn du deine Blinke-LED in die Hand gedrückt bekommst 
und es heisst, "mach ne Waschmaschine draus, nachm Feiertag muss es 
laufen!".

>Falls du MHz (Mega-) und nicht mHz (Milli) meinst, rechne doch einfach
>mal aus, wieviele Prozessortakte dein Ausgangssignal z.B. bei 1000 kHz
>lang ist und wieviele bei 1001 kHz. Noch Fragen?

Na dann werd ich mal schauen, dass wie ich das so noch irgendwie in den 
Controller bekomme.

Anna Log schrieb:
> willi will DDS

Wollen ja, machen geht nicht.

von Peter (Gast)


Lesenswert?

>Na toll, immer erstmal ein blödes Kommentar. Ich will dein blödes
>Gesicht sehen, wenn du deine Blinke-LED in die Hand gedrückt bekommst
>und es heisst, "mach ne Waschmaschine draus, nachm Feiertag muss es
>laufen!".

Da würde ich kein blödes Gesicht zu machen, ich würde sagen:
- mach ich nicht...
- kann ich nicht...
- mach doch selber...
- geht so nicht...
- mach ich, mit neuer HW...

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Nimm doch einfach den LTC6904 als Taktquelle für deine CPU.
Damit ist die Sache geritzt.
Dieses 8-Polige Teil bekommst Du sicher anstatt dem Quarz rein gelötet.

von iaoffline (Gast)


Lesenswert?

Matthias Lipinsky schrieb:
> Achja, die Hardware sollte so bleiben, höchstens die Farbe der LED kann
> noch getauscht werden..

Nun hat schon mal jemand ne interessante Aufgabe jenseits von 
"meinPortToggeltNicht" oder welcher "Spannungsregler für 5V", dann ist 
es  auch wieder nicht recht.

Ist doch mal ne Herausforderung so jenseits von allem was in Software 
möglich ist.

Kenne die AVR Schiene nicht aber bei Pic würde ich auf internen 
Schwinger umschalten und das ganze mit einer Kombination aus Vorteiler 
OSCTUNE und nem NOP Feld mit variablen Einsprungadressen probieren. 
Kalibrieren mit irgendwas das von draussen kommt (einmal mit Quartz, 
einmal ohne)

So ne Trickschaltung wird doch für AVR Kenner auch möglich sein, Oder?

von Horst H. (horha)


Lesenswert?

Hallo,

der Threadersteller hat es doch im ersten Post schon festgestellt, dass 
ein NOP mehr die Frequenz direkt um ~100 khz ändert.
T/2(f = 1.1 Mhz) = 454 ns (Zeit zwischen zwei Umschaltungen toggle )
T/2(f = 0.9 Mhz) = 555 ns
dT ~= 100 ns
ein Befehl wird in 1/ 20 mhz = 50 ns abgearbeitet, da hilft keine NOP 
Liste.

Also etwas wie ein PLL per 1-wire/I2C / SPI steuerbar wie 
Beitrag "Re: Rechteck zwischen 900kHz.1,1Mhz mit 1khz Schrittweite" schrieb ist wohl ein 
gangbarer Weg.

von lars (Gast)


Lesenswert?

>der Threadersteller hat es doch im ersten Post schon festgestellt, dass ..
> da hilft keine NOP Liste.

Doch, das geht.
Bachfolgener Code könnte jede Frequenz von 1Hz bis 999999Hz in 1Hz 
Schritten erzeugen.
1
const int frequenz = 999999;
2
int i;
3
4
5
while() {
6
  i+ = frequenz;
7
8
  if ( i >= 2000000)
9
    i-= 2000000;
10
11
  PORTx= (i>1000000);
12
13
  while (! timerTick_500ns() );
14
15
}
Das Problem ist eher, dass die 20MHz Systemtakt noch zu nahe am 1MHz 
Signal liegen und obiges Programm wahrscheinlich eine zu lange 
Durchlaufzeit auf einem AVR hat.

Ein DDS Chip kann auch feinere Frequenzschritte als im Systemtakt 
ausgeben.
Lediglich das Phasenrauschen durch die Abtastung hat man immer.

von Ulrich (Gast)


Lesenswert?

Wenn man es extrem trimmt könnte man noch per Sotware DDS zu dem 
Frequenzen Kommen - man braucht dann aber noch extern einen guten Filter 
und Komperator um dann ein Rechtecksignal zu bekommen. Da es nur um den 
Rechteck geht darf die Grenzfrequenz des Filters auch relativ niedrig 
sein - ggf. geht auch ein Bandpass.

Eine andere Softwarelösung, aber auch recht aufwendig, wäre es den µC 
mit dem internen RC Takt laufen zu lassen und den in Laufzeit zu ziehen 
um in dann an einen externen Quarztakt (z.B. 32 kHZ) per Software PLL 
anzubinden.  Das könnte gehen, ist aber aufwendig und erzeugt relativ 
viel Jitter.

von Purzel H. (hacky)


Lesenswert?

Eine kleine Leiterplatte, ein LTC6903 oder so als VCO, einen ADF4001 als 
PLL Chip und ein paar Zeilen zum initialisieren.

von Uwe (de0508)


Angehängte Dateien:

Lesenswert?

Hallo Lars,

deine Idee finde ich klasse, deshalb hier auch der Output des C 
Programms.

Beitrag "Re: Rechteck zwischen 900kHz.1,1Mhz mit 1khz Schrittweite"

Ich habe jetzt keine Zeit das durch zu rechnen, mache ich aber noch..

von iaoffline (Gast)


Lesenswert?

Horst Hahn schrieb:
> Hallo,
>
> der Threadersteller hat es doch im ersten Post schon festgestellt, dass
> ein NOP mehr die Frequenz direkt um ~100 khz ändert.

Moin Horst, das ist wohl "nicht so ganz falsch"

Dann soll er halt den Quarz durch einen Resonator ersetzen (wg. in 
diesem Fall "besserem" TK), selbigen per Kupferblech mit dem µC 
verbinden und durch an/abschalten von diversen internen Modulen die 
Verlustleistung beeinflussen welche durch Wärmeentwicklung den Resonator 
verstimmt. Wo ein Wille da ein Holzweg ;-).

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.