www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interruptroutine wird nicht ausgeführt


Autor: eduard holzhacker (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend

Irgendwie funktioneirt bei mir der Aufruf der ISR nicht. Ich verwende
einen 90s8535 mit dem STK200. Was habe ich vergessen einzustellen, bzw.
muss man auf dem Board noch etwas beachten. Die Quelle ist ein
Temperaturfühler (SMT 160-30), jedoch habe ich uach mit den Tastern
eine positive Flanke auf PD6 gegeben. Der Quellcode ist im Anhang
beigelegt.

Gruss E.H.

Autor: Hanes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlt der Befehl "sei();" um die Interrups zu aktivieren?
Schau mal in der avr/interrupt.h nach.

Autor: eduard holzhacker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das mache ich ja mit dieser Zeile:

SREG |= 0x80;      //General interrupt enable

Ich setzte eifnach direkt das I-Bit, oder macht sei() noch etwas
anderes?

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab für deinen MC kein Datenblatt da, aber schau mal ob der
Input-Capture Interrupt Enable passt, beim Mega32 wäre das nämlich
0x20.

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR1A muss auch noch initialisiert werden.
z.Bsp.
TCCR1A = (1 << PWM11) | (1 << PWM10) | (1 << COM1A1); // nicht inv.
10Bit PWM

Gruss
Hilel

Autor: eduard holzhacker (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Fritz Ganter
Ja, stimmt das war falsch, es funktioniert jedoch auch nach dieser
Änderung nicht. Ich habe den neuen Code angehängt.

@Hilel: Ich verstehe nicht ganz warum TCCR1A initialisiert werden muss.
Dort stelle ich ja nur Dinge für Output Compare ein und ich möchte ja
ein Input Capture machen.

Datenblatt von 90S8535:
http://www.nikhef.nl/pub/departments/et/misc/at853...

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich dachte PWM. Sorry.

Woher soll das Programm wissen, dass es bei Interrupt in die
Interrupt-Routine springen soll?
Fehlt da nicht der Interrupt-Vektor?

#pragma interrupt_handler DeineInterruptRoutine:6

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim IAR-Compiler sieht es etwa so aus:

interrupt [SIG_INPUT_CAPTURE1] void meineRoutine(void);

interrupt [SIG_INPUT_CAPTURE1] void meineRoutine(void)
{
  PORTB = 0xAA;      //zu testzwecken bitmuster an LEDs
}

Autor: eduard holzhacker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Ich habe das von hier übernommen, allerdings bringt der Compiler ein
paar warnungen, wie z.B. die ich jedoch ignoriert habe:

warning: return type defaults to `int'
warning: function declaration isn't a prototype
In function `INTERRUPT':
warning: type of "__vector_5" defaults to "int"
In function `INTERRUPT':
warning: control reaches end of non-void function

Gruss

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub das bekommst du wenn der Signalname nicht passt.

Autor: eduard holzhacker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, ich bin mir in der Zwischenzeit ziehmlich sicher, dass irgendetwas
mit diesen Interrupt vektoren nicht stimmt. Ich entwickle mit WinAVR,
muss ich da noch irgendetwas einstellen, oder muss noch etwas mit
#include eingebunden werden?

Als Starthilfe habe ich das tutorial
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
gemacht. Gibt es evtl. noch andere solche tutorials, möglicherweise
eines, das etwas mehr auf die Interrupts eingeht?

Gruss

Autor: eduard holzhacker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert jetzt. Ich konnte zwar das Problem nicht lösen, sondern
nur umgehen. ich habe aus dem Interrupt ein Signal gemacht und dann
noch avr/signal.h importiert.

Jedoch wüsste ich trotzdem gerne, warum es mit Interrupt nciht
funktioniert hat.

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mit Einbinden von avr/signal.h hast Du Deine Interrupt-Vektoren
eingebunden (siehe die Warnungen vorher).

Das Tauschen von Interrupt gegen Signal war sicher nicht die
Problemlösung. Trotzdem sollte immer Signal verwendet werden, solange
man nicht genau weiss, was man tut.

Gruß, Stefan

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.