mikrocontroller.net

Forum: Compiler & IDEs timer0 interrupt c-code


Autor: udo scharnitzki (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: udo scharnitzki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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__...

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

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: udo scharnitzki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht auch in der Doku. ;-)

Beschwer' dich bei Atmel, die Namen sind aus deren XML-Dateien
generiert.  Eigentlich sollten sie mit den Namen im Datenblatt
übereinstimmen.

Ich hätte es auch lieber gesehen, wenn sie für alle Controller
einheitliche Namen benutzen würden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.