レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

PS/2キーボードをUSBに変換するデバイスを作る

2021年01月13日 | 電子工作

前回、PC-E200キーボードをPS/2キーボードにしました。快適に使用できるものが出来ましたが、普段利用しているPS/2キーボードとの併用が出来ないので、これをUSBインターフェースにかえたいと思います。

ただしE200キーボードをUSBキーボードにするのではなく、E200はそのままでPS/2→USB変換を行うデバイスを作ってみようと考えました。以前から作成してみたいと思っていたのでちょうどいい機会ですし、他にPS/2キーボードやPS/2テンキーとかを所持しているので、PS/2インターフェースを持っていないraspberrypiとかAndroidなどにもつなげられたら便利そうだからです。
変換時のオーバーヘッドがどの程度になるのか見当つきませんが、前々回Digisparkを使ってあまりかんばしくない結果だったので、今回使用するマイコンはSparkFun ProMicro(互換機)にしてみます。

せっかくなのでE200だけでなく市販のPS/2キーボードをつないでも実用に耐えうるものにしたいところです。でも、Arduino標準のUSBキーボードライブラリを利用するのはちょっと問題があります。それは日本語キーボードに対応していないことと、CAPSやNumLockを押したときのキーボードLEDの点灯にも対応していないことです。
探せば良いUSBキーボードライブラリはたくさん見つかるのですが、上記の2つの問題を同時に解決できる使いやすいライブラリはなかなか見つかりません。

そこでArduino標準ライブラリを改変して、上記の問題を解決することにしました。日本語キーボード対応は難しくありませんが、LEDの点灯方法については見当もつかなかったのでこちらのサイトの情報をかなり参考にさせていただきました。
おかげでUSBインターフェースについてはなんとかなりそうです。PS/2インターフェースについてはこれまでも扱ってきたので大丈夫でしょう。

それでは製作に入ります。
ProMicroには前回と同様に秋月電子のミニDINコネクタピッチ変換キット(AE-MiniDIN-6)を取り付けました。


(使い古しの基板なのでProMicroの周りのパーツは無視してください)

接続端子は以下の通り。

PS/2 ⇔ ProMicro
1 DATA ⇔ 3
3 GND  ⇔ GND
4 VCC  ⇔ VCC
5 CLOCK⇔ 2

スケッチはこちら。

ProMicroPS2USB.ino

以下のファイルはスケッチと同じフォルダに入れておきます。

HID.h
HID.cpp
Keyboard.h
Keyboard.cpp

Ubuntuの環境で、このスケッチを書き込んだProMicroに市販のPS/2キーボードをつないでテストしてみましたが、特に遅延を感じること無くスムーズにキー入力できました。普通はPCにPS/2キーボードを接続するとPCから幾つか設定コマンドが送られますが、このスケッチではLEDの点灯コマンド以外のコマンドは送りません。それでもテストに使用したPS/2キーボードやPS/2テンキーから問題なくキー入力出来ました。

元々の目的であるPC-E200キーボードをつないだときの動作ですが、ターミナルやテキストエディタでテストしてみると全く問題なくキー入力できました。プロトコル変換時のオーバーヘッドも感じることなく、かなりスムーズに入力できます。そこでg800エミュレータで試してみたところ、こちらも何の問題もなく利用できました。もたつく感じもありません。



シューティングゲームでも自機がスムーズに動き、快適に遊ぶことが出来ました。




まさかここまでちゃんと動いてくれるとは意外でした。市販のPS/2→USB変換ケーブルも所持していますが、多少もたつく感じがあったので(PS/2マウスが同時接続できるためか?)どこまで実用的なものになるのか正直あまり期待はしていませんでしたが、作ってみるものですねぇ。

これならUSB機能のないAVRやPICでキーボードを好きなだけ作ってPC等につなげることが出来ます。特定のアプリケーションに特化したキーボードなんかも作れそうですし、ジョイスティックとかもキーボードに仕立てることができるので、PC-9801エミュレータなどで古いゲームをジョイスティックで遊ぶことも出来ますね。

ちょっと、PS/2キーボードに出来るものがないか探してみます。



最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
文字化け (ja2puw)
2021-07-13 23:10:25
ProMicroPS2USB.ino
使ってみたいのですが
当方のノートパソコンNECVersaPro Win10ではスケッチが文字化けして分りません
普通のテキストでお願いできますか
返信する
文字化けについて (naoki_sgc)
2021-07-14 22:07:12
ご面倒おかけして申し訳ありません。
ArduinoのスケッチはアーカイブするほどのサイズでもないのでArduino IDEのソースファイルをそのままアップしています。ソースファイルは文字コードがUTF-8で改行文字はLFのテキストファイルです。
Ubuntuで開発していますが、Windows 10のArduino IDEでもこのソースファイルをそのまま読み込んで使用できます。日本語の文字化けも起きません。
Arduino IDE以外のテキストエディタ等を使用するなら、テキストエンコードをUTF-8にすれば文字化けは起こらないと思います。必要なら改行文字もCRLFにしてください。

ブラウザでスケッチのリンクをクリックして表示すると漢字コードを誤認識して日本語が文字化けすることがありますが、エンコードをUnicodeに変えれば正しく表示されます。ちなみにスケッチをダウンロードするときは、リンクを右クリックして"名前を付けてリンク先を保存"といったメニューから保存するようにしてください。

試しにWindows 10のArduino IDE 1.8.15でこのブログからダウンロードしたスケッチを読み込んでみたところ、文字化けもなく普通にコンパイルできました。
返信する

コメントを投稿