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


von eduard holzhacker (Gast)


Angehängte Dateien:

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.

von Hanes (Gast)


Lesenswert?

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

von eduard holzhacker (Gast)


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?

von Fritz G. (fritzg)


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.

von Hilel (Gast)


Lesenswert?

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

Gruss
Hilel

von eduard holzhacker (Gast)


Angehängte Dateien:

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/at8535/at8535_dat.pdf

von Hilel (Gast)


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

von Hilel (Gast)


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
}

von eduard holzhacker (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#INTERRUPT

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

von Fritz G. (fritzg)


Lesenswert?

Ich glaub das bekommst du wenn der Signalname nicht passt.

von eduard holzhacker (Gast)


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-Tutorial#INTERRUPT
gemacht. Gibt es evtl. noch andere solche tutorials, möglicherweise
eines, das etwas mehr auf die Interrupts eingeht?

Gruss

von eduard holzhacker (Gast)


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.

von Stefan Kleinwort (Gast)


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

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.