Hi Leute, ich soll mich über die Capture/Compare Einheit eine µC schlau machen. Habe dazu meine Unterlagen gewälzt und auch Wiki befragt. Nur steht in allem in etwa das gleich, womit ich aber irgendwie nix anfangen kann: Timer-Modus: Aufwärtszählen mit verschiedenen Quellen als Taktgeber. Bei Zählerüberlauf kann ein Interrupt ausgelöst werden. Capture-Modus: Beim Auftreten eines externen Signals wird der Inhalt des zugeordneten (laufenden) Timers gespeichert. Auch hier kann ein Interrupt ausgelöst werden. Compare-Modus: Der Zählerstand des zugeordneten Timers wird mit dem eines Registers verglichen. Bei Übereinstimmung kann ein Interrupt ausgelöst werden. Gibt's irgendwie Beispiele, die mir die einzelnen Modi näher erklären?
für PIC http://sprut.de/electronic/pic/grund/capture.htm für AVR http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR
Danke erstmal für die antworten! Unklar ist an den Sätzen nix. Ich will nur nicht irgendwelche Sätze auswendig lernen, wenn ich sie nicht wirklich verstanden habe und dazu hätt ich gern eine Beispielsituation wo der jeweilige Modus eingesetzt wird.
Capture: Du lässt einen Zähler hochzählen und weißt in welchem Abstand er dies macht, z.B. zählt er jede Sekunde um eins hoch, kann man 'beliebig' konfigurieren. Wenn nun der Wechsel eines "externes Signal" erkannt wird, wird dieser Zählerwert gespeichert und du kannst dann z.B. erkennen wie viel Zeit zwischen zwei externen Signalen vergangen ist. Beispiel: Zählerstand beträgt 10, dann sind 10s zwischen zwei "externen Signalen" (z.B. zwei steigende Flanken eines Signals) vergangen. Compare: Du stellst den Takt (z.B. 1Hz) ein und schreibst in das Vergleichsregister einen Wert (z.B. 20). Wenn der Timer diesen Wert erreicht, kannst du einen Interrupt auslösen. (Hier wäre dies dann alle 20s ein Interrupt). Gruß LD
Hallo! Timer ist wie eine frei laufende Uhr. Capture ist wie eine Stoppuhr: auf ein Signal hin wird die Uhr abgelesen. Compare ist wie ein Wecker: Du gibst 6 Uhr vor, und bekommst ein Signal wann es soweit ist.
Könnte man also den Capture/Compare auch so beschreiben: Capture: Es wird der Startwert am Timer und der Wert nach dem der Timer gestoppt wurde, gespeichert. Die Zählerschritte zwischen den beiden Ergebnissen ergeben den zeitlichen Unterschied der beiden Ereignisse. Compare: Der Zählerstand des Timers wird bei jedem Zählschritt mit einem vorher eingestellt Wert vergleichen. Wenn der Timer den Wert erreicht hat der eingestellt wurde, wird ein Interrupt/weiteres Signal ausgelöst. Stimmt das soweit?
poiu schrieb: > Könnte man also den Capture/Compare auch so beschreiben: > > Capture: > Es wird der Startwert am Timer und der Wert nach dem der Timer gestoppt > wurde, gespeichert. Die Zählerschritte zwischen den beiden Ergebnissen > ergeben den zeitlichen Unterschied der beiden Ereignisse. Fast. Der Timer läuft die ganze Zeit weiter. Da wird nichts gestartet oder gestoppt. Du hast eine Uhr mit Sekundenzeiger. Die tickt die ganze Zeit. Wenn dein Kumpel oben das Klavier aus dem Fenster schmeisst, schreit er "jetzt". Du siehst auf deine Uhr und merkst dir "Sekundenzeiger bei 28" (Capture!). Wenn das Klavier unten aufschlägt, siehst du wieder auf die Uhr und merkst dir: "Sekundenzeiger bei 37" (Capture!). Aus der Different 37 - 28 errechnest du, dass das Klavier 9 Sekunden geflogen ist. Die Uhr läuft die ganze Zeit weiter. > Compare: > Der Zählerstand des Timers wird bei jedem Zählschritt mit einem vorher > eingestellt Wert vergleichen. Wenn der Timer den Wert erreicht hat der > eingestellt wurde, wird ein Interrupt/weiteres Signal ausgelöst. Passt
Nebenbei: 9 Sekunden Flugzeit: in so einem Hochhaus muß mein Kumpel schön laut schreien können. Die Schallgeschwindigkeit in Luft für die fast 400 m sollte man berücksichtigen!
Und der Clou davon ist, das funktioniert immer, solange der Timer nicht 2-mal überläuft. Z.B. Capture1: 65530 Capture2: 5 (uint16_t)(Capture2 - Capture1) = 11 Peter
Hallo! ...und poiu daran denken: wenn Du bei Capture zweimal auf die "Uhr" geschaut hast, und immer 15 abgelesen wurde, kann das Drei!!! Ursachen haben. 1) Du warst zu schell- der Zeiger ist noch nicht weiter gerückt, 2) der Zeiger hat inzwischen eine oder gar mehrere "Umdrehungen" gemacht, 3) die Uhr steht.
Hi, eines der wenigen Foren hier, wo man vernünftige, nette Anworten bekommt und nicht patzig angemault wird! Kompliment!
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.