Read Input Pin MSP430

Gast #6883864
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
Gast #6884523
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
Gast #6885021
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;
Gast #6894220
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

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.