Forum: Mikrocontroller und Digitale Elektronik Mega 48/88, Frage zu den "Double Buffered Output Compare Registers"


von Der kleine Niels (Gast)


Lesenswert?

Servus beisammen,

erstmal kurz zum Hintergrund:
Ich möchte 2 Pins an meinem uC unabhängig voneinander kurze Impule 
abgeben lassen. Die Periodendauer von Puls zu Puls an jedem der Pins ist 
eine Funktion der vorangegangenen Periodendauer. (Taktpulse für 2 
Schrittmotoren)
Ich dachte mir folgendes: ein Comparematch-Interrupt (z.B. Timer0 trifft 
OCR0A) wird ausgelöst, der Pin wird getoggelt, die neue Periodendauer in 
Zählertakten wird berechnet und auf den aktuellen OCR0A draufgerechnet, 
und wieder in OCR0A gespeichert. Abschließend wird der Pin 
zurückgetoggelt.

Nun frage ich mich jedoch, was das für Auswirkungen mit diesem Doubled 
Buffered Register haben wird und ob es Möglichkeiten gibt Probleme zu 
umgehen.
Es könnte ja schließlich sein, dass ein Interrupt bei Timerwert 1 
ausgelöst wird, und ein Weiterer 200 Zählertakte später ausgelöst werden 
soll. Mit den gepufferten Registern würde das ja nach meinem Verständnis 
nicht funktionieren.

Hat jemand einen Rat für mich?

lg
Niels

von Stefan E. (sternst)


Lesenswert?

Die  "Double Buffered Output Compare Registers" hast du ja nur in den 
PWM-Modes. Deine Anwendung klingt ja aber eher danach, dass du den 
Zähler im Normal-Mode durchlaufen lassen willst. Und da werden die 
Output-Compare-Register sofort aktualisiert.

von Der kleine Niels (Gast)


Angehängte Dateien:

Lesenswert?

Ja richtig, der Timer soll ganz Normal ohne PWM laufen.
Ach ist das dieses "Update of OCRx at"?

Btw.:
Wo ist dabei der entscheidende Unterschied zwischen TOP und BOTTOM?
Ist das wirklich "nur" dieser eine Zählerschritt, oder hat das 
tiefgründigere Auswirkungen?

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.