Forum: Mikrocontroller und Digitale Elektronik MSP430 PxIN funzt net


von BL (Gast)


Lesenswert?

Hallo zusammen.

Ich benutze den MSP430F2013.

Ich hab an einen von den Pins (1.3) einen Bewegungsmelder angeschlossen.
Wird ne Bewegung detektiert, springt der Sensorausgang von 3V auf 0V.

Ich hab nen einfaches Testprogrammle geschrieben:
(BIT1:  LED angeschlossen)

while (1)
{
  if (P1IN ^ BIT2)
    P1OUT |= BIT1;
  else
    P1OUT &= ~BIT1;

}

Da passiert aber gar nix. Led bleibt, ob Detektion oder nicht, immer 
aus.

Danach hab ich mal den SD16 ADC vorgeschalten, mit der Abfrage:
    if (SD16MEM0 < SD16_2V)
      ...
Nun funktioniert alles einwandfrei...


Hier meine Frage:  wieso kann ich nicht einfach über P1IN den 
Sensoroutput abfragen?


Vielen Dank für alle Hilfe!

von Coder (Gast)


Lesenswert?

1
P1IN ^ BIT2
Ist das ein copy&paste fehler? Wenn nein, ist es nicht das, was du 
möchtest.

von BL (Gast)


Lesenswert?

hmmm....   bin ich nu betriebsblind?


Sobald der Sensor was detektiert, ist der P1In pin auf 0.
Damit ergibt sich doch (0 ^ 1) = 1  und die LED wird sollte leuchten.

Oder nicht?

von Coder (Gast)


Lesenswert?

Ja. Schande über mich.
1
P1IN & BIT2
ist für dich angewöhnte schreibweise.

P1DIR richtig gesetzt, oder wird überschrieben, versehentlich oder 
alternative versehentlich Port-Funktion?

von BL (Gast)


Lesenswert?

//set LED
  P1DIR |= LED;

  //configure motion detector
  P1DIR &= ~MOTION_DETECTOR;   //direction
  P1REN &= ~MOTION_DETECTOR;   //disable resistor
  P1OUT &= ~MOTION_DETECTOR;   //set resistor to pulldown
//  P1IE  |= MOTION_DETECTOR;    //enable interrupt
  P1IES |= MOTION_DETECTOR;   //interrupt with high/low rising edge
  P1IFG &= ~MOTION_DETECTOR;   //clear interrupt flag
  __enable_interrupt();        //disable port1 mask


Sollte soweit alles richtig sein. Mit dem SD16 funktionerts ja.

von BL (Gast)


Lesenswert?

Hat niemand eine Idee? :)

von wil (Gast)


Lesenswert?

programmierst du mit CCS, dort kannst du ja mal debuggen und dir genau 
deie Register, eben auch die Pins alle ansehen, wenn du dort mim Oszi 3 
V misst sollte auch PxIN am entsprechenden Pin 1 gesetzt sein, ansonsten 
sind deien Einstellungen irgendwo falsch.

PxDIR = 0 passt als Eingang, danach würde ich nen pull down einschalten 
intern, man weiss ja nie ob nicht mal ungebremst 3 V anliegen, das gäb 
dann einen zu hohen Strom, Gefhr dass der Pin abraucht.

Deine Logikverknüpfung ist mir zu komplex :) ich habs lieber so einfach 
wie möglich, würd den auch einfach verunden dann sieht auch jeder beim 
ersten Blick was gemeint ist, und du kannst das in 1 Jahr auch noch 
nachvollziehen...

Das Debuggen sollte aber schon helfen.
Grüße

von Rangi J. (rangi)


Lesenswert?

Portmapping ausgeschaltet?

von 16 Bit (Gast)


Lesenswert?

BL schrieb:
> Hat niemand eine Idee? :)

Wie immer steckt der Fehler in dem Teil, der nicht gezeigt wird.

Also zeige das vollständige Programm und alle eigenen include Dateien. 
Dann wird dir sicherlich geholfen.

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.