pic18hidkey

PIC18Fを使ったUSBキーボード変換器の作成


工事中

元ねた mcc18 usbserial


ダウンロード(仮)

現在のところ、

  • 不完全ですが、PS/2 Keyboard to USB 変換アダプタとして一応機能するようになっています。

元のサンプルにあった keyboard.c の動作内容は、以下のように、かなり投げ槍っぽいです。

  • sw3 (HardwareProfile.h 経由で各マイコンごとに定義されているポート) が押されたら、キー番号 key をホストPCに送信し、key を +1 する。
  • 変数 keyの初期値は4 で、40になったらまた4に戻す。

HID-Keyboardで使用されているHID Reportはどんなものなのか?

  • 1回あたり8バイトのデータ列になっている。
  • 先頭バイトは「GUI,ALT,SHIFT,CTRL」 キーの押された状態を4bitであらわしたもの(押されていれば1)
  • さらにその上位4bitは、キーボード右側にある、同名のシフト系キーの押された状態(並びは同じ)
  • 2バイト目は使用しない。
  • 3〜8バイト目は、押されているキーの固有番号が最高6個まで(同時押しに対応するため)詰め込まれて送信される。
  • 押されていない、あるいは空の箱には0がセットされる。
  • 各キーの固有番号についてはusb.orgのマニュアルを参照すること。

おまけ

  • ついでなので hid-mouse , hid-joy , hid-generic , hid-bootloader も用意しました。

ダウンロード(仮)

hidbootloaderに関しては、とりあえずビルドが通るようになっているだけで、メモリー配置等を修正していませんので HIDデバイスとしての動作はすると思いますがブートローダーとしての実用性はありません。


ApplicationLibrariesをMakefileでビルドするやりかた。

(例えば)ここのhidgeneric.zipを元にします。

  • hidgeneric.zipを展開すると、Makefile , リンカスクリプト , main.c , fuse*.h などは 配置済みなので、残りのファイルの取得方法を書きます。
  • (VerUp等で)必要なら、include/ , usb/ ディレクトリを元のApplicationLibrariesを展開した場所から コピーします。
    C:> xcopy /s AMYDRIVE:\ApplicationLibraries\Microchip\Include include
    C:> xcopy /s AMYDRIVE:\ApplicationLibraries\Microchip\USB     usb
    かなり不要なファイルもコピーされますので、あとで掃除します。
  • 不足ファイルや更新ファイルがない場合はコピー作業は不要です。
  • ApplicationLibraries\USBDevice-HID-CustomDemos\ など、それぞれのファームソースがある場所から、 usb_config.h とか mouse.cのような元ソースを拾ってきます。
  • main.cという名称だと、こちらのフレームワークのmain.cと被るので、適当にリネームします。
  • Makefileを編集して、ターゲット名(hexファイルのファイル名)と、必要なソースファイルのリストを書き換えます。
  • (例えば)mouse.c だったら、その中にある fuse設定をばっさりと削除します(ソースが見にくいので)
  • ついでに、main()関数もmain.cにすでに記述しているので削除します。
  • 割り込みベクターも特に何もしていなければ単に削除します。何かしているときはmain.c側に同じ変更を入れておきます。

だいたいこんな感じです。

  • 最初からMakefileを用意してくれていれば、苦労することはないのに・・・。







今後の課題

  • 6 keyまでのロールオーバーの処理
  • (PS/2コードで)E0が前置される拡張キー(のUSBコードへの変換)をちゃんとサポートする。
  • リピート間隔の設定を有効にする。
  • LEDインジケータを有効にする。
  • 18F14K50への対応。
  • 日本語キーボードへの対応。