フライトヨークにミクスチャー、プロップレバーを付けてみる。-3-

今回フライトヨークに追加したレバーのノブを塗ってみました。
「ABS 塗装」で検索するとプラモデル系サイトが多くヒットし、そこではABSに塗装すると割れるとか脆くなるとか、あまりよろしくない事が書かれています。ちょっと躊躇しましたが今回のはプラモの様な細かい部品ではないし、もし壊れてももう一度プリントすれば良いので取り敢えずそのままタミヤカラーを塗ってみました。今のところ大丈夫そうです。

YOKEレバー塗り

青色が濃すぎたかも

 

フライトヨークにミクスチャー、プロップレバーを付けてみる。-2-

「フライトヨークにミクスチャー、プロップレバーを付けてみる。」のつづきです。
数年前に作成したフライトヨークですが、先日からまたイジり始めています。

レバー3本をベースに固定しました。止めねじの位置をボリューム直下にしてしまったので順番を間違えると取付けられない構造になってしまいました。

FlightYokeRev2

レバーとボリュームが付いていると止めねじを回せない。台座固定後にボリュームを取付ける順序で固定します。。

3本とも付きました。ノブにはまだ塗装をしていません。
スロットルに対しミクスチャーとプロップのレバーが大きすぎるので、いずれ改善したいと思います。

FlightYokeRev2_1

レバー3本取付け。

 

今回制御基板も変更します。
以前はこんな基板でしたが・・・

FlightYokeRev2_2

以前の制御基板。

配線をスッキリさせる為、OpenStick基板キット作成時の試作版(≒失敗作)プリント基板に変更します。
ボリューム、スイッチへは配電盤経由で接続しました(結局あまりスッキリした感じがしませんね)。

FlightYokeRev2_3

制御基板/配電盤

 

これでハードウェアは一応完成です。次にOpenStickConfigでコンフィグデータを作成します。
’HID Usage Tables’にはスロットルは定義されていますがプロップやミクスチャーが見当たらなかったので、プロップレバーを’Rx’、ミクスチャーを’Ry’として設定しました。

ヨークRev2のOpenStick設定

ヨークRev2のOpenStick設定

これをPIC18F2550に書き込んでWindowsのプロパティで動作を確認。
ちゃんと’X回転’、’Y回転’が増えています。

FlightYokeRev2_4

Windowsのプロパティで動作を確認。

 

早速Microsoft FlightSimulatorXでフライトしてみます。

FlightYokeRev2_5

Mooney Bravoで熊本上空を飛行。

スロットル、プロップ、ミクスチャー共、レバーに連動して画面上のレバーも前後に動くので正常動作している事が判ります。
機体はプロップレバーも試せる’MooneyBravo’です。
しかし・・・なんか違いが判りません。
プロップレバーはMicrosoftFlightSimulatorXのMooneyBravoの操縦方法のページに書かれた通り、巡行なら吸気圧34インチ/回転数2400RPMに調整しています。これはスロットルとプロップレバーで調整できています。しかしミクスチャーはTITの温度がピークになる様に調整するとの事ですが、変化させてもTITが殆ど変わりません(ところでTITはタービン温度との事ですがMooneyBravoはレシプロエンジンですし、どこのタービンなのでしょう?ターボチャージャーのタービンでしょうか?)。

レバーを追加してはみたものの、もっと勉強が必要な様です。

フライトヨークにミクスチャー、プロップレバーを付けてみる。

久々にフライトヨークをいじります。

スロットルレバーは今までこんな感じの一本だけでした。

スロットルレバー1

スロットルレバー

スロットルレバー2

適度な摩擦感を出すためフェルトを貼っています。

本物には混合気を調整するミクスチャーレバーや、機種によってはプロペラのピッチをコントロールするプロップレバー等があるそうです。
http://www.cfijapan.com/study/html/to199/html-to199/189-5-1-CSP_Operate.htm

これらのレバー搭載は製作当初から予定していたのですがそのままになっていました。それを何故か今思い立って再開です。

まずレーザーでレバーの側板を切りだします。
今まではレバーの片側だけを支えていましたが時々緩んでレバーが下がってくる事があったので今度は両側から挟み込む様に変更します。なので4枚作成です。

YOKEレバー側板1

レバーの側板切りだし。

と思ったのですが、やっぱりスロットルレバーの側板も更新する事にしたので6枚作りました。

スロットルレバー側板2

6枚切りだし完了。

次にレバーを作ります。2mm厚ステンレス版(これも以前ハンズマンのガラクタ市でかった素材)からレバーを切りだします。そしてこれまたハンズマンのドリルストッパー6mmを溶接します。

レバー

レバー。今までのと新しいの二つ。
溶接が上達しません。

ドリルストッパーには六角レンチで回す3mmのイモネジが付いていますが、溶接の際に穴を潰してしまったので開け直して3mmナベネジに変更しました。

そして台座を作ります。
今までスロットルレバーで使っていたのと同じ金具が見つからなかったのでアルミアングルを切って3つ共作り直しました。

スロットル台座

スロットル台座

仮組みして並べてみます。

レバー仮組み

レバー仮組み

スロットルレバーのノブはまだ3Dプリンターを持っていなかった時代だったので「自由樹脂」というお湯で温めて成型する樹脂で作ってあります。
新しいレバーのノブはプリントパーツにしようと思いますが、色付けをどうしましょうかね。ミクスチャーは赤、プロップレバーは青と決まっている様なのでこれに従いたいのですが、普段使っているフィラメントはABSの白です。PLAなら赤と青のフィラメントを持っているのですが樹脂変更はノズルが詰まりやすくなるという話もあるのでやっぱりABSでプリントして塗装しようと思います(ABSの塗装が難しいという話も聞きますが)。

・・・つづく

OpenStickでフォースフィードバックができないか~2~

長い事ほったらかしていたフォースフィードバック(以下FF)の話です。

前回は振動機能付きゲームパッドを購入してディスクリプタ類を調べたけどイマイチわからないという話を書きました。
また並行してPCからFFデバイスを制御する方法も知っておく必要があると考え、MSDNのこのページにC#から制御する例があったので実行してみましたが、下図のエフェクト作成処理でエラーが出ます。
因みにビルド環境はVisualStudio2010Expressです。

FFC#errorr

なんかエラーが出る。

この原因は何でしょう? このまま数カ月止まっていました。

どうしようかなーと思ってたところ、MEDさんからフォースフィードバックどうなってんの?というリクエストもあり、重い腰を上げました。
とりあえず上のサンプルプログラムは一旦置いとく事とし、代わりにDirectXのSDKにFFConstというサンプルが付いていたので、こっちを試してみます。これはC++で書かれた例です。

しかしこのサンプルはビルドすると”afxres.h”が無いと言ってエラーになりました。
ググッてみると”afxres.h”はMFCの関係だそうで、VisualStudioのExpress版には含まれていないので代わりに”windows.h”を使えばいいらしいです。

次に”..\..\DXUT\Optional\directx.ico”が無いと言ってきます。とりあえずここは”.\directx.ico”に変更し、ビルドディレクトリにdirectx.icoをコピーしてきました。
これで無事実行でき、下の様なウィンドウが開きます。そして枠内をマウスでクリックすると確かにゲームパッドが振動しました。

FFconst Sample

DirectX SDK内のフォースフィードバック制御サンプル

 

ほんの少しだけ前進したのですが、OpenStickをFF化するにはまだまだハードルがあります。 エフェクトをデバイスに送る部分はどうやらドライバを書く必要がありそうです(Windowsのドライバなんて書いた事ありません)。

という事で道は遠いです、また「ぼちぼち堂本舗」になると思います。

OpenStick無線化実験~その2~

前回の実験ではTWE-Liteの標準アプリを用い、それなりに動作はしましたが微妙な遅延が気になりました。 そこで今回は最低限の遅延で動作する様、新たにTWE-Liteのアプリを作成してみました。

構想

TWE-Liteにアナログジョイスティックやボタンを接続し、その値を電波で飛ばします。それを受信側のTWE-LiteでUARTの信号に変換してPIC18F14K50に渡します。前回と違うのは受信側のTWE-LiteとPIC18F14K50の間をPWM→AD変換ではなくシリアルで直接伝える点で、無駄をなくした分反応が早くなる事を期待しています。

OpenStickAir-2-

無線には下のデータが流れます。またTWE-LiteとPICマイコン間の通信も全く同じフォーマットが流れます。先頭のR::に続く2桁の16進数はボタンの状態、続く3桁の16進数×4はアナログ軸の状態です。

R:01:3ff:3ff:3ff:3ff
R:00:3ff:3ff:3ff:3ff
R:01:040:0C0:3ff:3ff
R:01:040:0c0:3ff:3ff

 

TWE-Liteのプログラム

TWE-Liteは搭載されたマイコンのプログラムを書き換える事が出来るという特徴がありますが、このプログラムの作り方が結構分かりづらく、一度挫折した事があります。今回はDSAS開発室の部屋の記事を参考にさせて頂きました。このサイトはLチカから始まって基本的なところを説明してあり私でも理解できました。 但し今回の実験ではペアリングの設定処理は省略しており、チャンネルやアプリケーションIDはハードコーディングしています。

PIC18F14K50のプログラム

OensStickLiteのファームを改造しています。OpenStickLiteではマイコン内蔵のADCやGPIOの状態を取り込んでいましたが、これらをUART入力に変更します。
UARTからは上に記したフォーマットでデータを受け取り、これをジョイスティックの状態としてUSBに流します。

実行結果

前回の標準ファーム使用時よりだいぶ早くなっています。無線を使わないときと比べると微妙な遅延はありますが、まあこんなもんではないでしょうか。
今回は遅延確認だけを目的としているので公開するにはまだ色々と変更が必要です(ペアリングのあたりとか、コンフィグツールとか・・)。

BTLE化

並行してBluetooth化も検討していますが・・・なんか難しいです。先日から写真の本を読んでいますが、これでで基本的な知識を付けた上で公式サイトの資料を読む必要があり、ここでまた英語を頑張る必要があります。いつ完成するかわかりません。

BTLE本

BTLE本

これまたぼちぼちやっていこうと思います。
最近は「ぼちぼち」ばっかりです。「ほいほい堂本舗」ではなく「ぼちぼち堂本舗」にしようかと思います(ウソです)。

OpenStick無線化実験

MEDさんとの会話でOpenStickを無線化できないかという話題が出ました。そこでまずはTWE-Liteを使ったお手軽方式で 試してみました。TWE-Liteという無線モジュールは以前はTOCOS(東京コスモス電機)から出ていたのですが、今は独立したモノワイヤレスという会社になっています。

構想

TWE-Liteの出荷時に書き込まれている標準アプリでは、例えば2点間を接続したとすると、一方の4本のアナログ入力をそのまま相手の4本のアナログ出力(PWM)として、また4本のデジタル入力をそのまま相手のデジタル出力として伝える機能があります。これを利用してジョイスティックの可変抵抗やボタンとOpenStickとの間にTWE-Liteを挿入する感じでやってみます。

実験開始

OpenStickAir1

実験中・・・

ジャンクから外したジョイスティック(可変抵抗)及びボタンを左側のTWE-Liteにつなぎ、右側のTWE-LiteをPIC18F14K50に接続します。PIC18F14K50はOpenStickLiteによりジョイステックとして設定してあります。
要は普通にUSBジョイスティックを構成しておいて可変抵抗やボタンの配線にTWE-Liteを割り込ませただけです。
TWE-LiteのPWM周波数設定はデフォルトの1KHzから64KHzに変更しておきました。

なおTWE-Liteの動作電圧は3.3VなのでPIC18F14K50も3.3Vで動作させています。 これはソフト的には何も変えず単に電圧を変えただけです。
電源は写真には写っていませんが安定化電源から3.3Vを供給しています。TWE-Lite2個とPIC18F14K50は全て共通の電源で動作し信号だけが電波で飛んでいる形です。

 

結果

これでとりあえずは動作するのですが下の問題がありました。

  • 反応が遅い。
    目で見てわかる程度の遅延があります。フライトシミュレータで使う程度なら気になりませんがシューティングゲームの様な速い動きだと 影響が大きいと思われます。
  • アナログ軸の中心が大きくずれる。
    これはTWE-LiteのA/D変換はフルスケールが1.5V程度である為です(設定変更で1.8Vフルスケールにもできる様ですが大きな違いはなさそうなので試していません)。

中心位置のずれは可変抵抗に入れる電圧を落とせば問題ありませんが、反応が遅いのは用途によっては致命的です。 設定を色々といじくってみたのですが大きくは変わりませんでした。
まだ何か方法があるのかもしれませんが、TWE-Lite以外の方法も考えて見ようと思います。

 

ArduinoでPICマイコンに書込む~OpenStickLite(PIC18F14K50)編~

ジョイスティック自作用ツールキットOpenStickは元々PIC18F2550(又は2553)を採用していました。このマイコンは28pinで、DIPパッケージだと結構大きい部類になります。
そこで先日PIC18F14K50を使用したOpenStickLiteをβリリースしました。こちらは20pinなので入力ピン数は少なくなりますが、これでも大抵の用途には事足りると思っています。
価格もこちらの方が大幅に安くてすみます。

OpenStickもOpenStickLiteもUSBからプログラムを書き込む為のブートローダを使用しています。 電源投入時(またはリセット時)の条件設定によりブートローダが書き込みモードで立ち上がります。この状態で書き込みツール「MybootOS」を使うとUSBポート経由でプログラムを書き込める訳です。

この種の話題でいつも問題になるのがブートローダ自体はどうやって書き込むかという事です。 ブートローダでブートローダを書き込む事はできないので、通常はそのマイコン専用のライター(PICKit3など)を使用します。
しかし皆がライターを持っているわけではありません。 そこでArduinoを使ってPIC18F2550にブートローダを書き込む実験を過去に行い、問題なく書きこむ事ができました(下記を参照ください)。

今回はArduinoからPIC18F14K50にブートローダを書き込んでみます。これが可能になればOpenStickLiteを安価に使用できます。

まずここの資料でPIC18F14K50の書き込み仕様を調べます。 大体はPIC18F2550と同じですが微妙に違うところがあります。一番問題なのはPGD,PGC端子が耐圧3.3Vという記述です。 PIC18F2550の時はArduinoUNOを用いて5Vで駆動していました。特にPGDは双方向なのでレベル変換は面倒です。 よって今回は3.3V版ArduionoProMiniを用いることにします。
またスケッチには若干のWAITタイムの変更と書き込みイネーブルONのコードを追加しました。
スケッチ→PICWrite18F14K50.ino

書込み電圧は006Pの積層乾電池(9Vの四角いやつ)を用いる事にします。先の資料によると書込み電圧の上限は9Vという事なので、新品の電池だと定格を超える可能性がありダイオード一本で電圧を下げました(使い古した電池だとそのまま繋いで大丈夫です)。

回路

ArduinoProMiniはUSBシリアル変換回路を内蔵していないので、外部にFT232RLの変換回路を接続し、Arduino/PIC18F14K50に供給する3.3V電源もFT232RL内臓のレギュレータから取っています。
PIC18F14K50の電源-GND間のコンデンサは当初0.47μFを使いましたが、PIC18F14K50に電源を投入した瞬間にArduinoProMiniから反応が無くなる事がありました。恐らくFT232RLの3.3V出力が瞬間的にダウンする為と思われ0.22μF(実際には0.1μ×2本)に変更しました。 

PIC14K50WriteByArduinoProMiniSch

PIC18F14K50へArduinoProMiniで書き込む回路図。

参考までにUSBシリアル変換は次の回路です(最近の電子工作には何かと登場しますね。一家に一台FT232RLです)。
FT232RLは3.3Vのレギュレータを内蔵しており、これをVCCIO端子に入力する事で3.3Vレベルで使用できます。この回路ではスイッチを設けて5Vと3.3Vを切り替える様にしています。
但しレギュレータから取れるのは50mAまでなのであまり大きくはありません。

USBSerial

FT232RLによるUSBシリアルインターフェース

PIC18F14K50WriteByArduinoProMini

Arduino ProMiniで書き込み中。
横のFRISKケースはUSBシリアル変換です。

書込み手順

PIC18F2550の時に書いた内容とほぼ同じです。
※前回同様TeraTermの「貼り付けの行間遅延設定」を50mS程度にしておく必要があります(書込み時間待ちの為です)。

<PIC18F14K50にブートローダを書込む手順>

  1. まずPIC18F14K50の3.3V電源と9V電池は切り離しておく。
  2. Arduino IDEを立ち上げこのスケッチを書込む。
  3. TeraTermをシリアルモードにしてArduinoに接続する。
    シリアル設定:9600bps,8bit,パリティ無し,stop=1,フロー制御=none
    改行コードは送信・受信共にCRにする。
    また、「設定」→「その他設定」メニューの「コピーと貼り付け」タグを選び、「貼り付けの行間遅延」を50mS程度にしておく。
  4. 接続するとTeraTerm上に以下のメニューが表示される。
    r  <start address> <count>: read from PIC
    e : all erase
    w : write to PIC
    v : verify
  5. ここでPIC18F14K50に3.3V電源→9V電池の順で供給する。
  6. 必要に応じ’r’コマンドで現在書かれている内容を確認する。たとえば・・・
    r 0 0×100<CR>
    と入力すると、FLASHメモリの0番地から0FF番地の内容を表示する。
    消去済ならCODEエリア全ての内容がFFになっているはずである。
    (消去チェック機能はないので、どちらにしても次の消去コマンドを実行しておくべきです)
  7. 消去済みでない場合はeコマンドで消去する。
    ALL Erase <y/n>?と効いてくるのでyを入力する。
    このコマンドはチップ全体を消去する(一瞬で終わります)。
  8. ‘w’コマンドで書込む。w <cr>を入力すると’Send me intelhex text’と表示されるので、ここでIntelHEXファイルを送る。この際、上に書いた理由でコピペで貼り付ける方法で送る。 たとえばブートローダのHEXファイルである’Bootloader18F14K50.hex’をメモ帳等で開いて全域をコピーした後、Teratermの画面上に貼り付ける。
    (前に書いた様に「ファイル」→「ファイル転送」メニューからの送信だと取りこぼしが発生する)
  9. エラーなく書き込みが完了したら’v’コマンドでベリファイを行う。方法は’w’コマンドと同じで、v<cr>入力後IntelHEXテキストを貼付けるとFlashメモリを読出して比較する。  エラーが出なければ正常に書き込めた筈である。
  10. 9V電池→3.3V電源の順で切り離し、TeraTermの接続を切りArduinoのUSBケーブルを抜く。

やっぱりArduinoUNOでやってみる。

と、ここまでで書き込みが出来たのですが、やっぱり3.3V版Arduinoは少数派で手元にない場合もあると思われ、メジャーなArduino UNO等でも書けると何かと便利です。 この場合5Vで動作するArduinoと3.3Vで動作するPIC18F14K50の間をどう繋ぐかが問題です。ArduinoからPIC18F14K50へ一方的に入力するPGC信号は単に抵抗分割で問題ありません。一方PGD信号は双方向なのでまじめにレベル変換器を入れると結構面倒な事になります。しかし3.3VのHレベルはArduinoはHと認識してくれる筈と期待しPGDも単純抵抗分割で試してみました。

PIC14K50WriteByUNOsch

ArduinoUNOでPIC18F14K50に書き込んでみる回路図。

実験風景・・・

ArduinoUNOで書き込み

ArduinoUNOで書き込み。UNOは直接USBケーブルを繋げるのですっきりします。

特に問題なく書けました。これが手っ取り早いです。
気をよくしてFritzingでも回路を書いてみました。

PIC14K50WriteByUNO_ブレッドボード

Fritzingでも描いてみた。

 

各ファイル 

※PIC18F14K50用ブートローダは上記バイナリセットかソースのどちらにも収録しています。※言うまでもないとは思いますが、同様の実験をされて万一デバイスが壊れたりしても責任は持てませんので、そこんとこはよろしくお願いいたします。

 

FRISKのケース

電子工作界で話題のFRISKのケースサイズ変更、熊本ではまだ見かけないと昨日書きましたが、今日発見したので早速購入しました。

FRISKcase

FRISKケース新旧

長辺は同じですが短辺が約5mm、厚みが約0.4mm増えていました(ノギスでの実測)。
ちょっと前のMake:のブログでRaspberryPi ZEROがFRISKのケースにギリギリ納まらないという話題が載っていましたが、新規格では納まるんじゃないでしょうか。

でも旧規格の小型ケースは今後入手困難になるんでしょうね。

 

FRISKサイズのUSBジョイスティック

OpenStickLiteが使える様になったので、Laser加工機用に小型のジョイスティックを製作しました。

これまでLaser加工機のジョグ制御には、下の様なジョイスティックを使用していました。見覚えがある方もいらっしゃるかもしれませんが、MakerFaireではラジコンシミュレータのコントローラに使用しているものです。
今回、OpenStickLiteを使って場所を取らない小型のものを作ろうと思います。

LaserCutterController

これまでのLaser加工機のコントローラ。
ちょっと大きくて邪魔になる。

 

X-Y軸入力のスティックはジャンクのゲームコントローラーから外したものです。HardOFFで108円で買ってきたコントローラをバラしてストックしています。
これはX-Yのアナログ制御に加えスティック自体を押し込む事でボタンをON/OFFできます。今回入力デバイスはこれ一つだけで、
X-Y軸とボタン1個だけにしました。

JoysticksFromPS

PlayStation用コントローラから外したジョイスティック

 

簡単に回路を描いて・・・

LaserStickSchematic

Laser制御用ジョイスティック回路図

 

基板切削CNCで削って・・・ 

LaserStickPCB

LaserStick基板
(実は一部パターンをミスっており、この後手配線で修正しました)

 

FRISKのケースに入れました。
FRISKはケースサイズが変わるという話ですが熊本ではまだ従来サイズしか見かけません。今回使用したのも従来サイズです。

LaserStick2

フリスクケースに収納。

 

中身はこんな感じです。
PIC18F14K50はフリスクケースにピッタリ。
部品がとっても少ないです。

LaserStick3

水晶発振子周りのスペースが厳しくなってしまったので、水晶を少し浮かして取付け、更にショート防止のためカプトンテープで保護しました。

LaserStick4

斜めからみたところ

 

コンフィグはこれを書き込みました。

LaserStick Configuration

今回のOpenStickConfigLiteの設定。
入力信号はX-Y軸とボタン1個だけ。

 

またLaser加工機に取付ける為、3Dプリンタでホルダーを製作しました。

LaserStick with Holder

ホルダーと小型ジョイスティック

そして加工機に取り付け!!

LaserStick6

ホルダーと共に加工機に取付けた図。

PIC18F14K50採用で小型機器が作り易くなりました。
SOP版を使うともっと小型化できそうです。

 

動画にしてみました。 2016-10-25

 

OpenStick Lite ~その4~(β版アップ)

PIC18F14K50を使用したOpenStickのLite版、今のところ大きな問題はなさそうなので一旦リリースしようと思います。
本当はピン割り当てをドラッグ&ドロップで自由に変更可能にしようと思っていたのですが、GUIを作るのがなかなか面倒なので今後ボチボチやろうと思います。とりあえず現行版ではOpenStickConfigLiteから一旦テキストに書き出し、メモ帳などで変更後に再読み込みする事でピン割り当てを変更可能です。

ファイル類

今回アップしたのは次のファイルです。一番上のバイナリセットがあればまずは動作させる事ができます。例によってソースは汚いので改造したりする際の参考程度にお考え下さい。

その他、書き込みツール(MybootOS)や書込みに必要なドライバ(MCHP-USB)はスタンダード版から変わっておらずOpenStickのページからダウンロードできます。
 バイナリセットには次のファイルが含まれています。
  • Bootloader18F14K50.hex・・・・・・・・・・・・・・・・・PIC18F14K50用ブートローダ
  • OpenStickLite.hex・・・・・・・・・・・・・・・・・・・・・・・OpenStickLiteファーム
  • Bootloader18F14K50+OpenStickLite.hex・・・ブートローダ+ファーム
  • OpenStickConfigLite.exe・・・・・・・・・・・・・・・・・Lite版コンフィグツール
基本的な事はPIC18F2550/2553を用いたOpenStickスタンダード版と同じです。
以下、主な違いを書きます。

回路

マイコンをPIC18F14K50に変更したので当然ながら回路も変わっています。
前回の投稿に書いた通りLEDはなくしてしまいました。
MCLR端子もリセットではなくIOポートとして使います。これにより入力ピンとして使えるのは13本です。ブートモードに入るにはMCLR 端子をLに下げた状態で電源を投入します。
水晶は12MHzです(スタンダード版は20MHzだったので要注意)。
PIC18F14K50にもウィークプルアップ機能があり、これを使える端子をデジタルピンとして使用する場合は内臓プルアップをONにするので回路上のプルアップは省いています。
秋月電子のAE-PIC18F14K50がほぼ同じ回路なのでこちらを使っても簡単に作れそうです。

ピンの用途

各端子は表の機能に割り当てています。IN4~6,IN9~13はアナログ入力可能端子、その他はデジタル専用端子です。 Wpup欄はウィークプルアップ機能がある端子を示します。

ピン用途

各端子の用途

 

ブートローダ

PIC18F4550用を改造しました。「Bootloader18F14K50.hex」をPICライターで書込みます。
このときだけはPICライター(PICkit3等)が必要です(いずれArduinoによる書込みも試したいと思っています)。
ブートローダが書込めればその後のファームやコンフィグデータは直接USBで書き込む事ができます。また「Bootloader18F14K50+OpenStickLite.hex」はブートローダとファームを一本にまとめたファイルなので、これを使えばファームを書く手間が省けます。

ブートローダを書き込みモードにするにはMODEボタンを押しながら電源を投入します。
スタンダード版では書き込みモードになるとLEDが点滅していましたがLiteではLEDがありません。しかし書込みツールMybootOSの左上に「PIC detected in BOOT mode」と表示される事で書き込みモードに入ったと判ります。

メモリーマップ

コンフィグデータの位置を変更しました。
スタンダード版は0×4000が先頭でしたがPIC18F14K50はFLASHメモリが0x3FFFまでしか無いので0x3C00を先頭にしています。

OpenStickLiteメモリーマップ

コンフィグ先頭を0x3c00に変更した。

MybootOS

ファームやコンフィグの書換えにはスタンダード版と同じMybootOSを使用します。
ファームを書き込む時、「Code Offset」には0×0800番地を指定します(これはスタンダード版と同じです。)。
コンフィグデータを書きこむ場合は「Code Offset」は0×3000番地を指定します。コンフィグデータの先頭は0x3c00じゃないかと疑問に思われるかもしれませんが、実はこの「Code Offset」とは書込み前に行われる消去動作の先頭番地を示すものなのです。 実際の書込み番地はIntelHEX形式のファイルに含まれています。今回、コンフィグの先頭が0x3c00なのでその手前の0×3000からFLASH最終番地までを消去します。なおファームは0×3000未満に収まっているので壊す事もありません。
・・・という事はIntelHEXに含まれる書込み番地を見て必要なところだけ消去する機能があればいいんですよね(またいずれ)。

MybootOS_Lite

MybootOSで接続。

 

コンフィグツール

Lite版のコンフィグツールはスタンダード版と見分けをつきやすくするため色を黄色にしました。

OpenStickConfigLite

スタンダードと見分けがつく様に色を変えました。
いずれ一本化したいのですが。

入力端子の任意割り当てに対応するため内部構造を大きく変更しています。
任意割り当てを行うGUIはまだできていませんが「SAVE」ボタンで一旦設定を保存し、それをテキストエディタで変更して「LOAD」で読み込ませるとピン割り当てを変更できます。
設定ファイルには下記の端子割り当てを追加しており、’=’の右の数字が入力端子番号で、これを書き換えます。LOAD時のルールチェックは厳密にできていないので書き換える際は注意してください。

#Pin asign
PIN:ANALOG(X) =4
PIN:ANALOG(Y) =5
PIN:ANALOG(Slider) =6
PIN:HatSwitch(UP) =10
PIN:HatSwitch(RIGHT) =11
PIN:HatSwitch(DOWN) =12
PIN:HatSwitch(LEFT) =13
PIN:BUTTON(1) =1
PIN:BUTTON(2) =2
PIN:BUTTON(3) =3
PIN:BUTTON(4) =7
PIN:BUTTON(5) =8
PIN:BUTTON(6) =9

 

また自動ピン配置も残すため「AutoAsgn」ボタンを追加しました。
(「ShowPin」ボタンと機能の差があまりなくなっており、いずれこのあたりは整理したいと思います)