更新: 2006年11月5日
作成: 2003年11月16日
パソコンのマウスは、おもしろそうな入力装置ながら、どのような仕組みになっているかがあまり知られていないため、電子工作のデバイスとして登場することはまれでした。
でも、インターネットで調べればいろいろわかります。PICマイコン「PIC16F628」を使って、PS/2マウスをつないで遊べるおもちゃ「マウステスター」をつくってみました。4行表示の液晶画面に、ひたすらマウスからの情報を表示して楽しむという代物です。
マウスやキーボードが用いているPS/2インターフェースは、シリアル方式で、クロックとデータの信号線を制御する方式で、詳しいことは、次のページに書いてあります(英語)。
このページから得られた情報をまとめると、こんな感じです。
このような装置を作った目的としては、一つはマウスをパソコン以外の機械につないで機能させてみたいという思いがあります。もう一つは、マウスがたくさんある場所で、故障の診断を簡単に行いたいというニーズにこたえることです。マウスがつながっているパソコンの電源を入れれば、機能を確かめるなどの、簡単なチェックはできるのですが、いざパソコンの調子が悪くなった時に、マウスが壊れているのか、それともパソコン本体が壊れているのかを判断するのは、簡単ではありません。マウスを別のパソコンのものと入れ替えて、再起動したりするのは面倒ですので、すぐにつないでチェックできる装置が望まれているところもあるかと思います。
このような回路図を考えてみました。
以前の回路図には間違いがありましたが、修正した結果、上記のようになりました。(c) 2003 Toshio Sugihara.
マウスを接続したのち、スイッチを入れると、マウスとの間で初期化処理が行われます。初期化が終わると表示がこのようになります。
この状態を「ノーマルモード」と言います。
2行めの「D=00」の部分は、マウスのIDを意味します。表示されるIDと、その意味は次のとおりです。
表示 | 意味 |
---|---|
00 | 通常のホイールのないマウス。ボタンは3つまで対応できる。 |
03 | ホイールがあるマウス。ボタンは3つまで。 |
04 | ホイールがあり、ボタンが5つまでのマウス。 |
マウスのIDごとに、通信に用いるプロトコルやデータの形式が、微妙に異なっています。
ちなみに、電源の切断はいつでもできます。スイッチを切るなり、アダプタを引き抜くなりしてだいじょうぶです。
マウスのX,Y,Z座標の動きや、ボタンの押され具合いをそのまま表示するモードです。
基板の下のほうにある「青」「黄」「赤」のボタンで、通常の操作を行います。
ほかにも、ボタンやスイッチやコネクタがあります。
この装置には、マウスの一般的な状況を表示するノーマルモード以外に、目的に合わせて以下のモードがあります。モードは、黄色いボタンで切り替えます。液晶画面の4行めに表示される「M:N」のような表示のうちの「N」が、現在のモードを意味しています。
記号 | モードの名前 |
---|---|
N | ノーマル |
L | 左ボタン |
R | 右ボタン |
C | 中ボタン |
4 | 4ボタン |
5 | 5ボタン |
X | X軸 |
Y | Y軸 |
Z | Z軸 |
マウスを引っこ抜いたりして、通信に異常が発生すると、エラーメッセージが表示され、LEDが赤に変わります。エラーの番号とその意味は、以下のようになっています。
エラー番号 | 意味 |
---|---|
81 | マウスへのデータ転送中にクロック信号を20msの間得られなかった。 |
82 | マウスへのデータ転送中に、クロックが停止した。 |
83 | マウスへのデータ転送中に、1ビット長のACKが得られなかった。 |
ff | 8ビット長のACKがマウスから得られなかった。または、マウスからのデータが本来送られてくるべき値ではなかった。 |
91 | マウスからのデータ読み取り中に、クロック信号を20msの間得られなかった。 |
92 | マウスからのデータ読み取り中に、クロックが停止した。 |
93 | マウスからのデータ読み取り中に、パリティーが合わなかった。 |
94 | マウスからのデータ読み取り中に、スタートビットかストップビットの値が正しくない。 |
ERRORの表示が出る場合は、ケーブルの接触不良などが考えられます。
パソコンのマウスを扱うだけあって、かなり複雑なプログラムになっています。主な構成要素としては、次の部分からなります。
アセンブラだけで、このようなプログラムを作ることは、かなりやっかいな話です。PICマイコンそのものは、わりあいと扱いやすい品物なので、がんばってなんとか作りました。
作成したプログラムのソースファイルは、次のとおりです。ソースを読んでみたり、実際にこの品物を作ってみたりと、いろいろお楽しみください。
このプログラムは、マイクロチップテクノロジー社の統合開発環境「MPLAB」のバージョン6系で使えます。WDTなどの設定については、ソースの先頭に書いてありますので参考にしてください。
現在のプログラムでは、マウスとの通信を1ビットずつ、というか波形の上がり下がりごとにプログラミングしています。シリアル通信ユニットを内蔵したマイコンもあるようですので、それを使えば少しは楽に作れるかもしれません。
今回紹介したおもちゃを作ってみてはいかがでしょうか。パソコンにつながなくても、マウスが機能することには、ちょっとした驚きと感動があります。
・・・と書いたところ、このページを読んで実際に作った方から、写真をいただきました。(2005年12月)
回路図とプログラムは、私が作ったのとほぼ同じようですが、見ためはだいぶ違うようなので、じっくり見てみましょう。
ホームページで、パソコン用のフリーソフトウエアを公開する趣味は、よくあります。一方で、ホームページに回路図とソースファイルを載せたときに、それを読んで本当に作る方がいるかや、実際に作ると、どんなふうになるのかは、ページを書いた私もこれまでよく分からなかったのですが、写真をみて、なるほど!と思いました。回路図は同じでも工夫の余地があるので、できあがりかたは人それぞれのようで、面白いです。
ちなみに、液晶画面によると、つながっているマウスは「デバイス0x03」の品物のようです。ホイールはあるけれど、4番と5番のボタンがないタイプです。
というわけで、お便りありがとうございました。みなさまも、よろしければぜひ、お便りください。
マウスを2つつないで対戦できるゲームとか、作ってみたいですよね。何か面白いゲームのアイデアがあったら、実際に作ってみませんか。
・・と書いたところ、このマウスインターフェースを応用して、マウスでブロック崩しのゲームが楽しめる装置を作った方から、お便りをいただきました。(2006年10月)
H8マイコンなどを使ってパソコンのディスプレイに画像を表示するシステムを作り、PICマイコンを用いたマウスインターフェースを追加して、ブロック崩しのゲームを遊べるようにしたそうです。
マウスとモニタがつながるなら、あとはキーボードがつながればパソコンみたいに楽しめそうです。
こちらが、画面表示とマウスインターフェースの基板です。
プリント基板の上に、部品が整然と乗っています。表面実装の部品がきれいにはんだづけされていたり、部品番号や記号がそれっぽく印刷されていたりする様子を見ると、市販の製品っぽい雰囲気がただよっています。
プリント基板を使うと、回路がとてもすっきりするようです。リード線は、1本しか見えません。
こちらの部分が、マウスとの通信に使っているPICマイコンの回路です。
マイコンには、PIC16F628の後継品種にあたるPIC16F628Aを使っているようです。セラミックの発振子なども見えます。
H8マイコンで全部の処理を行うのも一つの方法ですが、マウスなどとの通信処理では、専用のマイコンを割り当てたほうが、分かりやすいシステムになるそうです。
自分が作った回路やソフトがこのように、形を変えて遠くの街で機能している、ということは、とても興味深い限りです。プリント基板を作ると、さらに楽しみが広がっていくようです。
作った方による記事が、こちらのページにあります。
楽しいお便りを、ありがとうございました。本格的に拡張してみるのも、面白そうですね。
紹介した回路図やプログラムは、必ずしも正しいものとは限りません。間違いがあって、それがもとで火事になったりするかもしれません。このホームページは、お読みになる方の自己責任でご利用いただくことになっていますので、発生した不都合については、筆者は責任を負いかねます。ご自身の責任で、安全に気をつけて、電子工作を楽しみましょう。