Forum: Mikrocontroller und Digitale Elektronik Read Input Pin MSP430


von dev (Gast)


Lesenswert?

Hallo und guten Morgen,

ich habe das ein kleines Verständnisproblem was das Einlesen eines HIGH 
/ LOW Pegel an einem IO Pin am MSP430 betrifft.
1
#define IO_ENABLE_PORT              GPIO_PORT_P1
2
#define IO_ENABLE_PIN               GPIO_PIN5
3
#define IO_OUT                      GPIO_PIN3
4
5
//PIN1.3 Pull up Controller
6
GPIO_setAsInputPin(IO_ENABLE_PORT, IO_OUT);
7
P1REN |= BIT3;
8
P1OUT &= ~BIT3;

Muss der IO Pin wie im Codeausschnitt gezeigt bewusst auf einen Pegel 
gesetzt werden? => P1OUT &= ~BIT3

von wv (Gast)


Lesenswert?

Hallo dev,

hier wird nicht der Pegel geschaltet.
P1REN |= BIT3;  //schaltet den Pullup/Pulldown Widerstand ein
P1OUT &= ~BIT3; //schaltet den Widerstand auf GND -> Pulldown
P1OUT |=  BIT3; //würde den Widerstand auf VCC schalten -> Pullup

gelesen wird dann über P1IN:

result = P1IN & BIT3; //==0(false): Pin ist low; >0(true): Pin ist high
Gruß wv

von dev (Gast)


Lesenswert?

Hallo danke für deinen Post.

Für den Eingangspin soll der interne Pull-up Wiederstand benutzt werden.
Dann müsste dies beim initialieren so aussehen:

P1REN |= BIT3;  //schaltet den Pullup/Pulldown Widerstand ein
P1OUT |=  BIT3; //würde den Widerstand auf VCC schalten -> Pullup

Die oberen beiden Zeilen werden nur einmal ausgeführt.

Das EInlesen funktioniert dann so:

result = P1IN & BIT3;

von wv (Gast)


Lesenswert?

genau so isses
-wv

von Falk B. (falk)


Lesenswert?

Das P1REN haben aber nicht alle MSP430, oder?

von wv (Gast)


Lesenswert?

alle? weiß ich nicht, es gibt über 500 verschiedene Typen. Ich kenne so 
ca. 20 davon, die haben das Register jedenfalls alle.
--wv

von Falk B. (falk)


Lesenswert?

Im Dokument slau049f.pdf von TI (wer denkt sich SOLCHE Namen aus?) 
"MSP430x1xx Family" gibt es das nicht.

von dev (Gast)


Lesenswert?

Ich habe da noch möglicheriweise ein Problem mit dem EInlesen eines IO 
Pins.
Mit dem IO Pin so ein SIgnal eingelesen werden. Sobald der Pegel von 
HIGH nach LOW wechselt soll der Interrupt ausgelöst werden. Der IO Pin 
soll einen internen Pullup Wiederstand nutzen und auf Input High 
geschaltet sein. Mache ich da womöglich was falsch?
1
#define IO_ENABLE_PORT              GPIO_PORT_P1
2
#define IO_ENABLE_PIN               GPIO_PIN5
3
#define IO_OUT                      GPIO_PIN3
4
5
6
GPIO_setAsInputPin(IO_ENABLE_PORT, IO_OUT);
7
8
GPIO_enableInterrupt(IO_ENABLE_PORT, IO_OUT);
9
GPIO_interruptEdgeSelect(IO_ENABLE_PORT, IO_OUT, GPIO_HIGH_TO_LOW_TRANSITION);
10
GPIO_clearInterruptFlag(IO_ENABLE_PORT, IO_OUT);
11
P1REN |= BIT3;
12
P1OUT |= BIT3;
13
14
15
#pragma vector = PORT1_VECTOR
16
/*FUNCTION*/ __interrupt void requestLine_interrupt()
17
{        
18
    if(P1IFG & IO_OUT)
19
    {
20
        // increment counter
21
        GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN3);
22
    }
23
}

MSP430 genauer TYP: MSP430FR5949

von MSP (Gast)


Lesenswert?

dev schrieb:
> Mache ich da womöglich was falsch?

Vielleicht globales Interrupt Enable vergessen?

von Roland E. (roland0815)


Lesenswert?

Falk B. schrieb:
> Das P1REN haben aber nicht alle MSP430, oder?

Richtig.

von wv (Gast)


Lesenswert?

hallo dev,

springt er denn in die Interrupt-Routine rein? (Breakpoint in die 
Interrupt Routine setzen)
--wv

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
Noch kein Account? Hier anmelden.