[MSP430G2553] Pin wird nicht korrekt eingelesen

OP #2857175
Lesenswert?

Hi Leute,

hab mal zum lernen ein ganz einfaches Programm geschrieben. Ich möchte 
die grüne LED an Pin 1.6 meines Launchpad zum Leuchten bringen indem ich 
Pin 1.3 per Kabel gegen VCC oder GND auf 0 oder 1 setze. Das Problem 
ist, das der Wert des Pins nicht eingelesen wird. Wenn ich das Kabel auf 
Vcc lege wird im Debugger trotzdem eine Null angezeigt. Manchmal ist das 
Spiel auch umgekehrt. Die LED leuchtet nicht obwohl der Pin auf Masse 
liegt. Im Registerfenster steht dann trotzdem ne eins. Mein Code scheint 
schon zu funktionieren, denn der im Debugger stehende Wert für das 
register wird korrekt umgesetzt nur der Wert des Pins wird nicht korrekt 
eingelesen.
Vieleicht liegts daran das ich das nicht per Interrupt umgesetzt habe 
oder das ich die Takte nicht weiter konfiguriert habe. Da kenne ich mich 
noch nicht so gut aus. Deshalb wollte ich es erst mal so versuchen.

Der Chip: MSP430G2553
1
/*
2
 * main.c
3
 */
4

5

6
#include "msp430g2553.h"
7

8
void main(void) {
9
  
10
  WDTCTL = WDTPW + WDTHOLD;
11
  P1DIR = 0x40;
12
  
13

14
  while(1)
15
  {
16
    if ((P1IN & 0x08))
17
      P1OUT &= ~0x40;
18
    else
19
      P1OUT |= 0x40;
20
  }
21
}

Gruß
Gast #2857203
Lesenswert?

Ja, der Schalter gegen Masse ist da dran, hatte ich der einfachheit 
halber nicht dazu geschrieben. Deshalb hatte ich den Pin als Eingang 
gewählt. Trotzdem müsste man den Pin doch gegen Masse ziehen können. Der 
Schalter geht ja direkt gegen Masse.
Gast #2857330
Lesenswert?

Absolvent 0815 schrieb:
> Du solltest P1.3 schon als Input initialisieren... ;)

Hat er doch. Auf dem Launchpad sitzt am P1.3 ein externer Pullup. Der 
Pin wird daher immer als 1 gelesen. Für eine 0 muss er satt auf Gnd 
gezogen werden.

Ich denke eher wir sehen hier nicht den ganzen Code und der interne 
Pulldown ist aktiv. >:-(
Gast #2858436
Lesenswert?

A. H. schrieb:
> Mein Code scheint
> schon zu funktionieren, denn der im Debugger stehende Wert für das
> register wird korrekt umgesetzt nur der Wert des Pins wird nicht korrekt
> eingelesen.

Ich mal gerade mein LP raus gekramt, ein 1.5.
Widerstand und C sind tatsächlich nicht bestückt. Aber egal, ich habe 
folgendes Programm in der IAR EW probiert
1
#include "msp430g2553.h"
2

3
void main(void) {
4
  WDTCTL = WDTPW + WDTHOLD;
5
  P1DIR = 0x40;
6

7
  while(1) {
8
    if ((P1IN & 0x08))
9
      P1OUT &= ~0x40;
10
    else
11
      P1OUT |= 0x40;
12
  }
13
}
Ich lege einen Finger auf die Stiftleiste von Vcc bis P1.3 ist die LED 
aus. Drücke ich dazu S2 geht die LED an. Parallel dazu habe ich P1IN im 
WATCH betrachtet, binär. Das 4te Bit, BIT3 folgt dem Schalter 
invertiert. Also alles Ok.
OP #2859779
Lesenswert?

Hmm,

habs jetzt mal anders probiert:
1
/*
2
 * main.c
3
 */
4

5

6
#include "msp430g2553.h"
7

8

9
void main(void) {
10

11
  volatile unsigned int i;
12
  
13
  WDTCTL = WDTPW + WDTHOLD;
14
  BCSCTL3 = LFXT1S_2;
15
  BCSCTL2 = SELM_3+DIVM_3;
16
  BCSCTL1 = XT2OFF;
17
  _BIS_SR(GIE);
18
  P1DIR = BIT6+BIT0;
19
  P1REN = BIT3;
20
  P1OUT = BIT3;
21
  P1IES = BIT3;
22
  P1IFG = 0;
23
  P1IE = BIT3;
24

25
  while(1)
26
  {
27
    if ((P1OUT & BIT0))
28
      P1OUT &= ~BIT0;
29
    else
30
      P1OUT |= BIT0;
31
  }
32
}
33

34

35
#pragma vector=PORT1_VECTOR
36
__interrupt void PORT1_ISR (void)
37
{
38
  P1IE = ~BIT3;
39
  if ((P1IN & BIT6))
40
  {
41
    P1OUT &= ~BIT6;
42
    P1IES |= BIT3;
43
  }
44
  else
45
  {
46
    P1OUT |= BIT6;
47
    P1IES &= ~BIT3;
48
  }
49
  P1IE = BIT3;
50
  P1IFG &= ~BIT3;
51
}


Komisch ist das wenn ich den Debugger starte das Programm erst nicht 
läuft und wenn ich dann auf Pause und dann wieder auf Start klicke läuft 
es einwandfrei
#2859948
Lesenswert?

Abschnitt 1.3 in der Beschreibung:
1.3 Revisions
The first production revision of the LaunchPad in 2010 was 1.3. In 2012 
the LaunchPad board revision changed from 1.4 to 1.5 to align with the 
new release of Value Line devices. The differences in the schematic and 
the kit contents are:
• Layout and Schematic:
– ...
– Pullup resistor R34 and capacitor C24 on P1.3 removed to reduce the 
current consumption

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