MSP430 positive Flanke messen

OP #700108
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
Gast #700213
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?
OP #700238
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
#700250
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

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