mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F1232 + Interrupt Port 1


Autor: GeRi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute!

Ich möchte am Port 1 auf dem auch das JTAG interface verbaut ist eine 
Interrupt-abfrage machen.

Hab dafür auch den Code geschrieben und der funktioniert. Jedoch 
funktioniert er immer nur für einen Taster. Wenn ich jetzt im Interrupt 
2 Taster abfragen will dann spielt das ganze ding verrückt.

Ich versteh das nicht... kann das sein dass ich die Interrupts dann 
anders rücksetzen muss oder wie?


CODE:
//---------------------------------------------------------------------- 
---
  if((P1IFG & BIT6)){     //Abfrage auf Interruptflag an P1.6
    P1IE &= ~BIT6;

    //while(P1IN & BIT6);   //Warten bis Taster wieder losgelassen

    sChannel=1;       //Kanalauswahl

    //for(k=0;k<=3000;k++); //Entprellung
    P1IE |= BIT6;         //Interrupt wieder freigeben
  }
//---------------------------------------------------------------------- 
---
   if(P1IFG & BIT7){      //Abfrage auf Interruptflag an P1.7
    P1IE &= ~BIT7;        //Interrupt sperren (wegen Prellung)

    //while(P1IN & BIT7);   //Warten bis Taster wieder losgelassen

    if(P2IE & BIT0)       //T1 (bett) für Start des 
Nulldurchgangsinterrupt
      P2IE &= ~BIT0;
    else
      P2IE |= BIT0;

    //for(k=0;k<=3000;k++); //Entprellung
    P1IE |= BIT7;         //Interrupt wieder freigeben
  }

  P1IFG &= ~BIT6;         //Interrupt T2 löschen
  P1IFG &= ~BIT7;         //Interrupt T1 löschen


Wieso soll das nicht funktionieren?

Hab auch das flag schon in der IF schleife rückgesetzt. das bringt auch 
nichts!!!

Bitte um hilfe!

mfg, geri

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>P1IE &= ~BIT7;        //Interrupt sperren (wegen Prellung)
>P1IE |= BIT7;         //Interrupt wieder freigeben
Ist unnötig da im Interrupt alle Interrupts eh deaktiviert sind.

>Jedoch funktioniert er immer nur für einen Taster.
D.h. das 2. Flag wird nicht gesetzt oder nicht bearbeitet, oder...?

>Wenn ich jetzt im Interrupt 2 Taster abfragen will dann spielt das ganze
>ding verrückt.
Was bedeutet "verrückt"?

Autor: GeRi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es lösen beide taster einen interrupt aus. Sie sind auf falling edge 
geschalten, was mit den tastern übereinstimmt.

Komischerweiße kommt der interrupt an bit7 nur dann wenn ich drücke und 
löst die richtige aktion aus.

Der taster an bit6 löst interrupt aus, jedoch müsste ich am taster 
bleiben um die aktion auszuführen.. wie kann das sein?

die taster sind komplett gleich aufgebaut alle auf falling edge 
geschaltet...

ich versteh das nicht!

mfg, geri

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mmm, ich hab ehrlich gesagt immer noch nicht verstanden was los ist.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du den Quellcode nochmal ohne die auskommentierten Stellen 
posten? Und als formatierten Text, damit man da durchsieht? Und solche 
While-Schleifen usw. in der ISR macht man niemals nicht, überhaupt nicht 
und unter keinen Umständen ;)

Autor: Peter Diener (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das kann mit der Prellzeit der Taster zu tun haben, Bit7 hat vom 
Auslösen des Interrups an mehr Zeit, bis die while Schleife kommt, kann 
diese also umgehen, wenn der Taster gerade in diesem Moment prellt. Das 
kann von Taster zu Taster variieren aber auch sehr reproduzierbar 
aussehen.

Solche Sachen macht man halt auch nicht im Interrupt, und wenn, dann 
entprellt man die Taster.

Viele Grüße,

Peter

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.