Forum: Mikrocontroller und Digitale Elektronik MSP430 Anfänger: Probleme beim Lösen einer Aufgabe


von Stefanie B. (Gast)


Lesenswert?

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

von Rene S. (gigastulle)


Lesenswert?

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

von Andre S. (dg2mmt)


Lesenswert?

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.

von Stefanie B. (Gast)


Lesenswert?

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

von marokko (Gast)


Lesenswert?

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.

von ich&er (Gast)


Lesenswert?

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
}

von Stefanie B. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.