Forum: Mikrocontroller und Digitale Elektronik Mega8/Timer2


von crazy horse (Gast)


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?

von Fritz Ganter (Gast)


Lesenswert?

Bei OCR2=1 dividierst du ja nochmal durch 2.

von crazy horse (Gast)


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.

von Fritz Ganter (Gast)


Lesenswert?

Der Teiler ist immer OCR - 1, die genaue Erklärung weiss ich auch
nimmer, ist aber so.

von crazy horse (Gast)


Lesenswert?

Hm, in der Tat, mit OCR=0 funktionierts wie gewollt. Grübel, grübel -
muss ich das jetzt verstehen? Irgendwie unlogisch...
Besten Dank jedenfalls.

von Michael (Gast)


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

von crazy horse (Gast)


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.

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.