Irgendwie steh ich diesmal komplett auf dem Schlauch... Also: Mega8, Timer2 asynchron mit 32.768kHz, läuft, Frequenz stimmt auch. Vorteiler 1024, OCR=1, CTC-Mode (clear on compare). In der output-compare-ISR wird PortB.0 getoggelt, weiter nichts, das ist jetzt alles, was ich als Programm noch drinhabe. Hatte eigentlich erwartet, dass alle 31.25ms B.0 getoggelt wird, Frequenz also 16Hz, es sind aber 62.5ms=8Hz. Init: ASSR=0x08; TCCR2=0x0f; TCNT2=0; OCR2=0x01; Wo liegt mein Denkfehler?
Wieso? Nach TCNT2=OCR wird der Zähler auf 0 gesetzt, nach weiteren 1024 Takten sollte TCNT2 auf 1 wechseln und direkt wieder den OCR-Int auslösen. Zumindest denke ich mir das so. Aber ich wäre dir dankbar für eine weitere Erläuterung.
Der Teiler ist immer OCR - 1, die genaue Erklärung weiss ich auch nimmer, ist aber so.
Hm, in der Tat, mit OCR=0 funktionierts wie gewollt. Grübel, grübel - muss ich das jetzt verstehen? Irgendwie unlogisch... Besten Dank jedenfalls.
@ crazy horse du hast geschrieben, daß du den port toggeln läßt. eine frequenz setzt sich zusammen (bei dir ein rechtecksignal) aus dem positiven und dem negativem signalanteil. der timerinterrupt stimmt. du betrachtest mit der frequenz 2 interrupts. mfg michael
nö, nö, da liegt das Problem nicht. Mein Ansatz: Takt 32,768kHz, Vorteiler 1024, also zählt Timer2 mit 32Hz, also alle 31,25ms einen Takt. Und nun dachte ich, dass exakt nach 31,25ms TCNT2 von 0 auf 1 wechselt, damit den OCR-Int auslöst und gleichzeitig TCNT2 von 1 auf 0 zurückgesetzt wird. In der ISR wird ein Portpin getoggelt, also je 31,25ms low, dann 31,25ms high, Periodendauer 62,5ms=16Hz. Es sind aber nur 8Hz. Wie gesagt, mit OCR=0 klappt das.
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.