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

button debounce not working

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



Joined: 02 Aug 2013
Posts: 13

View user's profile Send private message

button debounce not working
PostPosted: Fri Aug 02, 2013 12:43 pm     Reply with quote

hey guys ...
i have been trying this code for debouncing button but its not working ....
///////////////////////////////////////////////////////////////////////////////////

#include <16f684.h>
#fuses NOWDT,NOMCLR
#use delay(clock=400000)
int i;
const int twentyms =1150;
main()
{ while(1)
i=0;
while(i<twenty
{ if(input(PIN_A0)==0)
{ i=0;
}
else
{ i=i+1;
}

i=0;
while(i<twentyms)
if(input(PIN_A0)==0)
i=0;
else
i=i+1;
output_toggle(PIN_C0);
}
}
////////////////////////////////////////////////////////////////////////////////
can anybody help me to correct this code...
may god bless you....
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Aug 02, 2013 1:00 pm     Reply with quote

Your program isn't even compilable. You have missing parentheses.
It's not worth working on. Instead, look at the links in this post.
It has links to several programs for debouncing switches or buttons:
http://www.ccsinfo.com/forum/viewtopic.php?t=42285
nerdnicky



Joined: 02 Aug 2013
Posts: 13

View user's profile Send private message

PostPosted: Fri Aug 02, 2013 1:50 pm     Reply with quote

a million Thanks sir...

i used your code for the processor 16f684 its working but...

i am a little confused about the behavior of output_toggle()
function ...my button is active-low and uses a pullup...
the first time i press the button the led lights up and remains on ..next time when i press the button it switches off... is the same behavior expected of the functon output_toggle()......please help me out....

Code:


#include <16F684.H>
#fuses  NOWDT, NOPROTECT
#use delay(clock = 4000000)
#define BUTTON_PIN  PIN_A1   // This pin must have a pull-up.
#define DEBOUNCE_PERIOD_IN_MS  10
#define DEBOUNCE_COUNT  2

void my_function(void);
void wait_for_keypress(void);

//====================================
void main()
{

while(1)
  {
   wait_for_keypress();
   
   my_function();
  }

while(1);
}
//==================================

void my_function(void)
{ output_toggle(PIN_C0);

}


//-------------------------------
void wait_for_keypress(void)
{
char count;

// First, wait for the button to be released.   With the debounce
// values as given above, the button must be in the "up" state
// for two consecutive readings, spaced 10 ms apart.

count = 0;

while(1)
  {
   if(input(BUTTON_PIN) == 1)
      count++;
   else
      count = 0;
   
   if(count == DEBOUNCE_COUNT)
      break;

   delay_ms(DEBOUNCE_PERIOD_IN_MS);
  }

// Now that the button is up, wait until the user presses it.
// In order for the keypress to be considered valid, based
// on the debounce values listed at the beginning of the
// program, the button must be held down for two consecutive
// readings, spaced 10 ms apart.

count = 0;

while(1)
  {
   if(input(BUTTON_PIN) == 0)
      count++;
   else
      count = 0;
   
   if(count == DEBOUNCE_COUNT)
      break;

   delay_ms(DEBOUNCE_PERIOD_IN_MS);
  }

}
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Aug 02, 2013 2:06 pm     Reply with quote

With the output_toggle() function, every time you call it, the LED should
switch to the opposite state. If it was on, it will go off. If the led was off,
then it will turn on.
nerdnicky



Joined: 02 Aug 2013
Posts: 13

View user's profile Send private message

PostPosted: Fri Aug 02, 2013 2:30 pm     Reply with quote

sir.... i ..am very weak at coding ... sorry i disturbed you again..
i wanted to ask that whether the output_toggle().. automatically
( like blinking) toggles the output at a rate determined by the clock frequency...on pressing the button....or it makes the output behave like a 1_bit latch... when the button is pressed once ,a state is entered, and this state flips over when the button is pressed the next time...
temtronic



Joined: 01 Jul 2010
Posts: 9246
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Aug 02, 2013 3:07 pm     Reply with quote

As PCM_P said in his last post.

It does NOT 'blink' or 'flash'..
It is either solidly ON or solidly OFF.

'toggle' means to go to the alternate state from previous.

same as a 'toggle type flipflop'.

0-->1, 1-->0.

if it was a zero(off) it becomes a one(on), if it was a one(on) it becomes a zero(off).

hth
jay
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