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