Forum: Mikrocontroller und Digitale Elektronik MSP430 positive Flanke messen


von Stephan P. (steph0815)


Lesenswert?

Also ich versuche eine positive Flanke mit einem MSP430x169 zu messen. 
Ich kann dazu nur den PORT1 benutzen. Dazu initialisiere ich den PORT1 
Interrupt, starte in diesen den TimerA, stelle die Flanke auf 
high-to-low transition und im nächsten Interrupt lese ich den Wert aus. 
Hierzu mein Quellcode:
1
//TimerA Interrupt
2
TACTL |= MC_2;      // start TIMERA
3
  
4
if (position_MANCODE == 1) 
5
{
6
  timer_MANCODE = CCR2;   // Get current timer value
7
  TACTL = MC_0;      // stop TIMERA
8
  P1IE &= ~PORT1_IE;    // PORT1 interrupt disable      
9
}
10
P1IES ^= PORT1_IES;      // set interrupt on low-to-high transition  
11
P1IFG &= ~PORT1_IF;    // clear interrupt flag 
12
++position_MANCODE;
13
14
15
16
// hauptschleife
17
P1IE |= PORT1_IE;    // PORT1 interrupt enable  
18
19
while(!(position_MANCODE==2));    
20
21
position_MANCODE = 0;
22
23
// Timerinit
24
TACTL = TASSEL_2 + TACLR;     // SMCLK, clear TAR
25
26
CCTL0 &= ~CCIE;               // CCR0 interrupt disable

Ich erhalte nun aber ein "willkürliches" Ergebnis. Das es nicht die 
beste Methode ist, weiß ich auch. Es sollte aber doch möglich sein ein 
kontinuierliches, ungefähres Ergebnis zu erhalten.
Für jeden Tipp bin ich dankbar
Mfg
Stephan

von Msp 4. (msp430_crew)


Lesenswert?

Was genau willst Du messen? Die Anstiegszeit der Flanke oder was 
beabsichtigst Du?

von Stephan P. (steph0815)


Angehängte Dateien:

Lesenswert?

Oh ok schlechte Beschreibung. Ich beabsichtige den High Pegel zu messen. 
D.h. die Zeit zwischen der steigenden und fallenden Flanke. Da dies 
nicht kontinuierlich ist und auch vom Low Pegel unterschiedlich, kommt 
eine Frequenzmessung nicht in Frage.

von Msp 4. (msp430_crew)


Lesenswert?

Benutze doch das Capture-Modul des MSP430F169!

von Ampfing (Gast)


Lesenswert?

Hallo Stephan,

1. setzt Du Dein Timer-Register nirgends zurueck -> Der Timer faengt 
immer bei unterschiedlichen Werten an zu zaehlen (ausser Du merkst Dir 
den Anfangswert und bildest die Differenz).
2. Solltest Du den Timer anhalten, bevor Du seinen Wert in timer_MANCODE 
'speicherst'
3. Wieso startest Du den TimerA in der ISR des Timers? (zumindest lese 
ich Deinen Codeabschnitt mal so)
4. Wo wird position_MANCODE denn zu 1 gesetzt?

von Stephan P. (steph0815)


Lesenswert?

@Ampfing

1. nein ich setze es nicht zurück. Wusste nicht das er immer an 
verschiedenen Stellen anfängt zu zählen. Wenn ich debugge dann bekomme 
ich die selben Werte, daher dachte ich das er wenn man ihn ausschaltet 
dann beginnt er von 0. Werde ich aber im Code ändern.

2. Ich habe es schon getestet mit stoppen bevor ich den Wert auslese. 
Macht keinen Unterschied. Sollte auch ok sein da ich mit den SMCLCK 
arbeite und ein synchrones auslesen stattfindet.

3. Timer starte ich im Interrupt da ich ja auch die steigende Flanke 
warte. Mit dieser starte ich die Messung und beende diese mit der 
fallenden Flanke. So ist die Theorie. Ansonsten müsste ich den Timer 
starten, steigende Flanke auslesen, fallende Flanke auslesen und 
Differenz berechnen. Ist ein Ansatz werd ich gleich testern.

4. In der Interrupt Routine mit
1
++position_MANCODE;

@MSP_crew

Capture Modul wäre dann auch Timer im continous mode dann auslesen und 
noch mal auslesen, richtig? Kann ich denn auch die Flanke ändern? Und 
welchen Pin muss ich dann nehmen wird mir nicht ganz klar aus dem 
Manual.

mfg

von Falk B. (falk)


Lesenswert?

@ Stephan Plaschke (steph0815)

>Capture Modul wäre dann auch Timer im continous mode dann auslesen und
>noch mal auslesen, richtig? Kann ich denn auch die Flanke ändern?

Ja + Ja.

> Und welchen Pin muss ich dann nehmen wird mir nicht ganz klar aus dem
>Manual.

Na den, an dem der ICP dranhängt. Datenblatt Seite 7, überall wo Capture 
steht.

MfG
Falk

von Stephan P. (steph0815)


Lesenswert?

So vielen Dank nach etwas probieren mit den richtigen Pins klappt es 
jetzt!

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.