OpenStick Lite ~その3~

先日から取り組んでいるPIC18F14K50を使ったOpenStick Liteですが、最低限の動作をする様になってきました。

前回の投稿で書いたブートローダの「部分書込み問題」は、 非HID版(MCHPUSB版)ブートローダをPIC14K50用にビルドしてみたら案外あっさりと動作しました。 よってこちらを用いる事でまずは解決です。

ブートローダを書き込みモードに投入する方法はPIC18F2550版とは少し変えています。
PIC18F2550版ではRC2をLに落としながらリセットまたは電源投入をしていましたが、PIC18F14K50ではピン数を節約するためコンフィグビットの設定でMCLR端子を入力ポートに割り当ててしまいました。ブートモードに入れるにはMCLR/RA3端子をLに落としながら電源を投入します。
またブートモードを表すLEDもなくした事で入力ピンは13本確保できました。LEDがないのは少しわかりずらいのですがMyBootOS上に接続した旨の表示がでるのでいいかなと思っています。
もしLEDは必須じゃ!と思われる方がおられたら、このブログに(なるべく早めに)書き込んでくださいな。

 

入力ピン全13本を使ったジョイスティックを生成してみました。
このあたりがLite版での最大規模ですが、今まで私が作成した中ではフライトヨーク以外は事足ります。

Joystick mini by OpenStickLite

全13ピン使用のジョイスティック

 

書き込みツールはMybootOSをそのまま使用しています。微妙なところがPIC18F2550用のままですが書き込み自体は問題ありません。

MybootOS_Lite

MybootOSで接続。

 

コントローラとしての機能を設定するOpenStickConfigについてはLite版を作成中です。まだピン設定の表示が未対応ですがデータは生成できています。 今は原版とLite版は別ツールになっており、できれば一つに統一したいところです。
またPIC18F2550には、アナログピンより小さい番号の入力ピンをデジタルピンに割り当てられないといった制約があり、このあたりが面倒でピン割り当ては固定的に生成していました。
しかしPIC18F14K50にこの制限はないのでピン割り当てを自由に設定できるツールにしたいなと考えています。

OpinStickConfigLite

ピンアサイン表示がPIC18F2550版のまま・・・

 

・・・こんな感じで取りあえず動き始めたのですが、もう少し細かいところを修正/確認してから公開したいと思います。

OpenStick Lite ~その2~

OpenStickのLite版としてPIC18F14K50への対応作業を続けております。
まずはPIC18F2550版で何をやっていたかを思い出すところから始める必要があります。何年か経っているのでほとんど忘れているのです。
PIC18FマイコンはROM(FLASH)とRAMが別のアドレス空間になっているあたりが面倒だったはず・・・確かにこのあたりで苦労の跡が見られます。何種類かあるUSBのディスクリプターをROM上に置くものとRAM上に置くものとでそれぞれの対応が必要でした。・・・少しずつ思い出してきました。まあ大体で良しとしましょう。(おいおい!)

とりあえずファーム載せ換え開始
ブートローダはとりあえず手に入るHID版で進めています。このマイコンのFLASH容量16KBの内、HID版ブートローダは4Kバイトを喰いますが今のところOpenStickファームも含めて納まっています。
またFLASHが16KBという事は最大番地が0x3FFFです。という事はPIC18F2550版の様にコンフィグデータを0×4000以降に置くことができないので先頭を0x3C00に移動しました
むしろ問題はRAM容量で、元々768バイトしか無いところにUSBのバッファが256バイトを使うので残りは512バイトです。 色々と節約して何とか納まっていますが余裕が全くありません。

こんな感じですがまずはファームウェアが動作するところまでは漕ぎつけました。

しかしここで問題発生。
HID版ブートローダはFLASHの部分書き込みに対応しておらず、書込む前に一旦全アドレスが消去されてしまう様です。
OpenStickは下図の様にジョイスティックの定義部分だけ後から書込む事によって機能を自由に定義できるのがウリな訳ですが、これにはFLASHの部分書込みが必須です。

OpenStickMemorymap

FLASHメモリーマップ(PIC18F2550版)

PIC18F2550版で使っていた非HID版ブートローダ(MCHPUSB版と呼ぶのかも)の場合、書込みツールを対応させれば部分書込みが出来ていましたがHID版はファーム自体が対応しておらず消去の時は気前よく全消ししてしまい元のプログラムが残っていません。 対策にはファームと書込みツールの両方を変更する必要がありそうです。
非HID版なら書き込みツール側から消去ブロックを指定して消す仕組みになっているので問題ありませんが前回書いた様にPIC18F14K50版がありません。

これはどうしましょう。ブートローダを何とかする必要があるのですが、HID版と非HID版、どちらから攻めるべきでしょうか?

何でも実際にやり始めると最初に思っていた程簡単にはいきませんねぇ。

OpenStick Lite

MakerFaire Tokyo 2016も終わり、一段落したところで次に作りたいものが色々とあります。
書きだしてみると何年かかるかわからない程ありました。
とりあえずその中でいちばん気になっているのはOpenStickのPIC18F14K50対応です。

OpenStickは元々PIC18F2550を対象にしていました。 このマイコン、当時は秋月電子で¥350ほどでしたが現時点は¥500に値上がりしています。しかし代わりにPIC18F2553というのが出ており、これは現在¥420です。そこでOpenStickは昨年PIC18F2553に対応しました。
PIC18F2550と2553は殆ど同じですがA/Dコンバータの分解能が10bit→12bitになっています(なぜ高機能の方が安いのでしょう?)。

もう少し低価格のUSBマイコンとしてPIC18F14K50があり、こちらは¥220でかなり安めです。ピン数は20pinなので、入力デバイスを作った場合チャンネル数は少なくなりますが、それでも12CH程度は使えそうで多くの場合これで十分でしょう。 SOP版を使うとかなり小型のコントローラができそうです。

とりあえずPIC18F14K50を動かしてみました。

OpenStickLite1

まずはLチカ。

OpenStickLite2

次にMicrochipのデモからジョイスティックを書込んでみた。

OpenStickLite3

ちゃんとジョイスティックとして動作している様です。

ここまでは順調です(既にあるものを使っているので当たり前ですが)。・
この後OpenStickとしてはブートローダで動作させコンフィグで機能を設定する様にしなければなりません。

ブートローダについてはちょっと迷っています。
マイクロチップ・テクノロジー社がPICマイコン用に出しているUSBのブートローダには2種類あります。
・HIDブートローダ
・HIDではないブートローダ(正しくは何と呼ぶのでしょう?)

HIDbootloaderはプログラム書込み時、HIDデバイスとして動作するのでPC側にドライバを必要としません。しかしbootloaderのサイズが少し大きくなります(4KB)。
非HIDのブートローダはPC側にドライバが必要ですがにbootloaderのサイズが小さくて済みます(2KB)。
今までOpenStickではHIDではない方を使っていました。ところがPIC14K50用はHIDタイプしか見つからないのです。 このサイトには移植した旨の記載がありますが現在リンク切れでダウンロードできません。
HID版に変更した場合、bootloaderのサイズが大きくなる事は恐らく問題ありませんが書き込みツールも変更が必要と思われちょっと面倒です。
ここらはもう少し調べて決定したいと思います。