www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenz aus CompareUnit berechnen


Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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???

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz allgemein:
Das nach "Compare" auflösen, und Du hast eine Gleichung für den 
erforderlichen Compare-Wert für eine bestimmte Frequenz.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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???

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du toggelst, musst Du den Wert noch mal durch zwei dividieren.

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.....

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eProfi wrote:
> Kann der PIC hardwaremäßig einen Timerausgang bedienen?
> Toggle on compare?

Toggle on Compare gibts schon.

Aber ich bekomms nicht zum laufen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.