赤外線線ゲームコントローラシステム「猫の手シリーズ」の紹介記事の中で、既存のコントローラにPICマイコンを組み込んでコードレスな送信機(猫の手3号a)を作る方法を記載しました。今回はオリジナルのワイヤレスジョイスティックを製作する方法をご紹介します。
本機のマイコンは16F1823で、Raspberry Piで書き込みが出来るものです。安価なPi ZeroをPICライターにできますので、製作の敷居は下がったと思います。
今回はMikasen.さんに製作と動作チェックをお願いしました。いつもご協力ありがとうございます。
Raspberry Pi PIC writer Raspberry Piでは pickleというアプリケーションを使ってPICマイコンにプログラムを書き込みます。ハードウエア的にはブレッドボードに上図のような回路を組み立ててRaspberry pi のGPIOに接続するだけです。画像は Raspberry Pi zero Wのものですが、他のラズパイでも同様に書き込みできます。
上記のライターはVpp電圧に+9Vを要求するPICのみ対応で、16F6XX等の旧世代のPICは書き込めません。PICのピンアサインが16F1823と異なる場合は配線の変更が必要です。
なお、PICには5V以下のVpp電圧で書き込みできる(Low-Voltage Programing mode :LVP )ものがありますが、Raspberry piのGPIO (3.3V)で直接書き込めるPICはかなり限定されるようです。公式サイトの対応表を参照すると、低電圧版のPIC(32MXや16LF1XXX等)以外はほとんどLVP 3.3Vに非対応のようです(2017.7現在)。
pickleのインストール
$ wget http://wiki.kewl.org/downloads/pickle-4.0f.tar.gz
$ tar zxf pickle-4.0f.tar.gz
$ cd pickle
$ make
$ sudo make install 書き込みソフト pickleのダウンロードとインストールは、Raspbianのterminal上で上記手順で行います。2017年7月現在のpickleのソースパッケージのversionは4.0fですが、配布サイトを確認して最新版をダウンロードしてください。
pickle の設定
$ cd ~/.pickle
$ nano config pickleをインストールすると、~/.pickleの中にconfigファイルが作成されます。terminal上で上記コマンドにてテキストエディタ nano が起動します。
config ファイルが見つからない場合 理由は判りませんが、ラズパイzeroでpickle 4.0f をインストールしたところ、~/.pickle/configファイルが生成されませんでした。そのような場合は下記コマンドでconfigファイルを新規作成し、設定内容を記述します。
$ mkdir ~/.pickle
$ cd ~/.pickle
$ nano configエディタ上で上記の通り記述します。Raspberry Pi2またはPi3の場合は、DEVICE=RPI2に書き換えてください。
打ち込み終わったら[Ctrl]+[X]キーを押下し、configファイルを保存してエディタを終了します。以下のconfigファイルの編集の項目は読み飛ばしてください。
configファイルの編集
DEVICE = RPI
#DEVICE = RPI2インストール時に生成された~/.pickle/config ファイルをエディタで編集する場合、まず上記の記述を探します。デフォルトでは ’RPI’が有効になっています。お使いの Raspberry Pi のバージョンの#を外し、無効化する方に#を付けてコメントアウトします。
Pi2やPi3の場合はDEVICE=RPI2の行の#を外し、DEVIDE=RPIの行に#を付ければOK。
# R-PI OR GPIO BIT-BANG (single PGD DATA I/O)
# = CHIPKIT PI =
# !MCLR/VPP - RPi-Connect 18
VPP=9
# PGM - RPi-Connect 12
PGM=22
# PGC CLOCK - RPi-Connect 16
PGC=10
# PGD DATA_I/O - RPi-Connect 20
PGD=11
# R-PI OR GPIO BIT-BANG (single PGD DATA I/O)
# = CHIPKIT PI =
# !MCLR/VPP - RPi-Connect 18
VPP=9
# PGM - RPi-Connect 12
PGM=-1
# PGC CLOCK - RPi-Connect 16
PGC=10
# PGD DATA_I/O - RPi-Connect 20
PGD=11引き続きGPIOピンの設定項目を探します。デフォルトで上段のようになっていますので、PGM=22 と記載されている箇所を PGM=-1 と書き換えればOKです。
その他はデフォルトのままでですが、一応上記太字のようにPICのVpp=GP9、CLOCK=GP10、DATA=GP11に接続する設定になっていることを確認してください。
編集が終わったら、[Ctrl]+[X]キーを押下し、configファイルを保存してエディタを終了します。
pickle のコマンド
・プログラム消去
$ p14 blank
・PIC ID表示
$ p14 id
・プログラム書き込み
$ p14 program [fiename.hex]
・プログラム ダンプリスト表示
$ p14 dump
・書き込み検証
$ p14 verify [filename.hex]pickeの実行ファイルはPICの仕様別に、p12 ,p14 ,p16 ... 等複数展開されます。今回の 16F1823 は 14-bit word なので p14 を使います。
ブレッドボードに作成したPICライターをラズパイに接続し、書き込みソフトp14をterminalから実行します。主なコマンドは上記の通りです。とりあえずid表示コマンドで正常にPICの情報が返ってきたらOK。そうでなければ配線や設定ファイルの見直しを。
HEXファイルの書き込み
$ p14 program FAMREM_1823_TX4.HEX 本機 猫の手3号a改のファームウエアは FAMREM_1823_TX4.HEX です。これをカレントディレクトリに置いた状態で上記コマンドでPICに書き込みます。正常にメッセージが返ってきて、p14 dumpやp14 verifyに正しく応答すれば書き込み成功。
実際の書き込み 実体図のようにPICライターをブレッドボードに組み立てた状態です。ここでは抵抗やコンデンサの足を切っていませんが、隣と接触しないように注意。 Raspberry Pi zero Wとの接続は、秋月のスルーホール用テストワイヤを使いました。ピンヘッダが実装されていないラズパイzeroから半田付けなしでGPIOを引き出せます。こちらもピンの突起が隣と接触しないように注意。
|
|
terminalから上記コマンドでHEXファイルのダウンロードとPICへの書き込み&チェックを行います。 |
|
|
|
コマンド実行の様子がこちら。正しく配線と設定ができていればこのような結果になります。 URL上にあるHEXファイルは直接wgetできますが、PCでコンパイルしたプログラムを書き込みたい場合はftpを使うと便利です。私はRaspbianにvsftpdをインストールしてWindows機からffftpで転送しています。ラズパイのIPアドレスは固定にしたほうが良いです。 また、RaspbianでSSHを有効にしておけば、PCからteratermでログインして書き込みコマンドを実行できます。ラズパイ側でWiFiとftpとSSHの設定ができていれば、電源を接続するだけでネットワークPICライターとして使えるわけです。 |
実体図 回路図通りにユニバーサル基板(秋月D基板)上に組み立てるとこうなります。ICソケットの向き、赤外線LEDの極性に注意してください。LEDはアノード(足が長い方)を1.3Ω抵抗側にします。
赤外線送信部
実際に組み立てた基板はこんな感じです。秋月電子のD基板を少し小さくカットしています。電源は2pのピンヘッダを介して電池BOXを接続します。スペーサーを介してジョイスティック内部に組み込むように作っています。
LED高さ 基板をケースにみ込んだ際に、赤外線LEDがケースから突出するように高さを調節してください。
|
本機をケース(タカチ PR-200G)に組み込んだ状態ですが、結構ギリギリな感じです。このケースのサイズは カタログ上 (W)200 (H)50 (D)135 となっています。 加工は穴開け箇所が多く、ボタン穴も大きいので結構大変だと思います。ワイヤーの接続にはファストン端子が使われていますが、これは100均のダイソーでも平型端子として売ってます。ワイヤーとの接続には圧着ペンチが必要です。 ちなみに画像のジョイスティックはセイミツ工業のLS-32-SC、ボタンは30φが PS-14-KN 、24φが PS-14-DN-Kです。 |
|
こちらの画像は背面から撮影しています。ワイヤレスなのでケーブルの代わりに赤外LEDが顔を出しています。左下の押しボタン(オルタネイト)が電源スイッチです。天面の黄色ボタンがSELECT、赤(小)がSTARTボタン。これらを使って猫の手受信機に設定コマンドを送信できます。 なお、Mikasen.さんのテストにより、初回にリリースした猫の手3号a送信機のファームウエアにバグの存在が確認されました。ゲームをプレイ中に稀に送信機が無反応になることがあるというものです。検証の結果、発生条件はPICがスリープに遷移する瞬間にスティック・ボタン入力のチャタリングが発生することと判明しました。 対策のため、猫の手3号aファームは操作無し→即スリープとする仕様をやめ、1分間の無操作状態が続いてからPICをスリープさせる仕様としました。若干電力消費は増えますが、問題ないレベルです。使用方法に変更はなく、どのスティック・ボタン操作でもPICは動作を再開しますので、ユーザーはPICがスリープ状態かどうかを意識する必要はありません。 |
総評 当然ですが、このジョイスティックを使うには専用受信機が必要です。送信機や製品版のファームウエアは非公開としていますので、MAD社より発売中の猫の手1号受信機または家電のケンちゃんさんで委託販売の受信機をお求めください。
元々はM.A.D.社から全シリーズリリース予定でしたが、MADさん多忙により新規基板の開発や生産が困難となったため、私自身で少量生産してショップに委託販売する方針としました(2018.2.7追記)
今時のゲーム機では当たり前のコードレスコントローラですが、MSXやFC以前のレトロ機では無線化はあまり進んでいないように思います。理由としては、操作遅延や通信の途絶の心配があるためと思いますが、猫の手システムの伝送遅延はおよそ10ms(0.6フレーム)程度であり、おそらく人間には知覚できないレベルです。一般家庭の室内での一人プレイであれば指向性や信号の干渉の心配もほとんどありません。
ちなみに今回こちらの画像のような配置でテストプレイしました。FC本体は上段の右スピーカーの上に設置しています。送受信機は明後日の方向を向いていますが支障なくプレイできています。このまま猫の手3号b(SFC型コードレスPAD)に持ち替えてコントローラをこねくり回しても途切れなく応答します。ペアリングの必要がないので、送信機の切り替えもスムーズです。
今回のPICマイコンを既成のジョイスティックやコントローラに組み込むこともできると思いますので、腕に覚えのある方は製作にチャレンジしてください。
この記事の内容につきまして全面的に協力をしてくださったMikasen.さんに感謝いたします。
MADさん製品化作業お疲れ様でした。新商品の展開にも期待しております
copyright (C) 2016 Niga