MSP430 Taster programmieren

Gast #3376833
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
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
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.
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.