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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.