Hallo zusammen, ich erzeuge mittels einem Timer (8MHz) und einer Compare-Unit Frequenzen zwischen 350 und 1260 Hz. Wie kann man denn die Frequenz berechnen??? Also der Takt des Timers ist 8Mhz (ohne Prescaler). Gemessene Werte: 355 Hz :: 10800 CompareWert 1250 Hz :: 2750 CompareWert Wie komm ich denn auf die Zahlen??? Eine Periode dauert bei 355 Hz ja 2,81 ms. Der Timer tickt alle 0,000125 ms. Ich hab gerechnet 2,81 2 0,000125 und bin auf 11240 gekommen. Im anderen Fall 0,8 2 0,000125 und das Ergebnis ist 3200. Die Werte stimmen zwar annähernd, aber eben mit ner ziemlich großen Abweichung. Ist das ein Messfehler oder ist die Rechnung falsch???
Ganz allgemein:
Das nach "Compare" auflösen, und Du hast eine Gleichung für den erforderlichen Compare-Wert für eine bestimmte Frequenz.
Micha R. wrote: > Die Werte stimmen zwar annähernd, aber eben mit ner ziemlich großen > Abweichung. Du benutzt nicht zufällig den Mega8 internen RC-Oszillator als Taktgeber?
Karl heinz Buchegger wrote: > Micha R. wrote: > >> Die Werte stimmen zwar annähernd, aber eben mit ner ziemlich großen >> Abweichung. > > Du benutzt nicht zufällig den Mega8 internen > RC-Oszillator als Taktgeber? Nein... hab nen PIC18 mit nem externen Quarz. Ich komme auch mit der Formel von Johannes auf meine errechneten Ergebnisse. Könnte es daran liegen, dass ich den Port in einem Interrupt toggle???
wenn man nicht die Capture Funktion nutzt sondern erst in der Interruptroutine den Zählerstand abfragt, könnte es sein das der Zählerstand dann schon wieder höher ist. Dann kann man einfach die entsprechendenden Takte vom Zählerstand abziehen.
Thomas O. wrote: > wenn man nicht die Capture Funktion nutzt sondern erst in der > Interruptroutine den Zählerstand abfragt, könnte es sein das der > Zählerstand dann schon wieder höher ist. Dann kann man einfach die > entsprechendenden Takte vom Zählerstand abziehen. Ich machs ja umgekehrt. Ich nutze ja die Compare-Funktion, um bei einem bestimmten Timerwert per Interrupt den Port zu togglen.
Wenn Du toggelst, musst Du den Wert noch mal durch zwei dividieren.
achso jetzt hab ichs verstanden. Tuh es doch mal simulieren könnte sein das das toggeln etwas Zeit in Anspruch nimmt diese wirkt sich dann bei höheren Frequenzen stärker aus als bei niedrigen. Könntest ja mal mit ein paar Messpunkte in eine Linie zeichnen um zu sehen wie linear die Abweichung verläuft. z.B. 10Hz=1500 20Hz=2990 40Hz=5965.....
Es fehlt vermutlich die Zeit, die der Interrupt braucht, bis der Zähler wieder gestartet wird. Abhilfe: Zähler durchlaufen lassen. Das mit dem SW-Korrigieren der Taktzyklen ist immer ungenau. Suche mal nach Treads wie: genaue Sekunde erzeugen Uhr geht ungenau etc. Kann der PIC hardwaremäßig einen Timerausgang bedienen? Toggle on compare? damit könntest Du die genaue Quarzfrequenz ermitteln. Es könnte auch sein, dass der Oszillator daneben schwingt. Alternativ mal einen fertigen Quarzoszillator als Clock verwenden. Diese findet man häufig auf GrafikKarten oder Mainboards oder anderen el. Geräten.
eProfi wrote: > Kann der PIC hardwaremäßig einen Timerausgang bedienen? > Toggle on compare? Toggle on Compare gibts schon. Aber ich bekomms nicht zum laufen.
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.