Forum: Mikrocontroller und Digitale Elektronik msp430 Interrupt löst "selbständig" aus


von blonder_Andi (Gast)


Lesenswert?

Hallo zusammen,

ich beschäftige mich seit kurzem mit dem µC MSP430F2131.

Ich habe einige Dokus gelesen und versucht die Bsp.-Programme 
nachzustellen.

Mit dem ersten Interrupt Bsp. gibt es aber leider Probleme.

Ich versuche einfach über Taster einen Interrupt auszulösen und ein LED 
nach 5 Tastendrucken zu toggeln.
Der Taster verbindet den Pin 2.3 mit Masse, d.h der Interrupt wird mit 
fallender Flanke ausgelöst.

Zur Programmierung und Schnittstelle verwende ich IAR

Das Programm sieht folgendermassen aus:

#include "msp430x21x1.h"
volatile int zaehler = 0;
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

  P1DIR = 0xFF; // alle Pins auf Output gesetzt
  P1OUT = 0xFB;

  P2DIR = 0xF7;                 // P2.3 Input
  P2REN = 0x08;                 // P2.3 Pullup
  P2IES = BIT3;                 // P2.3 Hi/lo edge
  P2IE  = BIT3;                 // P2.3 interrupt enabled
  P2IFG = 0xF7;                 // P2.3 IFG cleared
  _EINT();

while(true)
{
  if(zaehler >= 5)
  {
      P1OUT = ~P1OUT;
      zaehler = 0;
  }

}
  return 0;
}
// Port 2 interrupt service routine
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
  zaehler = zaehler +1;
  P2IFG = 0xF7; // P2.3 IFG clearedf

}

Wenn ich das Programm debugge (haltepunkt im Interrupt) funktioniert 
alles wunderbar.
Lasse ich den Haltepunkt weg wird der Zustand des LEDs bereits nach 2 -4 
Tastendrucken geändert.
d.h ich vermute das durch meinen Tastendruck mehrere Interrupts 
ausgelöst werden.

Ich habe für den Interrupt-Pin den internen Pull-Up aktiviert, ansonsten 
wurden ständig Interrupts ausgelöst weil kein "definierter" Zustand zu 
erkennen war.

Wo kann das Problem liegen?
Wie kann ich das Problem eingrenzen?

Evtl. hat ja jemand eine Idee.

lg

Andi

von mui (Gast)


Lesenswert?

das stichwort heisst "Taster entprellen"...

VG,
mui

von Guest (Gast)


Lesenswert?

Hast Du den Taster irgendwie entprellt?

von Johnny (Gast)


Lesenswert?

Jo, klingt so als würde der Taster prellen.
Gibt sicher schon 1'000'000 threads zu diesem Themam, wie man das lösen 
kann. Eine einfache Lösung ist, einen periodischen Timerinterrupt zu 
generieren (vielleicht so alle 20ms) und darin den Tasterzustand 
abzufragen.

von blonder_Andi (Gast)


Lesenswert?

Hallo zusammen,

die Antwortzeiten hier sind einfach phänomenal.

Danke für den Hinweis mit dem Taster.
Ich werde mir das gleich mal ansehen.

lg

andi

von Michael (Gast)


Lesenswert?

Hallo Andi,
mir ist noch aufgefallen, dass bei Deiner Initialisierung Bit3 in P2OUT 
nicht gesetzt wird, nur dann ist der interne Widerstand ein Pull-up. Ist 
P2OUT low, dann ist es ein Pull-down.

Gruß, Michael

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.