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 CCS Technical Support

Measuring Pulse low time

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



Joined: 06 Feb 2011
Posts: 8
Location: Pakistan

View user's profile Send private message AIM Address

Measuring Pulse low time
PostPosted: Sat Dec 03, 2011 4:01 am     Reply with quote

Hi
I'm using CCS C's example file to measure pulse width( high time). I want to change this example program to measure pulse low time. Can you please help me how can I do that ?
Attached is the example file which measure high time.
Code:

#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)



long rise,fall,pulse_width;

#int_ccp2
void isr()
{
   rise = CCP_1;
   fall = CCP_2;

   pulse_width = fall - rise;     // CCP_1 is the time the pulse went high
}                                 // CCP_2 is the time the pulse went low
                                  // pulse_width/(clock/4) is the time

                                  // In order for this to work the ISR
                                  // overhead must be less than the
                                  // low time.  For this program the
                                  // overhead is 45 instructions.  The
                                  // low time must then be at least
                                  // 9 us.

void main()
{
   printf("\n\rHigh time (sampled every second):\n\r");
   setup_ccp1(CCP_CAPTURE_RE);    // Configure CCP1 to capture rise
   setup_ccp2(CCP_CAPTURE_FE);    // Configure CCP2 to capture fall
   setup_timer_1(T1_INTERNAL);    // Start timer 1

   enable_interrupts(INT_CCP2);   // Setup interrupt on falling edge
   enable_interrupts(GLOBAL);

   while(TRUE) {
      delay_ms(1000);
      printf("\r%lu us ", pulse_width/5 );
   }
}
Ttelmah



Joined: 11 Mar 2010
Posts: 19540

View user's profile Send private message

PostPosted: Sat Dec 03, 2011 5:56 am     Reply with quote

Just change these two lines:
Code:

   setup_ccp1(CCP_CAPTURE_RE);    // Configure CCP1 to capture rise
   setup_ccp2(CCP_CAPTURE_FE);    // Configure CCP2 to capture fall


To these:
Code:

   setup_ccp1(CCP_CAPTURE_FE);    // Configure CCP1 to capture rise
   setup_ccp2(CCP_CAPTURE_RE);    // Configure CCP2 to capture fall


These set which edges the code treats as the 'start', and 'stop' of the pulse. Swapping the edges as shown, means the 'rise' start point will now happen on the falling edge, and the 'stop' point on the rising edge.

Now if you wanted to be really 'elegant', and document this, then change all the mentions of 'rise' to 'start', and all mentions of 'fall' to 'stop', and change the comments on the lines to:

//Configure CCP1(start) to falling edge
//Configure CCP2(stop) to rising edge

Best Wishes
waqas_shafique



Joined: 06 Feb 2011
Posts: 8
Location: Pakistan

View user's profile Send private message AIM Address

PostPosted: Sat Dec 03, 2011 6:09 am     Reply with quote

Thanks a lot for your help , I already come to this point few mins ago and problem solved.
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