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