0% found this document useful (0 votes)
71 views13 pages

De Bounce A Switch

Mechanical switches bounce when pressed, causing multiple electrical transitions instead of a single clean input. This can cause microcontrollers to register incorrect presses. Switch debouncing filters out bounce through analog filtering, digital filtering, or software counting algorithms. Digital filtering mimics an analog filter and includes a software Schmitt trigger for a continuous smoothed output. Counting algorithms give a pulsed output suitable for single button presses. Outputs can be converted between continuous and pulsed forms.

Uploaded by

Duong Phan
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views13 pages

De Bounce A Switch

Mechanical switches bounce when pressed, causing multiple electrical transitions instead of a single clean input. This can cause microcontrollers to register incorrect presses. Switch debouncing filters out bounce through analog filtering, digital filtering, or software counting algorithms. Digital filtering mimics an analog filter and includes a software Schmitt trigger for a continuous smoothed output. Counting algorithms give a pulsed output suitable for single button presses. Outputs can be converted between continuous and pulsed forms.

Uploaded by

Duong Phan
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

Debouncing Switches

Mechanical switches are one of the most common interfaces to a uC. Switch inputs are asynchronous to the uC and are not electrically clean. Asynchronous inputs can be handled with a synchronizer (2 FF's). Inputs from a switch are electrically cleansed with a switch debouncer. What is switch bounce? - he non-ideal beha!ior of the contacts that creates multiple electrical transitions for a single user input.

Debouncing Switches
Switch bounce from a single depress"release of mega#$% pushbutton switches

Debouncing Switches
he problem is that the uC is usually fast enough to see all the transitions -uC acts on multiple transitions instead of a single one he oscilloscope traces showed bounce durations of #&-'&&us -our mega#$% uC runs at ($.)ns per instruction -a #&uS bounce *short+ is *#,#&-)"($.),#&--+ #(& instructions long. -a #&&uS bounce could be sampled as a !alid true or false #&&/s of times -results are incorrect beha!ior as seen by user Characteristics of switch bounce0 -nearly all switches do it -the duration of bouncing and the period of each bounce !aries -switches of e,actly the same type bounce differently -bounce differs depending on user force and speed -typical bounce fre1uency is .#-)ms 2ffecti!e switch debouncing can also re3ect 2MI and static charge effects -2MI can be periodic *so don4t sample synchronously.+ -false triggering on static electricity is li5e a single random input

Debouncing Switches
Solutions -Analog filtering -usually an 6C delay to filter out the rapid changes in switch output -tas5 is to choose 6 and C such that the input threshold is not crossed while bouncing is still occurring in in out 7th &7 out

&7

Debouncing Switches
Solutions -Cross coupled gates *MC#8&88+ -logic gates loc5 in one transition with a single-pole9 double-throw switch -both switch *:'.(-+ and chip *:&.'%+ are e,pensi!e -momentary clic5 switches *mega#$% board+ are *:&.#$+
7d d

7d d

Debouncing Switches
Solutions0 -Software -need to minimi;e C<= usage -independent of cloc5 speed -do not connect to interrupt pins9 only programmed I"> -multiple interrupts will tie up processor -don4t scan synchronously to noisy de!ices -identify initial switch closure 1uic5ly *#&&mS ma,+ - wo approaches *of many+ ris5y. -Count based *identify initial closure A?D wait A?D chec5 for same !alue+ >6 *identify initial closure A?D chec5 for same !alue for @ cycles+ -watch for safer. -C<= speed dependencies *use constant defines+ -loop e,ecution times *suggesting the use of timer interrupts+ -Digital filter based -mimics an analog filter with first-order recursi!e low pass filter -includes a software schmitt trigger -good 2MI filtering9 1uic5 response

Debouncing Switches
Solutions0 -Count based -from Aansel4s BAuide to DebouncingC -routine called from timer interrupt or delay loop -chec5 <ort D9 bit $9 pushbutton depression9 *bit will be grounded+ -returns B#4 only once per button push9 Bpulsed outputC -loo5s for a falling edge
int8_t debounce_switch() { static uint16_t state = 0; //holds present state state = (state << 1) | (! bit_is_clear(PIND, 2)) | 0xE000; if (state == 0xF000) return 1; return 0;

} first pass after reset0 second pass after reset0 after #$ false passes0 after D true passes0 after #$ true passes0 after many true passes0 after ) false passes0 value of state ###& &&&& &&&& &&&# ###& &&&& &&&& &&## #### #### #### #### #### #### #&&& &&&& #### &&&& &&&& &&&& ###& &&&& &&&& &&&& ###& &&&& &&&# #### return & return & return & return & return # return & return &

Debouncing Switches
Solutions0 -Digital filter based -acts li5e analog 6C filter followed by schmitt trigger -nearly continuous output li5e an analog circuit - &.$)E &,'F9 &.D)E&,C&9 #.& E &,FF
uint8_t output=0; //external variable indicating switch state

uint8_t debounce_switch2() { static uint8_t y_old=0, flag=0; uint8_t temp; //digital filter part y_old = x_new*0.25 + y_old*0.75 temp = (y_old >> 2); //this gives y_old/4 y_old = y_old temp; //do (y_old*0.75) by subtraction //if button is pushed, add 0.25 (3F) of new value (1.0) if(bit_is_clear(PIND, 2)){y_old = y_old + 0x3F;} //

//software schmitt trigger if((y_old > 0xF0)&&(flag==0)){flag=1; output=1;} if((y_old < 0x0F)&&(flag==1)){flag=0; output=0;} }

Debouncing Switches
Geha!ior of the digital filter debounce with schmitt trigger

=sing >thers Code


I 3ust showed you se!eral code snippets that you can use. Hou should understand how they wor5. Hou may *win59 win5+ probably be tested on them in the future. I offer other pieces of code in the coming wee5s. Iearn what they do before you use them. In general9 don4t use code from somewhere else without 5nowing how it wor5s. An e,ception would be a well used9 well tested library of functions *libc+.

Debouncing Switches
ypes of debouncer output
Sometimes we want a continuous output9 e.g.9 organ 5eyboard. >ther times we want a pulsed output9 e.g. increment hour alarm. he first counting algorithm *Gansel+ gi!es a pulsed output. he digital filter algorithm gi!es a continuous output.
button push pulsed output continuous output

Debouncing Switches
Con!erting between types of debouncer output
o get a pulsed output9 from a continuous debouncer0
output E # pushedE# output E &

pushed
always output E &

idle
pushedE&

waiting

Debouncing Switches
Con!erting between types of debouncer output
o get a continuous output9 from a pulsed output0

pushedErising edge output E & output E #

idle

pushed
pushedEfalling edge

?ote that this re1uires sensing rising and falling edges.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy