Jinzpaul4u
Full Member level 4
- Joined
- Feb 1, 2012
- Messages
- 231
- Helped
- 59
- Reputation
- 118
- Reaction score
- 60
- Trophy points
- 1,328
- Location
- India
- Activity points
- 2,822
Hello there,
I'm using the dsPIC33fj256gp710 MCU to obtain the pulse width of a PWM generator using Input Capture module(rising and falling edge of the pulse).
The program works fine, and I can obtain a time period. However, I need to do some further calculations with the period value, and I don't really know how to convert the obtained value into a number that can be used in regular math functions. The time period I normally get is 960ms (I've connected an oscilloscope to the circuit as well to get this value).
mean while I am using timer counter register to check time period.The essential portions of the code are shown below (with comments):
Here I am getting both timeperiod1 and timeperiod2 are equal. that is=18192
based on timer Period calculation
could someone tell me how I could achieve this or what I am doing wrong in the code I have?
This may seem really basic, but I'm quite inexperienced and could really use some help in this situation.
I'm using the dsPIC33fj256gp710 MCU to obtain the pulse width of a PWM generator using Input Capture module(rising and falling edge of the pulse).
The program works fine, and I can obtain a time period. However, I need to do some further calculations with the period value, and I don't really know how to convert the obtained value into a number that can be used in regular math functions. The time period I normally get is 960ms (I've connected an oscilloscope to the circuit as well to get this value).
mean while I am using timer counter register to check time period.The essential portions of the code are shown below (with comments):
HTML:
unsigned int timeperiod1=0;
unsigned int timeperiod2=0;
void __attribute__((__interrupt__)) _IC1Interrupt(void)
{
unsigned int t1,t2;
if(PORTDbits.RD8) // rising edge of the pulse
{ timePeriod1=0;
TMR2=0;// timer counter become reseted
t1=IC1BUF; // present time period value
T2CONbits.TON = 1;// Start Timer
}
else if(!PORTDbits.RD8)// falling edge of the pulse
{
T2CONbits.TON = 0;// Stop Timer
timeperiod1=TMR2; // time period calculation based on timer
t2=IC1BUF; // updated value
timeperiod2=t2-t1; // time period calculation based on inputcapture
}
}
Here I am getting both timeperiod1 and timeperiod2 are equal. that is=18192
based on timer Period calculation
HTML:
Fosc=80MHz // using PLL
Fcy =Fosc/4=20MHz // timer frequency
Tcy =1/Fcy= 50ns // timer period
prescaler=1:1
TMR1 increments (increases by 1) every 1 x Tcy seconds =50ns.
Total time period is =18192 * 50n=0.9096ms
but actual time period in osciloscope is=960ms.
could someone tell me how I could achieve this or what I am doing wrong in the code I have?
This may seem really basic, but I'm quite inexperienced and could really use some help in this situation.
Last edited: