mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430f2012 LED mit Taster anschalten


Autor: m. S. (marek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich bin neu hir und probiere gerade mit dem MSP430f2012 einer LED und 
einen Taster herrum. Ich kriege die LED zum leuchten aber wenn ich das 
mittels des Tasters machen will geht das nicht.

Die LED ist an den P1.2 und Vss angeschlossen der Taster(Schlieser) ist 
an Vcc und P1.1 angeschlossen. Der C code den ich dafür geschrieben habe 
lautet wie folgt.

#include <msp430x20x2.h>

int main()
{

  WDTCTL = WDTPW + WDTHOLD;
  P1DIR&=0x00;
  P1DIR|=0x04;          //P1.2 Ausgang rest Eingang
  P1OUT&=0x00;    //Ausgänge auf 0
  P1IN&=0x00;    //Eingänge auf 0
  P1SEL&=0x00;   //I/O funktion festgelegt

  if((P1IN && 0x02)==1)
  {P1OUT=0x04;}
        // else{P1OUT=0x04;}  // nur kontrolle ob die if schleife funst 
while(1);
}

Das problem welches ich habe ist dieses das ich nicht weis wiso meine 
schleife nicht funktioniert. Was muß ich ändern das es geht. Soll mann 
das mit interrupts machen wenn ja wie. Danke schon mal für eure hilfe 
und nen schönen Tag.

mfg

Marek

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marek S. schrieb:
> if((P1IN && 0x02)==1)
>   {P1OUT=0x04;}
>         // else{P1OUT=0x04;}  // nur kontrolle ob die if schleife funst
> while(1);

1. If schleifen gibt es nicht !

2. Dein Eingang wird nur einmal abgefragt danach nie wieder.
   Die ganze Abfrage musst du in der Whileschleife machen.

3. Du sagst das dein Taster gegen + schaltet ich hoffe du hast da aber 
auch ein Pull Down Widerstand gegen GND angeschlossen.

4. Deine Pin Maske darfst du nicht mit dem logischen Und machen sondern 
mit dem binaeren Und . ALso anstatt && muss dort ein & stehen.

5. Wer soll die LED wieder ausmachen ? Da must in else Zweig noche ein
P1OUT &= ~0x04  stehen.

Gruss Helmi

Autor: Ronny T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yep, ein Pulldown würde sich sehr gut machen. Den bekommst Du bei den 
MSPF2x immer eingebaut mitgeliefert, man muss in nur aktivieren:
P1REN |= 2;
Ansonsten wäre die Zeile zum Abfragen des Status so sinnvoller: if((P1IN 
& 0x02) == 2) oder noch besser auf 0 vergleiche, da das Bit1 nicht 
gesetzt ist, wenn der Taster gedrückt ist.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marek S. schrieb:
> #include <msp430x20x2.h>
>
> int main()
> {
>
>   WDTCTL = WDTPW + WDTHOLD;
>   P1DIR&=0x00;
>   P1DIR|=0x04;          //P1.2 Ausgang rest Eingang
>   P1OUT&=0x00;    //Ausgänge auf 0
>   P1IN&=0x00;    //Eingänge auf 0
>   P1SEL&=0x00;   //I/O funktion festgelegt
>
>   if((P1IN && 0x02)==1)
>   {P1OUT=0x04;}
>         // else{P1OUT=0x04;}  // nur kontrolle ob die if schleife funst
> while(1);
> }
#include <msp430x20x2.h>

void main (void)
{
  WDTCTL = WDTPW + WDTHOLD;
  P1SEL  = 0x00;
  P1DIR |= 0x04; // P1.2 als Ausgang
  P1REN |= 0x02; // Pull-R an P1.1
  P1OUT  = 0x00; // Pull-Down

  while (1)
  {
    if (P1IN & 0x02)  // Wenn Taster nicht gedrueckt...
    {
      P1OUT &= ~0x04; // LED aus
    }
    else              // ...sonst...
    {
      P1OUT |= 0x04;  // LED an
    }
  }
}

Gruß, Dennis

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, jetzt hab ich gedrückt und nicht gedrückt vertauscht, habe sonst 
immer Taster gegen Masse - also genau andersrum!

Autor: m. S. (marek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für eure Hilfe. Das hat mir geholfen jetzt funktioniert es 
wie es soll. Bei weiteren Fragen die ich sicher noch haben werde kommt 
dann ein neuer eintrag wenn ich nichts finden solte. Bis denn und noch 
mals danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.