NicoKeyboardファームウェアbeta版

NicoKeyboardのファームウェアのbeta版を作ってみました。
http://nicotak.com/keyboard/firm008beta.lzh

ファームウェアの書き換え例。ISPコネクタをハンダ付けしてます。

変更内容は

・全スイッチの同時押しをチェックするようにしました。今まではshift/alt/ctrlだけが同時押しに対応していました。これはソフトの上での話しで、本当に同時押しに対応させるにはダイオードつけてください。普通に使うかぎりでは妙な同時押しはしないので、ご利益はなさそうです。



・LED点灯用のポート(PD4)をシリアル送信に割り振りました(rs232c相当9600bps。データ8bit。パリティなし)。これはモード設定に関係なく常にポートから出力してます。論理は無通信時=Highです。何も考えずに他のマイコンに直結できるので便利になったと思います。
RS232Cモード時の出力ポート(PD1)は以前のままです(論理は無通信時=Lowです)。



チャタリング除去を入れてみました。
チャタリング除去は処理として難しいことではありません。「2度連続しないと採用しない」だけです。
チャタリングはバックアップ(1ループ前)のスイッチ状態とXORをするだけで検出できます。プログラムではその検出した値でスイッチをOFFにマスクしてます。

まともに動作チェックはしていないので、プログラムが分かる人だけお使いください。
良かったらデバッグもして欲しいんですが、、、、。


図がわかりにくかったので、書き直してみました。
もっとちゃんとしたチャタリング除去をする方法が下の3つです。まだプログラムには実装してません。
2ループ前のスイッチ状態のバックアップ値をマスクして、それをOR処理をしています。
やっぱりわかりにくくなってしまいました。

(11/29追記)

http://nicotak.com/keyboard/firm008beta.lzh
動作チェックしてみました。
ちょっとバグがあったので直しました。今度からLEDは232C出力と兼用にしたので、光りっぱなしです。まぶしいかも。
チャタリング除去の効果は、、、よくわかりません。
なんとなく良くなったような気がします。気のせいかもしれませんが。