Atmega 16 CTC Problem

OP #1183596
Lesenswert?

Moin

Ich habe folgendes Phänomen beim Simulieren einer Anwendung beobachtet. 
Ich initalisiere zuerst den Timer 1, aktiviere den CTC Modus und setze 
einen Grenzwert. Der Zähler läuft dann auch brav los. Danach wird noch 
der Ana_Comp initalisiert und dann werden die Interrupts freigegeben. 
Obwohl der TimerCounter nun ja schon ein paar Takte läuft wird sofort 
nach der Freigabe der CTC Handler angesprungen und die entspr. Routine 
ausgeführt. Warum? Mit hilfe von "seriellen Debugging" beobachte ich das 
scheinbar auch bei der echten Hardware. Nach einem Reset ist ein Zähler 
der in der CTC Isr hochgezählt wird noch Null und wird unmittelbar 
danach erhöht obwohl der TOP Wert noch nicht erreicht ist.

Any hints?

Thomas
#1183602
Lesenswert?

Wenn Du den Grenzwert erst nach dem Initialisieren des Prescalers 
(Starten des Timers) setzt, kann je nach Taktfrequenz für den Timer 
durchaus schon ein Interrupt anstehen, wenn die Interrupt-Bearbeitung 
freigegeben wird! Schließlich ist der Reset-Wert der für CTC infrage 
kommenden Register (OCRnx bzw. ICRn) Null und dementsprechend wird beim 
zweiten Timertakt das Compare-Match-Flag gesetzt.
OP #1183611
Lesenswert?

@ Johannes

Das wars! Vielen Dank, so einfach kann die Lösung sein...

@A.K.

Hätte ich auch gerne gemacht nur dürfen wir zur Zeit keine Wechselmedien 
verwenden wegen einer kleinen fiesen Wurminfektion 8-§ und das Programm 
ist natürlich nicht auf diesem Rechner...
Gast #1183612
Lesenswert?

Hi

In welcher Reihenfolge initialisierst du die Register?
Ich könnte mir vorstellen, das wenn der Timer aktiviert wird, bevor OCR 
gesetzt ist als Top 0 angesehen wird. Damit würde das IR-Flag gesetzt 
und nach 'sei' der Interrupt angesprungen. Evtl. nach der 
Initialisierung OCFxy löschen.

MfG Spess

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