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
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.
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.
@ 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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.