このチャタリング解消法では、8ビットの処理とデジタル・フィルタリングをデジタル入力にフルに適用する。せいぜい20個のアセンブラ命令により、Atmel社の8ビットマイクロコントローラ「ATmega8」上で19マシン・サイクルで実行し、信頼できるチャタリング解消機能を提供する。このDesign ideasのウェブ版www.edn.com/edn050707dilにあるリスト1を参照されたい。
このソフトウエアは、1次再帰デジタル低域通過フィルタと、ソフトウエアによるシュミット・トリガー機能を用いて、図1のハードウエア回路を正確にシミュレーションする。一般に入力を処理しない1ビット・ソフトウエア方式のチャタリング解消策と対照的に、この回路のアルゴリズムは、過去の入力遷移を「記憶」していて、それがどのくらい前に起きたかによって、各遷移に「重み付け」を行うため効果的である。
さらに、メイン・プログラムによって、フィルタのスレッショルドを変更して、その実行時間つまり時定数を変更することができる。これにより、フィルタの設定を、外部条件に即応するように変えることができる。基本的な漸化アルゴリズムは、現在の出力値=(1/4)×入力値+(3/4)×前の出力値、つまり、YNEW=(1/4)×XNEW+(3/4)×YOLDで構成される。
レジスタのオーバフローと不安定性を避けるために、YOLDおよびXNEWの値は1より小さくなければならない。このXNEWおよびYOLDの値は、8ビット・マイクロプロセッサでは、256未満の値に翻訳される。その結果、フィルタへの入力((1/4)×XNEW)は0か63になる。
次いで、出力値YNEWをソフトウエア・シュミット・トリガーに印加する。このトリガーは、If YNEW>hi, and flag=0, then flag=1, and out=1. If YNEW< lo, and flag=1, then flag=0, and out=0.というアルゴリズムを用いている。
ハードウエアのシュミット・トリガー回路は通常、電源電圧の1/3と2/3の固定スレッショルドにしている。ソフトウエア方式ならば、このスレッショルドを広げて、フィルタの時定数を長くできる。動作時には、タイマー割り込みルーチンが4ms〜5msごとにチャタリング解消プログラムを実行する。時定数は割り込み周期に等しいので、15および240のスレッショルドを用いて、11個の割り込み、つまり、44ms〜55ms後にルーチンの出力が「トリガー」をかけるようにすれば、ほとんどのスイッチの接点チャタリングを適切に処理することができる。
メイン・フィルタの係数の変更は簡単で、フィルタ時定数を様々に設定できる。特に厄介な接点チャタリングには、次の漸化式を使える。
YNEW=(1/16)×XNEW+(15/16)×YOLD
時定数の16倍の時間後に、ソフトウエア・シュミット・ルーチンをトリガーする。このアルゴリズムはわずか8個のアセンブラ命令で構築することができるが、シュミット・トリガー・ルーチンでは12命令を要する。この2つを組み合わせると、ソフトウエア・シュミット・トリガーがレジスタのビット0をアップデートし、それをメイン・プログラムのループが連続してチェックして、接点の状態を確定することができる。
別の方法として、ソフトウエアによる割り込みを活性化し、接点状態の変化を知らせる信号を発生することもできる。Atmel社のAVRアーキテクチャ上では、外部割り込み入力として機能するビットを当該ポートに書き込む。