Forum: Compiler & IDEs MSP430 Stoppuhr


von Benjamin H. (faza)


Lesenswert?

Hallo Leute,

ich hab versucht eine Stoppuhr mit dem MSP430 zu programmieren, leider 
vergeblich.

Ich habe vor, wenn ein bestimmter Pegel erreicht ist dass der Comparator 
A+ in die ISR springt und da den TACCR0 hochzählt.

Die LED wird erfolgreich eingeschaltet, bzw ausgeschaltet, nur zählt er 
die Variable i nicht hoch bzw. speichert er den aktuellen Wert von i 
nicht ins TACCR0 rein.

Hoffe jemand kann mir einen Denkanstoß dafür geben.


Danke im voraus.

1
#include <msp430g2553.h>
2
3
int i=3;      // weil unten in der Schleife schon 3 Taktzyklen vergangen sind, bis er angefangen hat 
4
              // zu zählen
5
6
#pragma vector = COMPARATORA_VECTOR
7
__interrupt void COMPA_ISR(void) 
8
{
9
  if (CACTL2 & CAOUT) 
10
  {
11
    CACTL1 |= CAIES;    // value high, so watch for
12
                        // falling edge
13
    P1OUT |= BIT6;      // if CAOUT set, set P1.6
14
    
15
    while(1)
16
    {
17
      i++;
18
      TACCR0 = i; 
19
    }
20
  }
21
  
22
  else 
23
  {
24
    CACTL1 &= ~CAIES;   // value low, so watch for
25
                        // rising edge
26
    P1OUT &= ~BIT6;     // else reset
27
  }  
28
} // COMPA_ISR
29
30
31
int main (void)
32
{
33
  
34
  
35
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
36
  
37
  BCSCTL1=CALBC1_1MHZ;                      // set DCO to 1MHz, set range
38
  DCOCTL=CALDCO_1MHZ;                // set DCO step+modulation
39
        
40
  P1DIR |= BIT6;                            // P1.6 output
41
42
//  CACTL1 |= CAEX;
43
  CACTL1 |= CARSEL + CAREF_1 + CAON + CAIE;         // 0.25 Vcc = -comp, on
44
  CACTL2 |= P2CA4;                           // P1.1/CA1 = +comp
45
  
46
  //---------------------- Timer einstellen ------------------------------
47
  TACTL |= TASSEL_1 + MC_1;  // CLK-source=32kHz, up-mode
48
  BCSCTL3 |= XCAP_3;    // CL=~12.5pF
49
  
50
  TACCR0 = 0;
51
  
52
  while(1);
53
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Benjamin Hase schrieb:
> while(1)
>     {
>       i++;
>       TACCR0 = i;
>     }

Das ist eine Endlosschleife. Was soll das?

von Easy (Gast)


Lesenswert?

Du möchtest, dass der Timer inkrementiert, solange der Analogweert über 
der Schwelle liegt?

Dann mache es genau wie bei der LED. Starte den Timerr in der Komparator 
ISR. Zählen macht er von allein. ;-)
Bei low hälst du ihn einfach an oder löscht ihn.

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.