Forum: Mikrocontroller und Digitale Elektronik MSP430 Programmierproblem :-(


von Tzonfistikis T. (tzonfistikis)


Lesenswert?

Guten Tag Leute ich brauche eure Hilfe denn ich bin am verzweifeln und
weiß nicht weiter.
(Ich Programmiere seit ca.1,5 Wochen bin halt noch ein noob)

Benutze Rowley Crossworks 1.4
MSP430F169
Olimex Evalution Board.

Also das einzige was ich bis gemacht habe und es hat funktioniert war
ein Lauflicht :-) mit 8 LEDS.
und einen Zähler.

Hier das Progr.

#include  <msp430x16x.h>

void pause(unsigned int mswert);

void main(void)
{

{
  WDTCTL = WDTPW + WDTHOLD;   // Stop WDT.
  BCSCTL1 &= ~XT2OFF;         // XT2= HF XTAL.
  P5DIR=0b11111111;


  P5SEL=0b00000000;


  for(;;)
  {


  P5OUT=0b00000001;
  pause(500);
  P5OUT=0b00000010;
  pause(500);
  P5OUT=0b00000100;
  pause(500);
  P5OUT=0b00001000;
  pause(500);
  P5OUT=0b00010000;
  pause(500);
  P5OUT=0b00100000;
  pause(500);
  P5OUT=0b01000000;
  pause(500);
  P5OUT=0b10000000;
  pause(500);
  }
}
}


void pause(unsigned int mswert)
{
unsigned int iZaehler;


    for (iZaehler=0; iZaehler<(26*mswert);iZaehler++)
    {
    }
}
______________________________________________________________


Habe folgendes Problem.
Ich habe versucht als nächstes mit einem Taster eine LED oder
verschiedene LEDS ein und auszuschalten.

Bei diesem Beispiel will ich das alle 8 LEDS AN und AUS geschaltet
werden.

Die LEDS sind alle an P5 (5.0 bis 5.7) angeschlossen.
der Taster an P4 (4.3)

ich habe folgendes Programm geschrieben.

#include  <msp430x16x.h>


void main(void)


{

  WDTCTL = WDTPW + WDTHOLD;   // Stop WDT.
  BCSCTL1 &= ~XT2OFF;         // XT2= HF XTAL.
  P5DIR=0b11111111;
  P5SEL=0b00000000;
  P4DIR=0b00000000;
  P4SEL=0b00000000;


   {

  for(;;)
{
  P5OUT=P4IN;
  }

}
   }


Problem es geht nur die 4LED an und aus!!!!!
Warscheinlich weil der Taster nur an 4.3 angschlossen ist??????
Wenn ich die übrigen Pins 4.0 bis 4.7 berühre gehen die anderen LEDs
auch an.
Was kann ich denn machen????

Danke für eure Hilfe schon im Voraus und wie gesagt bin halt noch n Noob
nehmt n bisschen Rücksicht.

:-D

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Was kann ich denn machen????
Statt
  P5OUT=P4IN;
schreibst du
  if (P4IN&0x8)  // P4.3
     P5OUT = 0xff;
  else
     P5OUT = 0;

Und kauf dir das Buch "Programmieren in C" von K&R   ;-)

von Tzonfistikis T. (tzonfistikis)


Lesenswert?

Lothar ich danke dir!!!!


es funktioniert :-)))
___________________________________


Erklärung
if (P4IN&0x8)   =====  Wenn P4IN und 0x8?   // 0x8 für die 8 Ausgänge??? 
Kannst du mir das Bitte genauer erklären was du hier gemacht hast??

P5OUT //Alle AN

else

P5OUT = 0 //Alle Aus

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Wenn P4IN und 0x8?
Port-Bit Nr 76543210
0x8 = binär 00001000

Ich habe also nur den Port 4 mit 00001000 verundet und wenn der P4.3 
gesetzt ist, bleibt 00001000 übrig. Wenn der Port 4.3 nicht gesetzt 
ist, bleibt 00000000 übrig.

Und die if-Abfrage in C sagt:
wenn der Wert in der if-Klammer ungleich Null ist, dann mache was.

Alles weitere steht im angesprochenen Buch ;-)

von MaXXX (Gast)


Lesenswert?

Hier noch ein paar wichtige tips zum tasten programmieren.

1) gucke dir im datenblatt was die register PxREN (x steht für den port 
1 oder 2 oder...) machen. Hier ist die erklärung warum die LEDs schon 
bei berührung der PINs angegangen sind.

2) schlagwort "Tastenentprellung" (dafür gibt es ein Code von peter 
hier, was sehr gut ist)

MFG

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.