OpenStick ジョイスティック製作ツールキット

OpenStick基板キットはこちら

変更情報

はじめに

以前ラダーペダルフライトヨークを作成した際、 参考になる情報を求めてWeb上を探した事があります。 しかし昔のゲームポートを使った製作例はありましたがUSBをつかった例はあまり見当たりませんでした。
USBになってから、アマチュアの自作としては敷居が高くなってしまったのではないでしょうか。
そこでいくつかのソフトウェアで構成するジョイスティック製作用ツールキットを作成してみました。これらをまとめてOpenStickと名付ける事にします。

OpenStickでできること

ボタン一つから多数のアナログ軸まで、ジョイスティックのコントロールソフトウェアを、プログラム言語を駆使せずに作成する事ができます。

構成

マイコンについては、本サイトではおなじみのPIC18F2550を使用します。
このマイコン、これを書いている時点では秋月電子で350円程度です。
(最近はもっと安価な18F14K50がで出ており、いずれはこれも試したいと思いますが今のところ18F2550だけが対象です。)

メモリーマップ

OpenStickではPIC18F2550のFLASHメモリーを下図の様に使用します。
OSMemoryMapthum.png(10052 byte)

ブートローダは次の働きをします。

ファームウェア本体は次の働きをする事でジョイスティックとして動作します。

コンフィグデータには次の内容を記載しています。

FLASHメモリーへの書込み

ブートローダだけはPICライタを使用して書き込む必要があります。 一旦ブートローダを書込んでしまえば後はPICライタを使用する必要はなく、PC上のソフトウェア MybootOSを使用してファームウェアとコンフィグ領域を書き換える事ができます。
実際のところブートローダとファームウェアは殆ど変更する必要はありません。 なのでPICライタでブートローダを書込む際、ファームウェアも一気に書込んでしまう事もできるので、この方法を主体に説明します。

コンフィグファイルの作成

コンフィグファイルの実体はFLASHメモリの0x4000〜0x423F番地の内容をインテルHEX形式で表したテキストファイルです。 インテルHEX形式についてはこちらのサイトが詳しく説明されています。
コンフィグファイルを手軽に作成するツールがOpenStickConfigです。

ハードウェアについて

回路図

OSSchematic1.png(13583 byte)

入力端子の割当について。

OpenStickConfigは次のルールで入力端子を割り当てます。
  1. アナログ入力端子をIN1〜順に割り当てて行く。
  2. アナログ入力端子同士での順序は、X,Y,Z,Rx,Ry,Rz,Slider,Dial.Wheel,Throttle,Rudderの順です。
  3. 次のINxxにPOV(ハットスイッチ)を割り当てる。
  4. その次のINxxにボタンをを割り当てる。
この順序で割当てるので、入力信号が少ないとアナログ/デジタル兼用端子のみ使用する事になります。
なおIN13(RC2:PIC18F2550の13ピン)はモード切替スイッチを兼ねており、何らかのボタンスイッチを取付ける必要があります(ジョイスティックのボタンと兼用する事も可能)。

OpenStickConfigでは、ピン割り当ては「ShowPin」ボタンを押す事で表示します。 またHEXファイルを生成した場合や設定ファイルをロードした場合にも表示します。

ボタンやボリュームを取付けた回路図

例としてX,Y,Z軸とボタン8個で構成した場合の回路は次の様になります。
念のため、アナログ入力にはコンデンサを入れています。
XYZbutton8thum.png(18267 byte)

PIC18F2550の端子の割当について。

OpenStickConfigはPIC18F2550の端子を表の割当てで使用します。
IN1〜10がアナログ/デジタル兼用入力、IN11〜18はデジタル専用入力です。
PinTable1.png(15612 byte)

具体的な手順

1.必要なファイルをダウンロード

まず準備として以下のファイルをダウンロードします。
内容 ダウンロード先
OpenStickファームウェア OpenStick150722.zip
OpenStickConfig OpenStickConfig131203.zip
MybootOS MybootOS.zip
MybootOS(64bitOSも使用可能なバイナリ) MybootX86-bin-160725.zip
ブートローダつきファームウェア OpenStickBL150722.zip
次に千秋ゼミさんへのリンクを開き、 ページ中程にある「UBW開発ツールアーカイブ」から次のファイルをダウンロードします。
内容 ファイル名
ブートローダ UBW_B_HEX8.zip
UBW用inf(ドライバ) MCHP-USB.zip
MybootOSは上記サイトにあるMybootを私が改造したものです。
MybootはCode Offset設定は無視され、書込み開始番地が0x800固定なのですが、OpenStickでは0x4000番地から書込む必要がありました。 そこでCode Offsetが無視されず有効になる様に改造したものがMybootOSです。Code Offsetを0x800に設定しておけばMybootと同じ働きをします。

2016-07-26
MybootOS(64bitOS用)を追加しました。今までのMybootOSは64bitWindowsではエラーがでます。この64bit用はX86用としビルドしてあります。64bitOSで使うためにX86用としてビルドするという一見おかしなことになっている理由はこちらのブログに書きました。なおこれはバイナリのみです。もしソースが必要な場合はMybootOS.zipをダウンロードしてください。

2.ファームウェアつきブートローダの書込み

ブートローダを書きこむには PICkit3や、 JDMライター等のPICライタが必要です。
ブートローダは先程ダウンロードした「UBW_B_HEX8.zip」に含まれる「20M-18f2550.hex」というファイルですが、 「OpenStickBL.zip」を解凍して現れる「OpenStickBL.hex」にもブートローダを含んでいます。 よってこのファイルを書き込めばブートローダとファームウェア両方を書き込んだ事になります。
一旦ブートローダさえ書いてしまえばあとはライターは不要です。

PICライターの替りにArduinoを使う方法をブログにアップしました。
Arduino-UNOと9V電池があればPICライター不要です

3.OpenStickConfigを使用してコンフィグデータを作成する。

先にダウンロードしたOpenStickConfig.zipを解凍します。この中のパスOpenStickConfig\OpenStickConfig\bin\ReleaseにあるOpenStickConfig.exe を実行すると右のウィンドウが現れます。
OSConfig3.png(24611 byte) ※文字入力値をOpenStickConfig内ではあまり厳密にはチェックしていません。たとえばRevはBCDコードという決まりですが普通に16進が入力できてしまいます。

以上を入力し、MakeHEXボタンを押すと出力ファイル名を聞いてくるので適当に設定します。
ここで生成されるのがコンフィグファイル(インテルHEX形式)です。
なおSAVE、LOADボタンにより設定状態を保存/読込みができます。拡張子を「osc」としていますが、中身はテキストファイルです。

2016-08-10
持吉技研様より下記の情報を頂きました。
マイクロチップ社のマイコンを使用する場合、マイクロチップ社からVID,PIDのサブライセンスを提供頂ける様です。生産量が10000ユニットまで等の制約はありますが正規のVID,PIDを使用できます。
詳細はこちらをご参照ください。http://www.microchip.co.jp/support/faq_usb.html

4.コンフィグファイルの書込み

コンフィグファイルの書込みにはMybootOSを使用しますが、その準備としてPCにドライバをインストールする必要があります。
まずOpenStickのハードウェアをUSBケーブルでPCと接続します。次にMODEボタンを押しながらRESETボタンを押し、RESET→MODEの順で指を離します。 するとドライバーインストール画面になるので先にダウンロードした「MCHP-USB.zip」内のMCHP-USB\Driver\Release下にあるmchpusb.infを指定します。
(もしドライバーインストール画面にならない場合は手動でもインストールできると思います)
その後MybootOSを起動すると次のウィンドウが現れます。

MybootOS1Thum.png(67842 byte)
ここで「Open HEX」ボタンを押して、先にOpenStickConfigで作成したHEXファイルを選択します。
次に「Code Offset」のプルダウンメニューを0x4000に変更します(コンフィグファイルは0x4000に置く)。
その後「Write Verify」ボタンを押すと書込みを開始します。
もし「Write Verify」ボタンが押せない状態になっている場合はマイコンとPCの接続が上手く行っていません。 マイコン周辺回路の異常や、ブートローダの書込みミス、ケーブルやドライバの問題等を確認する必要があります。
書込みが完了するとウィンドウ右上に「Write Complete」の文字が現れます。 「Restart Target」ボタンを押すとマイコンが再起動し、ジョイスティックとして動作を開始します。



コンフィグファイルを書込むつもりで「Code Offset」が0x800のままライトしてしまうとファームウェアを壊してしまいます。 その場合でもPICライタのところまでやり直す必要はありません。 先にダウンロードしたOpenStick.zipを解凍し、その中のOpenStick.hexファイルを0x800から書込む事でファームウェアのみ復元できます。 (なおMybootOSがブート領域まで壊してしまう事はありません)。

5.コンフィグファイルの構造

コンフィグデータはPIC18F2550のフラッシュメモリ0x4000番地以降に読み込みます。 そしてコンフィグファイルはこれらをインテルHex形式で表したテキストファイルで、OpenStickConfigで生成するのが簡単なのですが、 手作業で修正する事による自由なピン配置に変更する事もできます。
ただしPIC18F2550の仕様による制約があり、IN1〜IN10にアナログとデジタルを混在する場合、アナログで指定するIN番号よりも小さいIN番号にデジタルを指定する事はできません。

0x4000からのコンフィグデータは次の配置になっています。
ConfigDATA.png(13041 byte)
この中で2バイトのデータは、PIC18F2550がリトルエンディアンである関係上、0x1234というデータならば先頭番地に0x34、次の番地に0x12が格納されます。 またテキストデータはUTF-16コードで表します。

なお0x4200番地からはピンコンフィグレーション設定を記述しています。 これはPIC18F2550のどの端子をアナログ入力として使い、どの端子をデジタル値入力として使うかを指定するもので、以下のコードで表します。
PinConfigCODE.png(5483 byte)
POVを除き2バイトで一組で、POVのみ5バイトで表します(デジタル入力を4本指定するため)。
ここに記載する順序がリポートディスクリプタに登場するデータ順に一致している必要があります。
特殊用途としてLEDのON/OFF指定があります。これはPIC18F2550の11ピンに接続するLEDを点けるか消すかを指定します。 ピンコンフィグは起動時に一度読むだけなので動作中にLEDを変化させるような機能はありません。
ピンコンフィグの最後には0xffを二つ書いて終了です。

コンフィグファイルの例を下に示します。
:020000040000FA
:104000000000FFFF05000000500000000403090449 ←ID類ほか
:10401000120348004F004900480049004F00440087 ┐
:104020004F00000000000000000000000000000041 │製造元文字列
:104030000000000000000000000000000000000080 │
:104040000000000000000000000000000000000070 ┘
:1040500012034A0059004F00530054004900430026 ┐
:104060004B00000000000000000000000000000005 │製品文字列
:104070000000000000000000000000000000000040 │
:104080000000000000000000000000000000000030 ┘
:1040900005010904A1010901A100150026FF007511 ┐
:1040A00008950809300931093209330934093509FD │リポートディスクリプタ
:1040B0003609378102150025073500463B01651496 │
:1040C000550075089501093981020509150025017A │
:1040D0001901290675019506810295028103C0C068 ┘
:1040E00000000000000000000000000000000000D0 ┐
:1040F00000000000000000000000000000000000C0 │
:1041000000000000000000000000000000000000AF │
:10411000000000000000000000000000000000009F │
:10412000000000000000000000000000000000008F │空白
:10413000000000000000000000000000000000007F │
:10414000000000000000000000000000000000006F │
:10415000000000000000000000000000000000005F │
:10416000000000000000000000000000000000004F │
:10417000000000000000000000000000000000003F │
:10418000000000000000000000000000000000002F │
:10419000000000000000000000000000000000001F │
:1041A000000000000000000000000000000000000F │
:1041B00000000000000000000000000000000000FF │
:1041C00000000000000000000000000000000000EF │
:1041D00000000000000000000000000000000000DF │
:1041E00000000000000000000000000000000000CF │
:1041F00000000000000000000000000000000000BF ┘
:10420000FE01020102020203020402050206020785 ┐
:10421000020803090A0B0C000D000E000F0010002D │ピンコンフィグ
:10422000110012FFFF00000000000000000000006D ┘
:10423000000000000000000000000000000000007E
:00000001FF

Created by ez-HTML
トップページへ
ほいほい堂本舗