Forum: Mikrocontroller und Digitale Elektronik MSP430g2231 Digital I/O


von hans w. (bluschti)


Lesenswert?

Hallo,

ich arbeite zum ersten mal mit einem µC und habe dazu einige fragen zum 
Thema "Digital I/O":

1. Welche Register muss ich mit welchem Wert beschreiben damit ich an 
Prot 1.0 die rote LED leuchten lassen kann ?

2. Welche Register muss ich mit welchem Wert beschreiben damit ich an 
Port 1.6 die grüne LED leuchten lassen kann ?

3. Welche Register muss ich mit welchem Wert beschreiben damit ich den 
Wert des Taster an Port 1.3 einlesen lassen kann ?


Jetzt schon einmal vielen Dank für eure Antworten :)

von Roland H. (batchman)


Lesenswert?

P1OUT |= (1 << 0);

P1OUT |= (1 << 6);

P1DIR &= ~(1 << 3);
P1IN & (1 << 3)

Das kann eigentlich nur das Launchpad sein.

Der genannte Prozessor ist zwar im Launchpad dabei, aber für Einsteiger 
m. E. absolut nicht geeignet. Das liegt nicht am GPIO, sondern an der 
arg beschränkten sonstiger Peripherie (RAM, ein Timer, kein USART).

von Stefan (Gast)


Lesenswert?

Die Code-Beispiele von TI können für den Anfang ganz nützlich sein:
http://www.ti.com/litv/zip/slac463a

von Jörg S. (joerg-s)


Lesenswert?


von hans w. (bluschti)


Lesenswert?

Vielen Dank für die Antworten :)

Habe mit euren Information sehr viel anfangen können.

Anbei habe ich noch ein paar weitere fragen ;) :

Wie kann man einen Port als Eingang setzten ?

Wie schreibe ich eine IF Anwendung ? (z.B. S2 wird gerdückt dann soll 
LED grün leuchten)

von LuXXuS 9. (aichn)


Lesenswert?

Hast du dir mal die Beispiele von TI angeguckt? Da steht für den Start 
doch eigentlich alles drin, oder nicht?

hans wurst schrieb:
> Wie kann man einen Port als Eingang setzten ?

Alle Portpins sind ab Start als Eingang geschaltet. Ein gelöschtes Bit 
setzt einen Pin als Eingang.
1
P1DIR &= ~0x01; // P1.0 als Eingang

hans wurst schrieb:
> Wie schreibe ich eine IF Anwendung ? (z.B. S2 wird gerdückt dann soll
> LED grün leuchten)

Vorher musst du einen Pull-Up-Widerstand aktivieren, da der Taster nach 
Masse schaltet:
1
P1REN |= 0x08;
2
P1OUT |= 0x08;

Dann:
1
if( P1IN & 0x08 ) // Invertiert, da Pin 'low' wenn gedrueckt
2
{
3
  P1OUT &= ~0x01; // Weiß grad nicht, welche LED die gruene ist, sonst 0x40
4
}
5
else
6
{
7
  P1OUT |= 0x01;
8
}

Du solltest dir aber vielleicht besser Makros anlegen, wie z.B.
1
#define LED_GRUEN 0x01
2
#define LED_ROT   0x40
3
#define LED_PORT  P1OUT
4
5
...
6
...
7
8
LED_PORT |= LED_GRUEN;

Oder du definierst noch weiter:
1
#define LED_GRUEN_AN  (P1OUT |=  0x01)
2
#define LED_GRUEN_AUS (P1OUT &= ~0x01)

von hans w. (bluschti)


Lesenswert?

Hey dankeschön :)

Ich müsste noch wissen welche Register (mit Name, Funktion etc.) 
beschrieben werden ? Also mehr oder weniger eine einfache Erklärung bzw. 
definition damit man dass "leicht" versteht ;)

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.