Forum: Mikrocontroller und Digitale Elektronik Takt modulieren via OSCCAL


von C-hater (c-hater)


Lesenswert?

Ich versuche gerade, ein digitales Software-PLL zu realisieren. D.h. 
Phasenkomparator und Tiefpaß sind in Software realisiert, den "VCO" soll 
der interne Taktgenerator eines ATtiny sein, der über OSCCAL 
entsprechend gesteuert wird.

Tja, wie das immer so ist, bin ich dabei auf Probleme gestoßen. Ganz 
offensichtlich verhält sich der Taktgenerator keinesfalls so, wie man es 
von den zugegebenermaßen nur zarten Andeutungen seiner Funktionsweise im 
Datenblatt erwarten könnte. Nur wenn ich den Tiefpaß ganz furchtbar tief 
lege, funktioniert es wie erwartet. Leider sind nur die synthetischen 
Taktquellen, die ich zum Testen verwende, derart freundlich, daß ich den 
Tiefpaß so sehr tiefstapeln lassen kann. Sobald ich eine Waveform des 
realen Signals meiner Anwendung anlege, kann die PLL entweder nicht mehr 
einrasten oder höchstens mal zufällig. Nach vielem oszilloskpieren bin 
ich mittlerweile zu der (zu überprüfenden) Erkenntnis gelangt, daß 
Änderungen des Wertes in OSCCAL wohl erst eine Auswirkung haben, wenn 
der Taktgenerator sich auf die durch den vorigen Wert gegebene Frequenz 
eingeschwungen hat. Das ist zumindest meine derzeitige Arbeithypothese.

Hat sich jemand schon mal mit dem internen Oszillator intensiver 
beschäftigt und kann meine These bestätigen oder widerlegen? Mit 
beidem wäre mir geholfen.

von Diensthabender Troll (Gast)


Lesenswert?

> mal mit dem internen Oszillator intensiver beschäftigt

ja.....

der AVR ist kein PLL-IC. OSCCAL dient lediglich zum kompensieren der 
herstellungsbedingten toleranzen. siehe auch appnote AVR053 von atmel.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Bin kein AVRer. Du meinst den internen Oszillator oder externes Quarz? 
Der interne wird nicht stabil genug sein, so daß die Schleife 
immerwieder ausrastet.


Gruß -
Abdul

von C-hater (c-hater)


Lesenswert?

Ja, gemeint ist natürlich der interne Oszillator, nur der läßt sich über 
das OSCCAL-Register steuern.

Das Problem hat sich nach einem Tag Programmierabstinenz und danach 
einem nochmaligen kritischen Blick in den Quelltext quasi von allein 
gelöst. Zwei fiese, gut versteckte Fehler in der Software beseitigt und 
schon ging's wie gewünscht.

Wie ich immer sage: Wenn man's richtig macht, dann funktioniert's auch.

Natürlich ist das Konstrukt keine besonders "schöne" PLL. Wegen der nur 
relativ groben möglichen Schritte für die Kalibrierung via 
OSCCAL-Register weist das Ding erwartungsgemäß einen relativ starken 
Phasenjitter auf. Das war mir aber vorher klar und spielt für die 
Zielanwendung keine Rolle. Da reicht es, wenn das Ding überhaupt 
zuverlässig einrastet und auch eingerastet bleibt. Und das tut es (jetzt 
endlich :o)

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Das Phasenrauschen wird trotzdem beschissen sein, weil das meist einfach 
Ringoszillatoren ohne Induktivitäten sind. Aber wenns für deine 
Anwendung reicht, warum nicht!


Gruß -
Abdul

von GvTT (Gast)


Lesenswert?

Hallo Heiko,

ich stehe gerade vor einem ähnlichen Problem (Tiefpass und PLL im 
ATTiny).
Ich will ihn mit dem DCF77 (77,5kHz) synchronisieren.

Ich könnte den ATtiny frei laufen lassen und alles über Timer 
synchronisieren oder halt den ATtiny via Software PLL in Gleichtakt 
bringen.

Die Basis Frequenz ist also sehr stabil, nur muss die PLL Aussetzer im 
Ref. Signal ausgleichen.

Ich wäre an Deinem PLL Code interessiert. Kannst Du mir diesen eventuell 
schicken (mail(at)tardy.de)?

Danke und Grüße
Georg

von Gunter (Gast)


Lesenswert?

GvTT schrieb:
> Ich wäre an Deinem PLL Code interessiert.
Such mal nach 'OSCCAL calibration'. Das wird auf jeden Fall in der 
AVR-Butterfly Demoapplikation verwendet. Wenn Du die Funktion etwas 
abwandelst und öfters mal aufrufst, hast Du Deine (Soft-)PLL.

Gruß,
Gunter

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.