Mega8/Timer2

Gast #95299
Lesenswert?
• ▲
▼
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?
Gast #95301
Lesenswert?
• ▲
▼
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.
Gast #95304
Lesenswert?
• ▲
▼
@ 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
Gast #95305
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren