Timer1 mit ICR1 als Top im Fast-PWM-Modus und kein Overflow-Interrupt

Gast #4757200
Hallo,

habe mir schon fast alle Haare ausgerauft. Irgendwie will es nicht.
Bislang hatte ich den Timer1 im CTC-Modus (4) mit 
Compare-Match-Interrupt. Das hat soweit ganz gut funktioniert.

Jetzt dachte ich, wäre doch schick, wenn ich den Timer auch noch als 
PWM-Quelle nutzen könnte und habe deshalb auf Modus 14 umgestellt.
Laut Datenblatt (ich verwende einen mega16) kommt der Überlauf-Interrupt 
bei Erreichen von Top, also ICR1.
Soweit die Theorie.
1
ICR1 = 16000;
2
TCCR1A |= 1 << WGM11;
3
TCCR1B |= 1 << WGM12 | 1 << WGM13
4
        | 1 << CS10; 
5
TIMSK |= 1 << TOIE1;
6
sei();

Den Interrupt habe ich von TIMER1_COMPA_vect auf TIMER1_OVR_vect 
umbenannt.
Leider bekomme ich überhaupt keinen Interrupt.

Was habe ich übersehen?
Gast #4757242
Hi

>Was habe ich übersehen?

Du hast das Kapitel 'Modes of Operation' von Timer1 nicht gelesen. Da 
steht drin welche Interrupts bei den verschieden PWM-Modes ausgelöst 
werden.

MfG Spess
Gast #4757312
> Was habe ich übersehen?

Das Kapitel "11.2 Interrupt Vectors"; dort steht, dass der Vektor von 
Atmel "TIMER1 OVF" getauft wurde, in C also vermutlich TIMER1_OVF_vect 
heißt.
Gast #4757796
@Spess
Sorry, aber Deine Antwort war Quatsch. Siehe Bild im Anhang

@S.Landolt
Danke für den Tip. Hat das Problem zwar noch nicht gelöst, mich aber 
zumindest weiter gebracht. Hatte noch ein weiteres Problem rund um den 
Interrupt.

Jetzt taucht der zumindest in der Interrupt-Tabelle in der lss-Datei 
auf.

Muss jetzt nur noch rausfinden, warum der Professor aus der 
Endlosschleife raus kommt und wieder von vorne anfängt. Verrückterweise 
wird der Sekundenzähler nicht zurückgesetzt, sodass ich zwischen durch 
sehen kann, dass die Sekunden gezählt werden :O
Angehängte Dateien:
Gast #4757809
Haarlos schrieb:
> Muss jetzt nur noch rausfinden, warum der Professor aus der
> Endlosschleife raus kommt und wieder von vorne anfängt. Verrückterweise
> wird der Sekundenzähler nicht zurückgesetzt, sodass ich zwischen durch
> sehen kann, dass die Sekunden gezählt werden :O

Kann man gut nachvollziehen ohne den Code zu sehen ...
Gast #4757960
Hallo Ihr beiden,

Ihr habt beide recht :)

... aber ich bin wieder etwas weiter. Der Interrupt wird aufgerufen und 
ich weiß, warum der Professor im Dreieck hüpfte. Typischer Fall von 
denkste ;)
Ein Funktionszeiger wurde vor der Initialisierung aufgerufen. Das muss 
ja in die Hose gehen.

Dank Euch für Eure Aufmerksamkeit und Unterstützung!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.