Forum: Mikrocontroller und Digitale Elektronik Timer1 mit ICR1 als Top im Fast-PWM-Modus und kein Overflow-Interrupt


von Haarlos (Gast)


Lesenswert?

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?

von spess53 (Gast)


Lesenswert?

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

von S. Landolt (Gast)


Lesenswert?

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

von Haarlos (Gast)


Angehängte Dateien:

Lesenswert?

@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

von Dieter F. (Gast)


Lesenswert?

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

von S. Landolt (Gast)


Lesenswert?

> Hat das Problem zwar noch nicht gelöst...
Falsch formuliert.
Das Problem wurde gelöst, was bei Ihnen vorliegt, ist der Plural, 
Probleme.

von Haarlos (Gast)


Lesenswert?

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!

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
Noch kein Account? Hier anmelden.