www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenz mit MSP430 messen


Autor: Daniel Schneeweis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel Schneeweis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Kann mir da wirklich keiner helfen?? Es muss doch ein paar Leute geben,
die sich mit dem MSP gut auskennen oder??

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast die verschiedenen Lösungen doch oben schon genannt.
Bei solchen Problemen findet man meist im Datenblatt Hilfe.

Autor: Daniel Schneeweis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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???

Autor: tenner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Daniel Schneeweis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MiGu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Renato B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.