Hallo alle zusammen,
habe heute mal wieder mit MSP430 und Capture rumgespielt. Leider läuft
die Messung nicht so stabil, wie ich's gern hätte. Hier der Code der
ISR:
--snip---
void TimerA1_Interrupt(void) __interrupt[TIMERA1_VECTOR]
{
unsigned int counter = TACCR2;
TACCTL2 &= ~COV;
switch(TAIV){
//----------------------------------------------------------
case 0x0A:{ // timer 2 overflow
//TACCTL2 |= CCIE;
if(!fCAP) Overflow++;
break;
}
case 0x04:{ // capture 2 interrupt
if(fCAP == 1){
LastValue = counter;
sum = fCAP = Overflow = 0;
}else{
//-- measurement has finished after 2000 cycles --
if(CountTC++ ==1999){ //199
TACTL &= ~MC1; // stop meas
TACCTL2 &= ~CM0; // --"--
//TACCTL2 &= ~CCIE;
sum = (65536-LastValue) + (Overflow*65536) + counter;
freq = 6e06 * 2000 / sum; //XTAL = 6e06 Hz
Det_MeasFin = true;
}
TACCTL2 |= CCIE;
}
break;
}
}
TACCTL2 &= ~COV;
}
Das Problem ist, dass ich mit dem Capture-Eingang eine Frequenz bis ca.
100kHz messen möchte. Der Capture-Timer soll frei laufen und über 200
(2000) einkommende Perioden den Quarztakt messen. Anschließend wird
berechnet. Das Pproblem könnte in dem gleichzeitigen Auftreten von
Overflow und Capture liegen, denn ich bekomme öfter unterschiedliche
Frequenzen mit leichten Abweichungen präsentiert.
Wer kann helfen oder hat ein Beispiel?? (PS: Capture soll hier NICHT nur
die Quarzimpulse über eine einkommende Periode des Capture messen,
sondern ein freilaufender Timer soll 200 oder 2000 Perioden aufnehmen
und dann erst stoppen.
Danke im voraus.