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
http://www.referencedesigner.com/tutorials/msp430/msp430_07.php http://dbindner.freeshell.org/msp430/#_pushbutton_fun
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.
Wie stehts um den Pullupwiderstand des Tasters? Auf dem Launchpad ist er standardmäßig nicht bestückt.
Wie genau ist das zu verstehen. Darüber wurde bisher in noch keinem Tutorial von TI oder anderen Anbietern geredet ?
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;
#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
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 | }
|
Hier wurde der Widerstand auf pull up eingestellt: P1OUT |= BIT3; und was passiert hier: P1OUT = BIT6; oder hier: P1OUT = BIT0; mit P1.3 ?
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
Robert I. schrieb: > P1OUT = BIT6 LEGT Vcc an Bit 6 an und was passiert mit BIT0, BIT1, ... , BIT5, BIT7 durch die Zuweisung?
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 ?
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.