AnsweredAssumed Answered

Measure Pulsewidth Input capture QG8

Question asked by Abhijit Jagtap on Sep 19, 2013
Latest reply on Sep 20, 2013 by Abhijit Jagtap

Hello

 

I am trying this seemingly effortless task, but am not able to get there.

 

I am measuring a pulse time of an input pulse on TPM Channel-1. Frequency is 50Hz.

Please see attached code snippets where i initialise the timer.

 

#define BusFrequency        8MHz

#define TIMER_START         0x4F      // bus clk,divide by 128

#define TIMER_OVERFLOW          0xFFFF //maximum

 

interrupt 6 void Timer1_Capture (void)

  {

       TPMC1SC = 0; //Clear interrupt   , ack interrupt   

       inputCycleTime[p] = TPMC1V;   //get value of TPMC1V at this edge

       p++;  // increment count for next edge capture

       if(p >= 1)

       {

         inputWidth = inputCycleTime[1]-inputCycleTime[0]; //determine duration

         p=0;

         TPMC1V  =0;

       }

    TPMC1SC = 0x44; // rising edge initiate

  }

 

void Timer1_init(void)

{

  // Timer1 period 

    TPMMOD = TIMER_OVERFLOW;

 

  TPMC1SC = 0x44; //i/p capture rising edge captures

                 //0x0c =both edges, 0x08 = falling edges

}


Now i run in all sorts of troubles with above code.I should be able to read 20ms of time = 1250 counts between both rising edges

but i get a varied value unaccounted for.

Can someone throw some light?


Thnks and Regards

Outcomes