www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schalter Implementierung - pic30f - C


Autor: camelcoder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,

könnte sich einer mal folgenden quäl-code anschauen?

damit will ich einen einfachen schalter abfragen und abhängig davon 
licht an und ausschalten.

Initialisierung (einmalige Ausführung)
void SwitchInit(void){

  TRISDbits.TRISD8 = 1; //d8 --> input

  if(PORTDbits.RD8){ //d8 is currently high

    INTCON2bits.INT1EP = 1; //interrupt on negative edge

    LightOn();
  }
  else{

    INTCON2bits.INT1EP = 0; //interrupt on positive edge

    LightOff();
  }

  IFS1bits.INT1IF = 0; //reset INT1 interrupt flag

  IEC1bits.INT1IE = 1; //enable interrupts for INT1
}

ISR für INT1 und zugehörigen Timer
void __attribute__((__interrupt__)) _INT1Interrupt(void){

  IFS1bits.INT1IF = 0; //reset INT1 interrupt flag

  IEC1bits.INT1IE = 0; //disable interrupts for INT1


  if(PORTDbits.RD8){ //d8 is currently high

    INTCON2bits.INT1EP = 1; //next interrupt on negative edge

    LightOn();
  }
  else{

    INTCON2bits.INT1EP = 0; //next interrupt on positive edge

    LightOff();
  }


  /* Timer 3 on (for debouncing) */

  TMR3 = 0x0000;
  T3CONbits.TON = 1;
}

void __attribute__((__interrupt__)) _T3Interrupt(void){
    
  /* Timer 3 off */
  T3CONbits.TON = 0;


  IFS1bits.INT1IF = 0; //reset INT1 interrupt flag

  IEC1bits.INT1IE = 1; //enable interrupts for INT1


  if(PORTDbits.RD8){ //d8 is currently high

    INTCON2bits.INT1EP = 1; //next interrupt on negative edge

    LightOn();
  }
  else{

    INTCON2bits.INT1EP = 0; //next interrupt on positive edge

    LightOff();
  }


  /* Reset Timer 3 Interrupt Flag */
  IFS0bits.T3IF = 0;
}

Timer initialisierung
void Timer3Init(void){

  T3CONbits.TCS = 0;
  T3CONbits.TGATE=0;
  T3CONbits.TCKPS=0b11;
  PR3=5760;
  IEC0bits.T3IE = 1;
  IFS0bits.T3IF = 0;
  TMR3 = 0x0000;
  T3CONbits.TON = 0;
}

haut das so hin, dass ich einerseits den pin rb8 als input pin abfrage 
und andererseits als interrupt pin verwende?
und wie siehts aus mit dem entprellen per timer passt das so?

thx,
grüße

Autor: Camel Coder (camelcoder)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
push

hi, ich nochmal ... könnte mal jemand schauen ob der code so prinzipiell 
ok ist? weil dann muss der fehler an der hardware liegen ...

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.