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.
> 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.
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
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)
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.