interupt on change Spinnt?!
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  PIC Mikrocontroller Allgemein  |  interupt on change Spinnt?! « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: interupt on change Spinnt?!  (Gelesen 485 mal)
 
PicNewbie
Newbie
*
Offline Offline

Beiträge: 8


Profil anzeigen
« am: Juli 21, 2010, 09:52:07 »

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:
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;
}


bin für jede Antwort Dankbar! Smiley


* interrupt_on_change.jpg (146.5 KB, 800x600 - angeschaut 64 Mal.)
Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #1 am: Juli 21, 2010, 11:03:45 »

Hallo,

sieht schwer danach aus, als würdest Du die "mismatch condition" nicht beseitigen. Dies führt dazu, dass der Interrupt ständig aufs Neue ausgeführt wird.
Lies Dir bitte dazu das Kapitel "PORTB, TRISB and LATB Registers" im Datenblatt Deines PICs durch.

Bevor Du im Interrupt das RBIF-Flag löschst, musst Du einmal vom PortB ein Dummy-Read ausführen. Dadurch wird die "mismatch condition" beseitigt.

Gruß
Daniel
Gespeichert
PicNewbie
Newbie
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #2 am: Juli 23, 2010, 08:31:42 »

.. wer lesen kann ist klar im Vorteil.
DANKE!
jetzt gehts:
hier die ISR
Code:
#pragma code
#pragma interrupt InterruptHandlerHigh
void
InterruptHandlerHigh ()
{
LATBbits.LATB2 = 1;
a=PORTB;
Nop(); // SEITE 96 !!!! removing mismatch
INTCONbits.RBIF=0;
LATBbits.LATB2 = 0;

}

Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.044 Sekunden mit 18 Zugriffen.
 
Top! Top!