Forum: Mikrocontroller und Digitale Elektronik INT1 PIC24F16KA101


von Markus M. (erdi007)


Lesenswert?

Hallo,
ich möchte auf dem PIC24F16KA101 einen INT1 auslösen.
Ich habe mittlerweile schon sehr viel versucht, aber der INT1 wird nicht 
ausgelöst. Wenn ich mit Stimulus ein High auf den INT1 Eingang lege, 
wird der Interrupt ausgelöst und die ISR abgearbeitet. In meiner 
Schaltung lege ich mit der Betriebsspannung einen Highpegel auf den 
Eingang und entferne diesen wieder, ohne das ein Interrupt ausgelöst 
wird.
Kann jemand den Fehler im Programm erkennen?
Vielen Dank.
Grüße Markus

Configbits
1
// PIC24F16KA101 Configuration Bit Settings
2
3
// 'C' source line config statements
4
5
#include <xc.h>
6
7
// FBS
8
#pragma config BWRP = OFF               // Table Write Protect Boot (Boot segment may be written)
9
#pragma config BSS = OFF                // Boot segment Protect (No boot program Flash segment)
10
11
// FGS
12
#pragma config GWRP = OFF               // General Segment Code Flash Write Protection bit (General segment may be written)
13
#pragma config GCP = OFF                // General Segment Code Flash Code Protection bit (No protection)
14
15
// FOSCSEL
16
#pragma config FNOSC = PRI              // Oscillator Select (Primary oscillator (XT, HS, EC))
17
#pragma config IESO = ON                // Internal External Switch Over bit (Internal External Switchover mode enabled (Two-Speed Start-up enabled))
18
19
// FOSC
20
#pragma config POSCMOD = HS             // Primary Oscillator Configuration bits (HS oscillator mode selected)
21
#pragma config OSCIOFNC = OFF           // CLKO Enable Configuration bit (CLKO output signal is active on the OSCO pin)
22
#pragma config POSCFREQ = MS            // Primary Oscillator Frequency Range Configuration bits (Primary oscillator/external clock input frequency between 100 kHz and 8 MHz)
23
#pragma config SOSCSEL = SOSCHP         // SOSC Power Selection Configuration bits (Secondary oscillator configured for high-power operation)
24
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor Selection (Both Clock Switching and Fail-safe Clock Monitor are disabled)
25
26
// FWDT
27
#pragma config WDTPS = PS32768          // Watchdog Timer Postscale Select bits (1:32,768)
28
#pragma config FWPSA = PR128            // WDT Prescaler (WDT prescaler ratio of 1:128)
29
#pragma config WINDIS = OFF             // Windowed Watchdog Timer Disable bit (Standard WDT selected; windowed WDT disabled)
30
#pragma config FWDTEN = OFF             // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
31
32
// FPOR
33
#pragma config BOREN = BOR3             // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware; SBOREN bit disabled)
34
#pragma config PWRTEN = ON              // Power-up Timer Enable bit (PWRT enabled)
35
#pragma config I2C1SEL = PRI            // Alternate I2C1 Pin Mapping bit (Default location for SCL1/SDA1 pins)
36
#pragma config BORV = V18               // Brown-out Reset Voltage bits (Brown-out Reset set to lowest voltage (1.8V))
37
#pragma config MCLRE = ON               // MCLR Pin Enable bit (MCLR pin enabled; RA5 input pin disabled)
38
39
// FICD
40
#pragma config ICS = PGx3               // ICD Pin Placement Select bits (PGC3/PGD3 are used for programming and debugging the device)
41
42
// FDS
43
#pragma config DSWDTPS = DSWDTPSF       // Deep Sleep Watchdog Timer Postscale Select bits (1:2,147,483,648 (25.7 Days))
44
#pragma config DSWDTOSC = LPRC          // DSWDT Reference Clock Select bit (DSWDT uses LPRC as reference clock)
45
#pragma config RTCOSC = SOSC            // RTCC Reference Clock Select bit (RTCC uses SOSC as reference clock)
46
#pragma config DSBOREN = ON             // Deep Sleep Zero-Power BOR Enable bit (Deep Sleep BOR enabled in Deep Sleep)
47
#pragma config DSWDTEN = ON             // Deep Sleep Watchdog Timer Enable bit (DSWDT enabled)
 ISR
1
void __attribute__((interrupt,auto_psv)) _INT1Interrupt(void){
2
    PORTB |= 1<<9; 
3
    IFS1bits.INT1IF=0;
4
}
Konfiguration vom INT1, weitere Einstellungen an anderen Modulen werden 
nicht vorgenommen.
1
   TRISBbits.TRISB14=1; //int1 eingang
2
   AD1PCFGbits.PCFG14=0; //digital 
3
   CNPU1bits.CN14PUE=0;
4
5
   IPC5bits.INT1IP=5; //priority 
6
   INTCON2bits.INT1EP=0; // interrupt on positive edge 1 negative edge
7
   
8
   IEC1bits.INT1IE=1; //inerrupt enable

von WehOhWeh (Gast)


Lesenswert?

Also lies doch mal mit dem PICkit das Portregister. Geht das mit deiner 
angelegten Spannung mit?
Ist der PIN vielleicht andersweitig vergeben, z.B. OSCOUT, JTAG?
ANSELbits gelöscht (weiß nicht, ob das nötig ist!)?
Komparator ausgeschaltet?
Output Compare ausgeschaltet?

Hab den auf einem PIC24FJ128GC006 schon mal verwendet. Bis auf das 
Peripheral Remapping sollte das ident sein, denke ich.
1
void WakeupSource(uint8_t enable)
2
{
3
    if(enable == 1)
4
    {
5
        //Set button2 as external interrupt
6
        INTCON2bits.INT1EP = 1; //triggering at rising edge
7
        IPC5bits.INT1IP = 3;
8
9
        OSCCONbits.IOLOCK = 0;  //unlock peripheral Remapping
10
        RPINR0bits.INT1R = 29;
11
        OSCCONbits.IOLOCK = 1;  //relock....
12
13
        IFS1bits.INT1IF = 0;
14
        IEC1bits.INT1IE = 1;
15
16
    }
17
    else
18
    {
19
        //disable int0
20
        IEC1bits.INT1IE = 0;
21
22
        OSCCONbits.IOLOCK = 0;  //unlock peripheral Remapping
23
        RPINR0bits.INT1R = 0;
24
        OSCCONbits.IOLOCK = 1;  //relock....
25
        
26
        IFS1bits.INT1IF = 0;
27
    }
28
}
29
void __attribute__((__interrupt__, auto_psv)) _INT1Interrupt(void)
30
//insert ISR here...

das klappte...

von Markus M. (erdi007)


Lesenswert?

Moin moin
Interrupt wird jetzt ausgelöst, lag an den Einstellungen im AD1PCFG. 
Komischerweise funktioniert es bisher nur wenn ich alle Bits auf 1 setze 
für digital. Wenn ich nur PCFG10 für den AN10 setze funktioniert es 
nicht. Aber AN10 teilt sich Pin 17 mit dem INT1, dann müsste ich doch 
richtig liegen oder habe ich einen Denkfehler?

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.