- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 2 von 2

Thema: interrupt on change, will einfach nicht ?!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10

    interrupt on change, will einfach nicht ?!

    Anzeige

    Powerstation Test
    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;
    }
    ich dank euch!
    Steffen
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken interrupt_on_change.jpg  

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2010
    Beiträge
    10
    mkay!

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


    Code:
    #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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad