Debounce algoritmi - Printable Version +- DIY Electronic projects (https://forum.yu3ma.net) +-- Forum: Mikrokontroleri (https://forum.yu3ma.net/forumdisplay.php?fid=52) +--- Forum: ARM (https://forum.yu3ma.net/forumdisplay.php?fid=54) +--- Thread: Debounce algoritmi (/showthread.php?tid=690) |
Debounce algoritmi - mikikg - 10-31-2014 Evo jedna fina kolekcija "debounce" algoritama tj programskih resenje/pristupa za izbegavanje "zvonjave" kontakata od prekidaca ili generalno kod ulaznih portova. http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/ Posto su danasnji mikrokontroleri sve brzi i vreme instrukcija sve krace, pojavljuje se problem da kada citate neki ulazni port koji su vezani na mehanicke prekidace, enkodere i slicno, vas program (recimo interapt rutina - ISR), moze da se "okine" uzastopno vise puta, npr 100-ak puta u sekundi a hteli ste samo da se to desi jednom kada je pritusnut taster. Tehnicki gledano kontakt nekog tastera ne moze da napravi savrsen signal koji pravi tranziciju sa 0>1 (ili obrnuto) vec tu ima "krckanje", "zvonjava" koja pravi probleme jer je programsko vreme citanja kontakta drasticno krace nego sto je potrebno jednom kontaktu vremena da se "smiri". U tim situacijama se koristi "debounce" tj vrsta zadrske/delay koja pravi programsko filtriranje (low-pass filter) i sprecava brzo uzastopno "okidanje" ISR rutine. Na gornjem linku ima nekoliko desetina razlicitih pristupa za resenje tog problema ali ja bih izdvojio (u prilogu) ovaj relativno prost i po tvrdnji autora prilicno robustan algoritam koji se zasniva po ponasanju integratora. Algoritam se prakticno ponasa kao da ste postavili mali kondenzator paralelno (prema GND) sa ulaznim portom (moze i to da upotrebite ako ne zelite programski to da radite ali sa programom mozete to fino da stelujete, u suprotnom bi morali da menjate i nadjete optimalnu vrednost za kapacitet kondenzatora). Code: real signal 0000111111110000000111111100000000011111111110000000000111111100000 |