Hallo Ich will eine Frequenz mit dem MSP430F149 messen. Klar das es funktioniert mit der Frequenz auf einen Interrupt und in der ISR nen Zähler hochzählen. Das lastet den Prozessor bei höhern zu messenden Frequenzen aber stark aus, weil er immer in die Routine springen muss. Nun meine Frage: Man kann ja mit dem Timer Zeiten messen. Also capture. Dort wird der Takt der gezählt wird intern erzeugt und das äussere Singal ist die "Torzeit". Nun würd ich aber gern die Torzeit intern und den takt von Extern anlegen. Geht das? Kann ich den Zählereingang von Timer A nach aussen auf einen Pin legen?? Hab schon in dem Userhandbuch und so geschaut, konnte aber nix finden
Hallo Kann mir da wirklich keiner helfen?? Es muss doch ein paar Leute geben, die sich mit dem MSP gut auskennen oder??
Du hast die verschiedenen Lösungen doch oben schon genannt. Bei solchen Problemen findet man meist im Datenblatt Hilfe.
Naja wie gesagt ich konnte im Datenblatt nichts finden, wie ich die externe Frequenz an meinen Zählereingang legen kann. Ich habe nur den Capturemode gefunden was ja gerade anderst herum ist. Warum kommt der Beitrag zwischendrin 3 mal???
moin, irgenwie begreife ich deine frage nicht. das zu messende signal legst du an einen capture-eingang. richtig konfiguriert wird z.b. bei jeder steigenden flanke am captureeingang der timer-wert in das register TACCRx (timerA) geschrieben. überträgt man diesen wert in der interruptroutine in einen puffer, kann die frequenz des signal aus dem aktuellen wert in TACCRx, dem gespeicherten wert des vorherigen interrupt und der timer-takt-frequenz leicht ausgerechnezt werden.
Hallo Also ich hab jetzt selber rausgefunden wie es geht. Ich möchte nicht das Eingangssignal auf den Capture Eingang legen, und praktisch die Periodendauer messen. Sondern ich möchte den Caputer von Timer B vorgeben und die Frequenz direkt in den Zähler laufen lassen (Messung der Anzahl der Highpegel in einem bestimmten Zeitintervall). Als Beispiel laufen in einer Sekunde 500 000 (kann sein, das der Zähler nicht mehr so viel kann) Zählimpulse in den Zähler beträgt die Frequenz 500 kHz. Dazu habe ich die Eingangsfrequenz auf INCLK gelegt. Und eine Verbindung von TB an TA0 extern gemacht. D.h. ich gebe mit Timer B (TB) die Torzeit vor. TA0 ist mein Capture eingang. so kann ich während ich die Frequenz messe (z.B. 1 s lang) andere Aufgaben mit dem µC erledigen. Natürlich ist das was ich messe, nur die Durchschnittsfrequenz in diesem Zeitraum.
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.
@ MiGu Genau dieses Problem, mit dem gleichzeitigen Auftreten von overflow und capture, habe ich vermutlich bei meinem Code auch! Wie hast du es gelöst? Hat sonst jemand eine Idee, wie man dies lösen könnte? Besten Dank im Voraus! Gruss Renato
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.