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
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
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.
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); > }
1 | #include <msp430x20x2.h> |
2 | |
3 | void main (void) |
4 | {
|
5 | WDTCTL = WDTPW + WDTHOLD; |
6 | P1SEL = 0x00; |
7 | P1DIR |= 0x04; // P1.2 als Ausgang |
8 | P1REN |= 0x02; // Pull-R an P1.1 |
9 | P1OUT = 0x00; // Pull-Down |
10 | |
11 | while (1) |
12 | {
|
13 | if (P1IN & 0x02) // Wenn Taster nicht gedrueckt... |
14 | {
|
15 | P1OUT &= ~0x04; // LED aus |
16 | }
|
17 | else // ...sonst... |
18 | {
|
19 | P1OUT |= 0x04; // LED an |
20 | }
|
21 | }
|
22 | }
|
Gruß, Dennis
Sorry, jetzt hab ich gedrückt und nicht gedrückt vertauscht, habe sonst immer Taster gegen Masse - also genau andersrum!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.