MSP430 Taster programmieren

Gast #3376833
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
#3377066
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.
Gast #3377361
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.
#3377505
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
}
Gast #3378000
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren