Forum: Mikrocontroller und Digitale Elektronik MSP430 Taster programmieren


von Venum (Gast)


Lesenswert?

Hallo.

Ich suche bitte eine Erklärung wie ich einen Taster abfrage. Das MSP430 
LaunchPad hat einen Taster der für solche Zwecke gedacht ist. Jetzt 
möchte ich gerne zum Üben Programmieren dass wenn die rote LED leuchtet 
und wenn ich den Taster drücke die grüne LED leuchtet.

Wie das mit den LEDs funktioniert hab ich bereits verstanden leider 
finde ich bei TI keine geeignet leicht zu vertsehende Anleitung wie man 
mit anderen Signalen wie einen Taster umgeht.

Hoffe es kann mir jemand dabei helfen.

Danke sehr

von occiR (Gast)


Lesenswert?

man frag das Portpin ab und wertet das Ergebnis aus.

von go MASP430 (Gast)


Lesenswert?


von Robert I. (robert_i39)


Lesenswert?

Vielen Dank schon mal für die Tipps.

Ich habe das alles jetzt mal so übernommen und umgebaut wie ich es gerne 
hätte.

Allerdings reagiert mein Controller nicht auf den Taster.

Ich habe diese Abfrage hier um zu prüfen ob der Taster gedrückt ist oder 
nicht:

#define pin3mask  (0x01 << 3)

if(( P1IN & pin3mask ) == 0 )

jedoch passiert nichts.

Freue mich über weitere Hilfe.

von Steigbügelhalter (Gast)


Lesenswert?

Wie stehts um den Pullupwiderstand des Tasters?
Auf dem Launchpad ist er standardmäßig nicht bestückt.

von Robert I. (robert_i39)


Lesenswert?

Wie genau ist das zu verstehen.

Darüber wurde bisher in noch keinem Tutorial von TI oder anderen 
Anbietern geredet ?

von Avr A. (colombo010)


Lesenswert?

Der Taster muss an GND und an einen Portpin angeschlossen werden. Der 
Portpin des Tasters muss noch einen Pullup aktiviert haben.

das geht mit  P1REN |=BIT0;

von Robert I. (robert_i39)


Lesenswert?

Auch der onboard Taster ? O.o

von Avr A. (colombo010)


Lesenswert?

#define BUTTON BIT3

P1DIR &= ~BUTTON;   // Set button pin as an input pin
    P1OUT |= BUTTON;    // Set pull up resistor on for button
    P1REN |= BUTTON;    // Enable pull up resistor for button to keep 
pin high until pressedv

initialisiere deinen Pin mal so

http://www.youtube.com/watch?v=6-GdoBjzh5A

: Bearbeitet durch User
von Mrs. MSP (Gast)


Lesenswert?

Robert I. schrieb:
> Auch der onboard Taster

Die umgebende Hardware des µC muss betrachtet werden. Die Unterlagen 
findest du hier: http://www.ti.com/tool/msp-exp430g2

Der Eingang des µC kann high active (anlegen eines high Pegels) oder low 
active (anlegen eines low Pegels) betrieben werden. Das wurde bei deinem 
Board durch den Anschluss des Tasters bereits vorgegeben.

Um den Port Pin auch anders zu nutzen, wurde der Pull Up/Down Widerstand 
nicht bestückt. Das ist aber kein Problem, denn der MSP430 hat intern 
einen Pull Up und Down Widerstand. Den kannst du aktivieren.

Also, wirf einen Blick auf den Schaltplan. Entscheide ob interner Pull 
Up oder Down zu konfigurieren ist und werte den Taster high oder low 
active aus.

von Robert I. (robert_i39)


Lesenswert?

Gesagt getan,

trotzdem zeigt der Controller keine Reaktion auf den Taster S2.

Code:
1
#include <msp430g2553.h>
2
3
void main(void)
4
{
5
  WDTCTL = WDTPW + WDTHOLD;
6
  P1DIR |= BIT0;
7
  P1DIR |= BIT6;
8
  P1DIR &= ~BIT3;
9
  P1OUT |= BIT3;
10
  P1REN |= BIT3;
11
12
  for(;;)
13
  {
14
    if((P1IN & BIT3) == 0x00)
15
    {
16
      P1OUT = BIT6;
17
    }
18
    else
19
    {
20
      P1OUT = BIT0;
21
    }
22
  }
23
24
}

von Mrs MSP (Gast)


Lesenswert?

Hier wurde der Widerstand auf pull up eingestellt:
  P1OUT |= BIT3;

und was passiert hier:
      P1OUT = BIT6;
oder hier:
      P1OUT = BIT0;
mit P1.3 ?

von Robert I. (robert_i39)


Lesenswert?

Mrs MSP schrieb:
> Hier wurde der Widerstand auf pull up eingestellt:
>   P1OUT |= BIT3;
>
> und was passiert hier:
>       P1OUT = BIT6;
> oder hier:
>       P1OUT = BIT0;
> mit P1.3 ?

P1OUT = BIT6 LEGT Vcc an Bit 6 an
Und Bit0 das selbe mit Bit 0
Das waren die beiden LEDs.

Den P1.3 Frage ich in der if ab

von Mrs MSP (Gast)


Lesenswert?

Robert I. schrieb:
> P1OUT = BIT6 LEGT Vcc an Bit 6 an

und was passiert mit BIT0, BIT1, ... , BIT5, BIT7 durch die Zuweisung?

von Robert I. (robert_i39)


Lesenswert?

Meinst dass der Fehler ist dass alle anderen BITS auf 0 gesetzt werden 
dadurch ?

Aber wie müsste die Abfrage dann heißen um den Zustand des Tasters 
abzufragen ?

von who (Gast)


Lesenswert?

Robert I. schrieb:
> Meinst dass der Fehler ist dass alle anderen BITS auf 0 gesetzt werden
> dadurch ?

Du veränderst dadurch auch wieder den pullup Widerstand! Man ändert nur 
die benötigten Bits im Register.

Hier ein Beispiel:
1
#include "io430.h"  // G2553 defined in project options menu
2
3
void main( void )
4
{
5
  // Stop watchdog timer to prevent time out reset
6
  WDTCTL = WDTPW + WDTHOLD;
7
  
8
  P1DIR |= BIT6 | BIT0;  // output for LED1 und 2
9
  
10
  P1REN |= BIT3;         // internal resistor for S2
11
  P1OUT |= BIT3;         // as pullup
12
  
13
  while (1) {
14
    
15
    if (P1IN & BIT3) {   // S2 open
16
      P1OUT &= ~BIT6;
17
      P1OUT |= BIT0;
18
    } else {             // S2 closed
19
      P1OUT &= ~BIT0;
20
      P1OUT |= BIT6;
21
    }
22
23
  }
24
25
}

von Robert I. (robert_i39)


Lesenswert?

Vielen lieben Dank,

jetzt kann ich wenigstens den Code durchgehen und so lernen ohne 
herumzuprobieren.

Danke sehr, schönen Abend noch.

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.