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!
1 | P1IN ^ BIT2 |
Ist das ein copy&paste fehler? Wenn nein, ist es nicht das, was du möchtest.
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?
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?
//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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.