Forum: Compiler & IDEs TIMER0_OVF wird einfach nicht aufgerufen (Mega162, GCC)


von MarcusW (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Nach langem hin- und herprobieren weiss ich jetzt endgültig nicht mehr 
weiter.

Zunächst aber zu den allg. Infos:

ATmega162, 16Mhz
AVR-GCC 4.2.2
AVR-LIBC 1.6.2

Zum Problem:

In mein Programm wollte ich einen einfachen 1ms-Timer einfügen. 
Standardmäßig mit Timer0, dem 8 Bit Timer.

Leider wird die Overflow-Interrupt-Routine nicht aufgerufen.
Ich habe jetzt das Problem soweit eingegrenzt, dass das angehängte 
Programm entstand.

Der Timer 0 wird initialisiert mit 1msec. Beim ersten Aufruf der ISR 
sollte die LED an PB0 eingeschaltet werden.
Dies tut sie aber nicht!!

Interessant wirds, wenn man sich den auskommentierten Teil in der 
Main-WhileLoop ansieht. Hier frage ich das TOV0-Bit im TIFR direkt ab. 
Wenn ich diesen Code statt der ISR nutze, funktioniert das Programm (LED 
wird eingeschaltet). Das bedeutet ja, dass der Timer grundsätzlich 
läuft.


Leider habe ich z.Zt. keinen anderen Controller hier. Bin mir nämlich 
sicher, dass genau diese Einstellung mal bei mir beim Mega8 
funktionierte.

Ich hoffe mir kann jemand von euch helfen, meine ISR in Gang zu bringen.



Vielen Dank an euch

von Stefan E. (sternst)


Lesenswert?

Tja, das kommt davon, wenn man in die Register irgendwelche Hex-Werte 
schreibt und nicht die symbolischen Namen verwendet. TOIE0 hat in TIMSK 
bei einem Mega162 eine andere Position als beim Mega8.

von MarcusW (Gast)


Lesenswert?

Ich glaubs ja nicht.

Ich werd definitiv in Zukunft die symb. Namen verwenden. Verringert die 
Wahrscheinlichkeit von Copy&Paste-Fehlern.

Bemerkenswert finde ich übrigens, dass du nur 7 Minuten nach Abschicken 
des Threads den Fehler gefunden hast. Ich hab alles gefühlte 100 mal 
überprüft.

Dank dir für dein Hilfe.

von Michael U. (amiga)


Lesenswert?

Hallo,

ich glaube nicht, daß er die 7 Minuten dafür gebraucht hat, er hat 
vermutlich nur nicht früher Deine Frage gelesen.

Aber eine wichtige Erkenntnis hast Du ja schon gewonnen, mach das 
wirklich so.

Ich habe leider auch schon Stunden nach einem Fehler in einer fremden 
Software gesucht, weil etwas nicht ging.
Alles war sauber vereinbart, richtig von mir geändert.
Leider hatte der Programmier an einer einzigen Stelle im Programm nicht 
seine eigene Vereinbarung genutzt, sondern den Wert direkt 
geschrieben...

Gruß aus Berlin
Michael

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.