MSP430 Stoppuhr

#4094444
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
}
Gast #4094542
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren