PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : interrupt on change, will einfach nicht ?!



PicNewbie
21.07.2010, 11:02
Hi,

ich hätt da ma ne Frage:

Ich versuche das "interrupt on change" Feature beim PIC18F4620 auf nem PICDEM2 PLUS Board zu verwenden.
(Wenn ich den PIC auf steigende/fallende Flanke konfiguriere klappt das wunderbar. )
Wenn ich jetzt interrupt on change aktiviere, habe ich entweder nichts auf meinem Ausgangspin oder in einem festen Abstand immer ein Interrupt.
Der Abstand beträgt 2,2us bzw. das kommt mit 460Hz. Ich verwende ein 8MHz Quarz mit 4xPLL.
Ich habe das auch wenn ich den ICD Stecker drin/draussen habe ( der hängt an den gleichen Ports ).
Muss ich alle nicht verwendeten Ports mim Pulldown versehen? ( mit dem internen PullUp gehts nicht -> gleiches Ergebnis wie aufm Bild )

hier mal der Code:


#include <p18f4620.h>

void main (void);
void InterruptHandlerHigh (void);
void main ()
{
TRISB=0b11111001;
LATB=0b00000010;

INTCONbits.RBIF=0;

INTCON2=0b10000001;
INTCON3=0b00000000;
RCONbits.IPEN=1;
INTCON=0b00001000;
INTCONbits.GIE=1;

while (1)
{
}
}



#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh
_endasm
}


#pragma code
#pragma interrupt InterruptHandlerHigh
void
InterruptHandlerHigh ()
{
LATBbits.LATB2 = 1;
LATBbits.LATB2 = 0;
INTCONbits.RBIF=0;
}


ich dank euch!
Steffen

PicNewbie
23.07.2010, 09:33
mkay!

Also ich musste den "mismatch" löschen bevor ich das Flag zurücksetzten kann.
Wie das geht siehe hier:




#pragma code
#pragma interrupt InterruptHandlerHigh
void
InterruptHandlerHigh ()
{
LATBbits.LATB2 = 1;
a=PORTB;
Nop(); // SEITE 96 !!!! removing mismatch
INTCONbits.RBIF=0;
LATBbits.LATB2 = 0;

}


grüße