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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Haarlos (Gast)


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


Bewertung
-2 lesenswert
nicht 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)


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

Bewertung
1 lesenswert
nicht 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)


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


Bewertung
-1 lesenswert
nicht 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)


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

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]
  • [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.