CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

how to measure PWM signal with only CCP1 capture mode?

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
mrYalamen



Joined: 13 Aug 2011
Posts: 9
Location: Viet Nam

View user's profile Send private message

how to measure PWM signal with only CCP1 capture mode?
PostPosted: Thu Sep 06, 2012 4:28 am     Reply with quote

Hello everybody!
I have some trouble to get ideas how to mesure duty and cycle form a PWM signal with only CCP1 capture mode.
I read "CCP tips n tricks" and they make me follow this steps:
+S1: config timer1, config CCP1 as capture mode rising edge, enable capture interrupt
+S2: When the interrupt is coming--> save t1 (CCP_1 register form timer1), reconfig Capture to Falling edge mode.
+S3: When the interrupt is coming--> save t2 (still form CCP_1 reg), continute reconfig Capture to Rising edge mode.
+S4: When the interrupt is coming--> save t3 (still form CCP_1 reg),
then repeat Step2 again.
Finally we got duty=t2-t1, cycle=t3-t1.

Do you have any idea to help me make it easy ? Because this process happen in uS (1kHz----20kHz may be).
I am very grateful if you help me!
Ttelmah



Joined: 11 Mar 2010
Posts: 19470

View user's profile Send private message

PostPosted: Thu Sep 06, 2012 8:26 am     Reply with quote

What clock rate are you going to run the PIC?.

At 20KHz, you _will_ run into problems with not having enough time to service the first interrupt, before the second edge, unless your PIC is at a very high clock speed.

Remember at 20KHz, even if 50/50 mark/space, the two edges will be just 25uSec apart. If instead the duty cycle was just 10% (say), then just 5uSec apart. Stage 2, involves perhaps 50 machine instructions, so you need to be running the processor at something over 10MIPS (40MHz), to have any hope.

If the test cycle only needs to be done occasionally, then it can be handled much faster, by _polling_ the interrupt flags, rather than using an interrupt handler. You could probably halve the processor speed needed.

Best Wishes
mrYalamen



Joined: 13 Aug 2011
Posts: 9
Location: Viet Nam

View user's profile Send private message

PostPosted: Thu Sep 06, 2012 9:48 am     Reply with quote

Thanks for your reply !
I am using PIC16F886 20MHz oscillator. In fact, i want to make my PIC become a H-bridge controller using ECCP (full bridge CCP1). So my PIC needs to measure duty cycle from Master controller using Capture mode from CCP2 . But you are right, this driver must be faster than PWM duty cycle. When the interrupt happens, too much cycle machine are needed to be process. Here is my idea code and it lost too much time.
Code:

#include "16F886.h"
#fuses HS,NOPROTECT,NOWDT,NOBROWNOUT
#use delay(clock=20000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=8)
unsigned int16 W,T,rise,fall;
unsigned int32 x=0;

#INT_CCP2
void cap_isr(void)
{
   if(x%2==0)
   {
      rise=CCP_2;
      setup_ccp2(CCP_CAPTURE_FE);
   }
   if(x%2!=0)
   {
      fall=CCP_2;
      setup_ccp2(CCP_CAPTURE_RE);
   }
   x++;
   W = fall - rise;
}

void main(void)
{
   setup_ccp2(CCP_CAPTURE_RE);
   setup_timer_1(T1_INTERNAL);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_CCP2);
   while(true)
   {   
        delay_ms(1000);
        printf("%lu\r",W);
   }
}
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group