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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.