www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik dsPIC33F: Interrupt Change Notification wird nicht ausgelöst


Autor: Andreas T. (megagad)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich arbeite mit dem µC dsPIC33FJ256GP710 und dem Explorer 16 Board. Ich 
habe ein Problem mit dem Interrupt, der bei einem Pegelwechsel an einem 
digitalen I/O-Eingang, ausgelöst werden soll.

Mein Code sieht so aus:
#include "p33FJ256GP710.h"

_FOSCSEL(FNOSC_PRIPLL);
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT);
_FWDT(FWDTEN_OFF);

void configure_CN(void);
void __attribute__ ((__interrupt__)) _CNInterrupt(void);

int counter;

int main ( void )
{


 // Frequenz einstellen
 PLLFBD = 0x0026;
 CLKDIV = 0x0000;


 // RF5 als Digitaler Input
 TRISFbits.TRISF5 = 1; 

 // RD4 als Digitaler Input
 TRISDbits.TRISD4 = 1; 
  
 // RB3 als digitaler Output
 TRISBbits.TRISB3 = 0;

 // RB3 auf low-Pegel
 LATBbits.LATB3 =0 ;

 // Interrupts configurieren
 configure_CN();

 // Zähler auf Null
 counter = 0;
        
 while(1);
}

void configure_CN(void)
{
 CNEN2bits.CN18IE = 1; // Enable CN18 pin for interrupt detection
 CNEN1bits.CN13IE = 1; // Enable CN3 pin for interrupt detection

 IEC1bits.CNIE = 1; // Enable CN interrupts
 IFS1bits.CNIF = 0; // Reset CN interrupt
}

void __attribute__ ((interrupt, no_auto_psv)) _CNInterrupt(void)
{
  
 //  RB3 auf high-Pegel
 LATBbits.LATB3 = 1;
  
 // Clear CN interrupt
 IFS1bits.CNIF = 0; 

 counter++;

 //  RB3 auf low-Pegel
 LATBbits.LATB3 =0 ;
  
}

Das Programm soll bei einem Pegelwechsel an den Pins RF5 und RD4 einen 
Interrupt auslösen und die zugehörige Routine ausführen. In dieser wird 
dann ein Counter hochgezählt und der Pin RB3 auf high und dann wieder 
auf low gesetzt.

Leider wird der Interrupt nur bei einem Pegelwechsel an RF5 ausgeführt. 
Bei entsprechneden Signalen an RD4 passiert nichts. Ich habe auch schon 
andere Pins ausprobiert, aber ohne Erfolg.

Ich habe die Interrupt Detection für RF5 ausgeschaltet und nur RD4 
ausprobiert. Das zeigte auch keinen Erfolg. Ein Problem an der Hardware 
konnte ich nicht festellen. Es sei denn, alle getesteten Pins sind 
defekt bis auf RF5 :-)

Vielleich (hoffentlich) habe ich einen groben Denkfehler.
Vielen Dank schon mal für die Hilfe. Ich komme hier im Moment echt nicht 
weiter. Danke!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pins auf "digital" gestellt? Ich hab grad nicht parat bei welchen PICs 
das war, aber da sind welche, deren Analogeingänge abgeschaltet werden 
müssen um digital nutzbar zu sein.

Autor: Andreas T. (megagad)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort. Es ist richtig, dass der µC Pins hat, 
die auf "digital" gestellt werden müssen. Ich habe allerdings nur Pins 
verwendet, die keine analoge Funktionalität haben. Diese Pins müssen 
nicht auf "digital" gestellt werden, wenn ich das richtig sehe.
So wie der Pin RF5. Mit diesem funktioniert ja mein Code.

Eine Frage habe ich noch zu meinem Code. Es ist doch prinzipiell 
richtig, dass ich für mehrere Pins gleichzeitig den Change Notification 
Interrupt aktivieren kann und diese dann die selbe ISR ausführen, oder?
Mit meinem aktuellen Problem hat das aber nichts zu tun, denke ich.

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias H. wrote:
> Eine Frage habe ich noch zu meinem Code. Es ist doch prinzipiell
> richtig, dass ich für mehrere Pins gleichzeitig den Change Notification
> Interrupt aktivieren kann und diese dann die selbe ISR ausführen, oder?
ja
> Mit meinem aktuellen Problem hat das aber nichts zu tun, denke ich.
denke ich auch

Schon mal versucht die Interrupt-Prio zu erhöhen?

Gruß
Christian

Autor: Andreas T. (megagad)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das habe ich noch nicht versucht. Werde ich aussprobieren. Danke!

Ich würde mich aber wundern, wenn es daran läge, schließlich 
funktioniert es ja für den einen Pin.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.