Hallo zusammen, ich kenne mich leider noch nicht so gut mit dem MSP430 aus und wollte euch daher fragen, ob ihr mir bei meinem folgenden Problem weiterhelfen könnt: Also ich benutze das Olimex Board mit dem MSP430 F149, Quarz 32kHz und habe folgende Beschaltung: Taster 1 an P1.0 Taster 2 an P1.1 Taster 3 an P1.2 LED an P2.0 (werden die Tater betätigt, liegt GND an die Pins, ansonsten Vcc) Die Funktion soll nun so sein: wird Taster1 (P1.0) betätigt, so soll ein Timer starten, der abfrägt, ob innerhalb von 1 Sekunde Taster2 (P1.1) betätigt wurde. Ist dies nicht der Fall, soll das System wieder zurückgesetzt werden. Wurde nun der Taster2 innerhalb von 1 Sekunde betätigt, so soll mit dem Betätigen von Taster3 eine Art Überwachung starten, die ständig prüft, ob Taster2 noch betätigt ist. Wird Taster2 nun losgelassen (also nicht mehr betätigt), so soll die LED an P2.0 angehen. Also ich habe jetzt schon einige Versuche hinter mir, aber leider ohne Erfolg. Daher wollte ich Euch Spezialisten mal fragen, ob ihr mir da etwas weiterhelfen könnt. P.S. Benutze den IAR C Compiler und soll eben alles in C programmiert werden. Gruß Steffie
Hast du die Taster per Software entprellt ??? Du must wenn das Programm erkannt hat das du den taster betätigt hast das signal ca 10ms später noch einmal abfragen um sicherzustellen das der taster gerade nicht prellt nur so wird das Tastersignal eindeutig verwenndbar Gruß Rene
Wie sehen denn deine Probleme aus? Liegt es an der Programmierung oder an der Hardware? Weißt du nicht wie du das Problem angehen sollst? Oder tut dein Programm einfach nur nicht das was du erwartest? Oder weißt du nicht wie du die Hardware ansprechen kannst? Was hast du bisher versucht und welchen Erfolg hast du erwartet? Bitte präzisiere deine Frage, dann kann dir sicher besser geholfen werden.
Hallo, schon mal vielen Dank für Eure Antworten. Das mit dem Abfragen der Taster werde ich auf jeden Fall mal berücksichtigen. Also mit dem Ansprechen der Hardware habe ich eigentlich keine Probleme - das habe ich jetzt soweit alles aufgebaut und getestet. Mir macht eher die Programmierung Schwierigkeiten - also wie ich es am besten lösen kann. Ich habe bereits versucht die ersten Abfragen so zu realisieren, aber durch die zyklische Abarbeitung der Befehle klappt dies irgendwie nicht so richtig. Außerdem weiß ich auch nicht wie ich die Überwachung realisieren kann, verwendet man da am besten eine ISR? .... if ((P1IN & 0x04) == 0) { tast_1 = 1; } else {tast_1 = 0;} if ((tast_1 == 1)) { do { if ((P1IN & 0x02) == 0) { tast_2 = 1; i_zeit1++; } else {tast_2 = 0;} i_zeit1++ } while (i_zeit1 < ZEIT1) } if ((tast_1 == 1) && (tast_2 == 1)) { tast12_bet = 1; } else if SYSTEM RESETTEN (welchen Befehl verwendet man ?) .... wie mache ich nur weiter? Ciao Steffie
hi stefanie, so wie ich verstanden habe, du musst doch ein timer benutzen, und ich sehe in dein programm kein timer? (Timer_A oder Timer_B). dann geht erstmal mit einer sekunde wartezeit. dafür brauchst du natürlich ein interrupt auslösen.
schau dir vielleicht als erstes mal dieses beispiel von TI an, dort wird ganz einfach begonnen einen timer zu nutzen. ein wenig wirst du dich also auf jeden fall damit beschäftigen müssen, wie der timer angesprochen werden will, ist aber eigentlich nicht weiter wild. zum thema schalter-stellung (in deinem fall an oder aus) kann ich dir sonst auch mal quellcode posten, hab den nur nicht auf arbeit, musst dich also noch ein wenig gedulden. aber wie gesagt, schau dir dieses beispiel an, da wird mittels timer in interrupt (ganz unten die passende ISR dazu) ausgelöst, die dann den zustand einer led(an oder aus) toggled...das sollte dich für den moment erstmal ein stück weiterbringgen. gruß //********************************************************************** ******** // MSP-FET430P440 Demo - Timer_A Toggle P5.1, CCR0 Contmode ISR, DCO SMCLK // // Description; Toggle P5.1 using using software and TA_0 ISR. Toggle rate is // set at 50000 DCO/SMCLK cycles. Default DCO frequency used for TACLK. // Durring the TA_0 ISR P5.1 is toggled and 50000 clock cycles are added to // CCR0. TA_0 ISR is triggered exactly 50000 cycles. CPU is normally off and // used only durring TA_ISR. // ACLK = n/a, MCLK = SMCLK = TACLK = Default DCO // // MSP430F449 // --------------- // /|\| XIN|- // | | | // --|RST XOUT|- // | | // | P5.1|-->LED // // M.Buccini // Texas Instruments, Inc // October 2003 // Built with IAR Embedded Workbench Version: 1.26B // January 2004 // Updated for IAR Embedded Workbench Version: 2.21B //********************************************************************** ******** #include <msp430x44x.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P5DIR = 0x02; // P5.1 output CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 50000; TACTL = TASSEL_2 + MC_2 + ID_3; // SMCLK, contmode, Teiler /8 //_BIS_SR(LPM0_bits + GIE); // Enter LowPoerMode=LPM0 w/ interrupt } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { P5OUT ^= 0x02; // Toggle P5.1 CCR0 += 50000; // Add Offset to CCR0 }
Hallo, vielen Dank für Eure antworten - ich bin jetzt schon bisserl weitergekommen. An ich&er: wäre echt super von dir, wenn du mir noch Code zum Thema Thema Schalterstellung posten könntest - schon mal vielen Dank! Gruß Steffie
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.