Forum: Mikrocontroller und Digitale Elektronik Atmega 16 CTC Problem


von Th B. (tbusse)


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

von (prx) A. K. (prx)


Lesenswert?

Viele Leute hier sind ein bischen wie Compiler. Sie wollen Quellcode 
sehen und können mit mehr oder weniger schwammigen Beschreibungen von 
Code wenig anfangen.

von Johannes M. (johnny-m)


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.

von Th B. (tbusse)


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...

von spess53 (Gast)


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

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.