timer0 interrupt c-code

Gast #362971
Lesenswert?

Hi AVR Spezialisten,

arbeite seit 5 Tagen mit AVR. Probiere kleine Programme aus. Ich
verstehe nicht, warum in meinem Programm das Overflow Bit von Timer 0
nicht gesetzt wird. Nach Überlauf von Timer 0 springt das Programm zum
Anfang zurück und nicht, wie gewünscht in die Funktion


                     ISR(TIMER0_OVF_0x009)

In meinem Programm ist sicherlich ein dicker Fehler. Ich weiß aber
nicht wo. Mein Simulator in AVR Studio konnte mir auch nicht helfen.

Bitte um Hilfe für dieses Programm und würde mich über Alternativen
freuen.

Danke im Voraus an alle Hotliner.

Gruß

Udo
Angehängte Dateien:
Moderator Persönliche Seite #362972
Lesenswert?

> ISR(TIMER0_OVF_0x009)

Woher hast du den Namen denn her?

Leider schreibst du nicht, was für einen AVR du hast, kann ich
also nicht nachgucken, wie der Vektor genau heißen muss.  Auf
jeden Fall etwas mit _vect am Ende, also vielleicht

ISR(TIMER0_OVF_vect)

Die Compilerwarnung (oder das Fehlen ebendieser) sollte dir sagen, ob
du richtig liegst oder nicht.
Gast #362973
Lesenswert?

Danke Jörg für Deine schnelle Antwort.

Habe ISR(TIMER0_OVF_vect)in den Foren gesehen und in einer Tabelle die
VECTORADRESSE 0x009 vom ATmega8 eingeben. Vorher stand in meinem
Programm nur der Funktiosaufruf ISR(TIMER0_OVF_vect). Funktion wurde
nicht angesprungen. Dann habe ich VECTOR Adresse 0x009 für vect
eingesetzt. War ein Versuch. Weil ich nicht so richtig durchblicke.
Ging auch nicht.

Ich finde so gut wie keine Dokumentation im Internet über die Funktion
ISR(TIMER0_OVF_vect). Kenne noch nicht die Zusammenhänge in der AVR
c-Programmierung.

Also der Prozessor ist der ATmega8.

Ich bin sicher, daß Du mir auf die Sprünge helfen kannst.

Gruß

Udo
Moderator Persönliche Seite #362974
Lesenswert?

Du hast ein WinAVR?  Dann solltest du die Dokumentation zu allererst
mal auf deiner Festplatte suchen. ;-)

Im Internet:

http://www.nongnu.org/avr-libc/user-manual/index.html

Speziell:

http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html

(Unterstriche in Links sind in diesem Forum leider kaputt, musst du
manuell kopieren.)

TIMER0_OVF_vect ist korrekt für den ATmega8.

Dein Code sollte weiter nichts draußen Feststellbares tun als Port C
Bit 0 auf 1 zu setzen (nach ca. 1/4 Sekunde, falls du nicht an den
Fuses für den Takt gedreht hast).
Gast #362975
Lesenswert?

Woher weißt du denn, dass er nicht in die ISR springt? Wie stellst du
das fest? Wie Jörg schon geschrieben hat, kann man doch von außen gar
nicht sehen ob er es tut oder nicht. Oder hast du da ne LED dran?
Gast #362976
Lesenswert?

Hallo Marian,

zu Prüfzwecken teste ich zunächst auf dem Simulator und in der
Schaltung gebe ich die Daten kurz auf Leds aus, die mir anzeigen, daß
der Interupt angesprungen wurde. Funktioniert zufriedenstellend.

Mittlerweile funktioniert mein Timerinterrupt mit

ISR(TIMERO_OVF_vect).

Aber Vorsicht bei verschiedenen AVRs. Beim mega8 heißt die Routine

     ISR(TIMERO_OVF_vect) und beim 2313

     ISR(TIMERO_OVF0_vect).  Die "0" hatte ich anfangs übersehen.

Hat mich als Anfänger viel Zeit gekostet, bis ich in den io.h Dateien
den Unterschied bemerkte. In der Anfangszeit verliert man sehr schnell
den Überblick. Aber jetzt lichtet sich mein Blick langsam für die
C-Syntax.


Gruß

Udo

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