Interrupt mit Timer0

Gast #362477
Lesenswert?
• ▲
▼
Hallo Forum,

Ich habe den 8Bit Timer0 wie folgt in C initialisiert:

TCCR0 |= (1<<CS00)|(1<<CS02); // CPU-Takt/1024
TIMSK |= (1<<TOIE0);          // Timer0 Inetrrupt enable
sei();                        // Global Interrupt enable

ISR(TIMER0_OVF_vect)           // Interrupt Funktion
{
    //Interrupt code
}

Mein Problem ist jetzt, dass die zugehörige Interrupt Funktion nicht
ausgeführt wird (Compalierung erfolgreich).

Mfg und danke für alle Beiträge!
Gast #362481
Lesenswert?
• ▲
▼
RISC AVR-Mikrocontroller (ATmega8) der Firma ATMEL
Test LED wird von Port B PIN 2 angesteuert

Das Programm läuft bis zur ersten "while(flag_1==0)" Schleife und
sitzt dann fest, d.h. die rote LED leuchtet.
Würde ISR ausgeführt werden müsste die gelbe LED nach einiger Zeit
leuchten...

Danke schon mal für Deine Mühen, Programm im Anhang.
Angehängte Dateien:
Gast #362482
Lesenswert?
• ▲
▼
Das ist doch schon viel besser. Warum nicht gleich so? Da sieht man doch
sofort den Fehler. Variablen, die sowohl im Hauptprogramm als auch in
Interrupt Handlern verwendet werden, müssen volatile deklariert werden!
Also "volatile unsigned int flag;"

Abgesehen davon ist es eine ziemliche Speicherverschwendung, für eine
Variable, die nur 0 oder 1 sein kann, einen int zu verwenden. Da tuts
auch ein char.
Gast #362487
Lesenswert?
• ▲
▼
Hallo,

hab meine Variable flag_1 jetzt volatile gemacht. Dies hat aber mein
Problem, dass die Intterrupt Funktion nicht ausgeführt wird, leider
nicht behoben.
Hab auch schon versucht das Timer overflow flag TOV0 im Register TIFR
manuell zu setzen, was aber auch nicht zur Verzweigung in ISR geführt
hat.
Eigentlich kann es doch nur noch am Funktionsrumpf
"ISR(TIMER0_OVF_vect)" liegen?

Danke für alle Beiträge (Code weiter oben)
Gast #362488
Lesenswert?
• ▲
▼
Kann das jetzt grad leider nicht überprüfen, aber schau mal nach, ob der
Vektor nicht "TIMER0_OVF0_vect" heißt, also mit ner '0' hinter dem
OVF. Ich meine, mich erinnern zu können, dass es da in der libc bei
bestimmten Controllern diese (zugegebenermaßen nicht sonderlich
logische) Bezeichnung gab.
Gast #362490
Lesenswert?
• ▲
▼
Hab dein Prog in mein Testboard geladen, die ISR funktioniert.
Dein Testled solltes du auf PINB3 geben nicht PINB2 dann siehst du es
auch flimmern.
Mit deinem while Konstrukt im main komme ich allerdings nicht zurecht,
das solltest du mal überdenken.

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