This ends our series on contact bounce. We started out by demonstrating that buttons do indeed bounce. This initial post presented a series of images, collected from tests that measured button bouncing across multiple devices.

We then demonstrated how, using digital logic, extraneous bounces could be removed from a button’s signal.

We also showed how to measure how much and how often a button bounces. This will be useful to us later should we ever wish to tune the timer within our debouncer.

The final article discussed how to modify our debugging bus to get a button bouncing trace.

Unlike other debouncing developments, we’ve also discussed how to synchronize the button inputs along the way, and the consequences of metastability should the inputs not be synchronized. We’ve also presented a debouncer that will return the debounced data with minimal latency, vice the uncontrolled latency many other approaches share.

Further, unlike any other debouncing development I’ve seen, using the sample code provided you can see bouncing for yourself, or even test your own debouncing code.