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


von Der M. (steinadler)


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.

von Power (Gast)


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?

von Fred (Gast)


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

von Der M. (steinadler)


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.

von Johannes M. (johnny-m)


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.

von Hannes L. (hannes)


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.

...

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.