じぶんキーボードPIC18F14K50のプログラムです。2016-05-07版にバグがあったため、2016-05-14版として更新しました。
プログラム概要
じぶんキーボードで使用しているPIC18F14K50のプログラムは、Microchip社がリリースしている「Microchip Libraries for Applications」の中に、キーボードのサンプルコードかありますので、それをベースにしています。
Microchip Libraries for Applicationsは、1年に1回程度更新されていて、2016年5月時点の最新版は2015-08-10版ですので、その中に含まれるサンプルコードをベースにしました。
場所は、mla ⇒ v2015_08_10 ⇒ apps ⇒ usb ⇒ device ⇒ hid_keyboard です。
プログラム
サンプルコードからの主な変更点は以下になります。なお、サンプルコードから変更した箇所には以下のコメントを追加していますので、検索すると変更点がわかります。
//
// Tool Labs
- usb_descriptors.c
じぶんキーボードでは、Macからキーの割り当てを変更できるようにしますので、このソースの中のデータの受信バッファを8バイトに変更しています。また、デバイスの名称を「My Keyboard」に変更しました。 - app_device_keyboard.c
これがメイン修正箇所です。イベントループ内で、スイッチ状態を確認、スイッチが押されていたらシフトキーの状態を見て、ホストに送るキーコードを選択、ホストにデータを送っています。また、ホストからのキー割り当てコマンドの処理を追加しています。 - buttons.c
ボタン処理を追加しています。
なお、プリント基板はLite版、Standard版、Full版を作り、若干ピンの使い方がことなますので、プロジェクトプロパティをLite Version、Standard Version、Full Version作成しました。
ホストからのキー割り当てフォーマット
現在は各キーの割り当ては1文字ずつにしていますが、将来的には複数文字を割り当てられるようにしたいと思いますので、キー割り当てフォーマットは以下のようにしました。昔作ったフォーマットからちょっと変更しています。
バイト位置 | 内容 |
---|---|
第1バイト | コマンド種類。キー設定は0x01としました。 |
第2バイト | スイッチ番号。設定するスイッチ番号をこのバイトで指定しますが、MSBに意味をもたせています。MSBが1の場合はシフトON、MSBが0の場合はシフトOFFです。 |
第3バイト | キーに割り当てられている文字数。当分の間は1文字指定なので1固定です。 |
第4バイト | このパケットでは何文字目を指定か。第1文字目は0で数える。1つのパケット(8バイト)で2文字指定可能なので、ここで指定した文字と次の文字のしていが可能。 |
第5バイト | 1文字目のキーコード |
第6バイト | 1文字目の修飾コード |
第7バイト | 2文字目のキーコード |
第8バイト | 2文字目の修飾コード |
という感じにしました。
ということで、これからMacの設定プログラムを作ります。相変わらずハマっているので、ちょっと時間かかりそうです。
プログラムダウンロード
MPLABXのプロジェクト丸ごとアップします。ウィルスチェック済みです。
なお、以前公開していました2016-05-07版はシフトキーを押した時の動作処理の実装漏れ&バグがありましたので、修正して2016-05-14版として更新しました。
https://github.com/tool-lab/JibunKeyboard-20160514
なお、注意点が2つあります。一つは、XC8コンパイラを使用しますが、Verison1.35以上でコンパイルした場合、EEPROMの書き込みが動作しません。この対策は、以下の記事に書きましたのでご参考にされてください。
PIC18系マイコンでEEPROM書込み・ADCなど周辺機能が動作しない時の解決方法
もう一つは、プリント基板の回路に合わせて、プロジェクトプロパティを複数作っていますので、適切なプロパティ選択が必要です。
とりあえず自分の環境ではWarningが出てきましたが、特に問題ない内容でしたのでそのままにしています。今のところ特に問題なく動作しています。