www.mikrocontroller.net

Forum: Compiler & IDEs Interruptproblem


Autor: Matthias Herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich als WinAVR- Anfänger habe mal wieder ein Problem. Bin gerade dabei,
ein bisschen mit PWM und Interrupts zu spielen:

#include <avr/io.h>
#include <avr/interrupt.h>
unsigned int tests=0;

SIGNAL (SIG_OVERFLOW1)
  {
  tests++;
  }


int main (void)
  {

  timer_enable_int (_BV(TOIE1));
  sei();


  //PWM initialisieren
  TCCR1A = 0x81;
  TCCR1B = 0x01;
  OCR1L = 0x08;
  while (1)
    {
    };
  return 0;
  }
Ich teste dieses Programm mit AvrStudio. Dabei sollte die Variable
tests hochgezählt werden. Der Interrupt wird zwar ausgelöst, aber die
Variable wird nicht inkrementiert. Was hab ich da schon wieder
vergessen???

Autor: Matthias Herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, keine Ahnung warum das jetzt dreimal im Forum steht!

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil Du dreimal auf "Submit" gedrückt hast...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FAQ #1 nicht gelesen...

Im WinAVR-Verzeichnis, dort unter "doc", die avr-libc Doku ansehen.
Auf der Einstiegsseite ist ein Pointer auf die FAQ.  Es ist wirklich
der allererste Eintrag...

Autor: Matthias Herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ist das, wenn man probiert anstatt zu studieren.

Danke noch einmal.

Autor: Matthias Herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nun hab ichs doch noch einmal probiert und die Zeile geändert. Es klappt
trotzdem nicht. Ich hab auch einmal die Optimierung rausgenommen. Auch
das hat nichts geändert.
Laut Disassembler ist der Wert in 0x0060 abgelegt. Dort wird der
Anfangswert auch abgelegt, aber dann passiert da nichts mehr.

Autor: Matthias Herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin es heute noch einmal Zeile für Zeile durchgegangen (AVRStudio).
Die Interrupt-Routine wird doch nicht ausgeführt. Wird der Interrupt
ausgelöst (TOV1=1), dann springt der Zeiger an den Anfang der main-
Funktion und das I-Bit im SREG wird gelöscht. Ich denke, das sieht nach
einem Reset des Controllers aus. Leider weiss ich nicht, warum er das
tut.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie sieht's in der realen Welt statt im AVR Studio aus?

Simulationen können ja ganz nett sein, aber entscheidend ist immer die
Welt. ;-)

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habs mal Compiliert und Simuliert. Also ich kanns so gar nicht
Compilieren, der Compiler mecker nur rum. Wenn ich aber noch die Zeile
#include <avr/signal.h> am anfang einfüge, klappts. Auch in der
Simulation ist alles wunderbar.

Was du mit dem Programm bezwecken willst, ist mir nicht ganz klar. Auf
der einen Seite willst du den PWM aktivieren und auf der anderen Seite
den Timer Overflow-Interrupt nutzen. Eigentlich schließt das eine das
andere aus???????

Gruß, Florian

Autor: Matthias Herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Programm ist so auch noch nicht fertig. Es war ein erster Versuch.
Das eine schließt das andere eben nicht aus. Den Overflow- Interrupt
möchte ich dazu nutzen, um in OCR1L den Wert jedesmal zu verändern.
Dadurch kann man, so denke ich, z.B. ein Sinussignal mittels PWM
erzeugen.

Das mit der signal.h werd ich nochmal ausprobieren.

Autor: Matthias Herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das mit der signal.h funktioniert tatsächlich.

Danke Florian.

Das mit der Hardware muss noch warten, bis das Programm das tut was es
soll. Schließlich soll die mal richtig Leistung wechselrichten

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.