www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Was nützt mir die Compare-Unit


Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

wenn ich das Datenblatt richtig verstehe, setzt die Compare-Unit eines 
PIC18F8722 bei einem Match den Timer nicht zurück.

Was nützt mir denn dann die Compare-Unit?

Wollte eigentlich Rechteckfrequenzen erzeugen.

Autor: Power (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm.. PICs sind hier eher seltener das Thema..
Beim AVR steht das sauber im Datenblatt, kenne mich mit PICs nicht aus, 
vielleicht steht's da auch im DB?

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

also zumindest beim ATtiny (Atmel) ist's so, dass Du zwei Compare 
register hast, mit denen Du zwei verschiedene PWM-Tastverhältnisse 
einstellen kannst. Dazu gibt es ein weiteres Compare register, mit dem 
die Frequenz eingestellt werden kann. Entweder der Timer wird bei einer 
Übereinstimmung mit Letzterem zurückgesetzt oder man nutzt den Überlauf.
Sollte wirklich nur die eine Compare einheit da sein ist's doch auch 
gut. Takte den PIC so, dass sich Deine gewünschte Frequenz ergibt und 
schalte mit dem Compare interrupt von low auf high (und beim Überlauf 
zurück).
Gruß

Fred

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred wrote:
> Hi,
>
> also zumindest beim ATtiny (Atmel) ist's so, dass Du zwei Compare
> register hast, mit denen Du zwei verschiedene PWM-Tastverhältnisse
> einstellen kannst. Dazu gibt es ein weiteres Compare register, mit dem
> die Frequenz eingestellt werden kann. Entweder der Timer wird bei einer
> Übereinstimmung mit Letzterem zurückgesetzt oder man nutzt den Überlauf.
> Sollte wirklich nur die eine Compare einheit da sein ist's doch auch
> gut. Takte den PIC so, dass sich Deine gewünschte Frequenz ergibt und
> schalte mit dem Compare interrupt von low auf high (und beim Überlauf
> zurück).
> Gruß
>
> Fred

Möchte allerdings gern die Frequenz dynamisch ändern können.

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

Bewertung
0 lesenswert
nicht lesenswert
Beim AVR muss man das einstellen, wenn man möchte, dass der Timer beim 
Compare zurückgesetzt wird (CTC-Modus). Normalerweise tut er das nicht. 
Möglicherweise gibt es bei den PICs auch irgendwelche Bits, mit denen 
man das konfigurieren kann. Ansonsten ist eine Compare-Einheit auch für 
andere Dinge brauchbar, und bei µCs, die Timer mit Auto-Reload haben, 
gibt es i.d.R. auch keinen CTC-Modus, auch wenn Compare-Einheiten 
vorhanden sind. Ob die Timer der PICs Auto-Reload-Funktion haben, 
entzieht sich allerdings meiner Kenntnis.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wenn ich das Datenblatt richtig verstehe, setzt die Compare-Unit eines
> PIC18F8722 bei einem Match den Timer nicht zurück.

Es gibt Anwendungen, wo es sinnvoll ist, den Timer beim Compare nicht zu 
löschen.

> Was nützt mir denn dann die Compare-Unit?

Ein frei durchlaufender Timer hat schon so seine Vorzüge.
Oft (zumindest bei den AVRs) hat ein Timer mehrere (interruptauslösende) 
Features, z.B. Überlauf, mehrere Compare, Capture.
Vergreift sich eines der Features am "Zählerstand", dann werden die 
anderen Features verar..(veralbert), es ist also nur ein Feature 
gleichzeitig nutzbar.

Läuft der Timer aber frei durch, dann können mehrere verschiedene Units 
des Timers quasi gleichzeitig verschiedene Aufgaben erfüllen. Z.B.:

- Überlauf-Int zählt einen Software-Timer (Variable) hoch, der vom
  gesamten Programm als Referenz für Verzögerungen genutzt werden kann.

- Compare-Unit erzeugt alle x Takte einen Interrupt, der diverse 
Aktionen
  auslöst. Da der Timer nicht gelöscht wird, liest man in der ISR den
  Compare-Wert ein, addiert das Intervall dazu und schreibt den Compare-
  Wert als nächten Interrupt-Termin zurück.

- Zweite Compare-Unit macht das gleiche mit anderem Intervall für einen
  anderen Zweck.

- Capture-Interrupt wird (zumindest beim AVR) durch Flanke am 
Capture-Pin
  ausgelöst. Die ISR merkt sich in einer Variablen dabei immer den
  Zählerstand des letzten Capture-Int. Durch Differenzbildung
  (Subtraktion) wird die Zeit seit des letzten Capt-Interrupt ermittelt.
  Danach wird der aktuelle Zeitstempel für den nächsten Vergleich
  "gemerkt".

Man nutzt also mehrere verfügbare Units eines Timers parallel. Bedingung 
ist aber, dass keine der Units den freien Lauf des Timers beeinflussen 
bzw. verändern darf.

All diese "Berechnungen" erfolgen mit Werten, die sich durch den Lauf 
des Timers nicht ändern. Somit spielt die Verzögerung durch einen evtl. 
verspäteten Interrupt-Aufruf keine nennenswerte Rolle. Dabei auftretende 
Fehler addieren sich also nicht, sondern heben sich gegenseitig auf.

...

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.