Forum: Mikrocontroller und Digitale Elektronik MSP430 Taster abfrage


von GeRi (Gast)


Lesenswert?

Hallo Leute!
Hab hier ein kleines Testprogramm für einen MSP430F1232!

Leider funktioniert der Code irgendwie nicht in meinem System.

Die Taster sind aktiv high, also mit einem 10k pull-down widerstand 
beschalten.
gegen high geht dann nur mehr der Taster.

Warum aber geht der MSP430 immer wieder in die if abfragen rein. in 
5sek. geht er die abfrage ca. 5 mal durch, das kann doch nicht sein, 
wenn der taster auf low ist...!

Ich versteh das nicht ganz, kann mir jemand helfen? bzw. hat jemand das 
gleiche prob. ?

kann es an meiner Hardware liegen?

mfg, Geri

Hier noch der C-Code:
1
#include "io430.h"
2
#include "in430.h"
3
4
#define SSR_on  P2OUT |= BIT4
5
#define SSR_off P2OUT &= ~BIT4
6
7
//Variablen
8
volatile char SSR_state=0;
9
10
//prototyp
11
void wait(int i);
12
13
void main( void )
14
{
15
  // Stop watchdog timer to prevent time out reset
16
  WDTCTL = WDTPW + WDTHOLD;
17
  
18
  //SSR Ausgang auf Output schalten 
19
  P2DIR |= BIT4;
20
  
21
  // Taster als Eingänge definieren
22
  P1DIR &= ~BIT2; // Taster 1
23
  P1DIR &= ~BIT1; // Taster 2
24
  
25
  SSR_on;
26
  
27
  while(1)
28
  {
29
    
30
    if((P1IN & BIT2)){
31
      wait(2000);
32
      SSR_state=0;
33
    }
34
   
35
    if((P1IN & BIT1)){
36
      wait(2000);
37
      SSR_state=1;
38
    }
39
    
40
    if(SSR_state){
41
      SSR_on;
42
    }
43
    else{
44
      SSR_off;
45
    }
46
  }//while
47
48
}//main
49
50
51
void wait(int i)
52
{
53
  int k;
54
  for(k=0;k<=i;i++);
55
}

von Alex (Gast)


Lesenswert?

Tasterprellen???

mfg Alex

von MichiB (Gast)


Lesenswert?

Hi,

sieht gut aus.

Wie sieht die Schaltung aus?

von Nat (Gast)


Lesenswert?

wie wärs, wenn du den Flag (P1IFG) für die beiden Bits löschst?

von Nat (Gast)


Lesenswert?

Sorry, ich glaube es geht doch nicht, da du keinen Interrupt benutzst.

von Christian R. (supachris)


Lesenswert?

Wozu? Er benutzt die Taster doch gar nicht im Interrupt. Ich denke eher, 
die Wait-Schleife wird wegoptimiert, weil die Zählvariable nicht als 
volatile deklariert ist. Durch das Tasterprellen kommt es durcheinander. 
Sind die Taster wirklich an P1.1 und P1.2 angeschlossen und nicht etwa 
an P1.0 und P1.1?

von Stefan (Gast)


Lesenswert?

>Ich denke eher, die Wait-Schleife wird wegoptimiert
Die Gefahr besteht durchaus! Hier glaub ich jedoch nicht, denn wenn er 
in 5s "nur" 5x die Schleife durchläuft, muss ja irgendwo der Delay 
herkommen.

>Durch das Tasterprellen kommt es durcheinander.
Prellen ist sicher ein generelles Problem.
Aber auch hier verstehe ich das anders:
Ich denke, er meint, dass die Tasten gar nicht gedrückt werden und 
trotzdem die "if's" angesprungen werden!

Sicher, dass die Taster richtig angeschlossen sind, bzw. keine Öffner 
sind, also im unbetätigten Zustand nicht eventuell immer High-Pegel an 
P1.x anliegt?

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.