Computer & RF Technology

PIC18F14K50によるUSBの開発環境をMPLabXとMac OSXで準備する

使ってみたいと思うような面白いチップには必ずと言ってよいほどSPIやI2Cなどのインターフェースがあり、これを制御するには何らかのコントローラが必要です。以前DDSをFT232RLのBitBangモードで制御してみましたが、スタンドアロンでも動作させたいならマイコンで制御するのが鉄板です。マイコンはたくさんの種類があり迷ってしまうほどです。なるべく小さなマイコンを使いたいのですが、ここ数年はAVRを第一選択として使用してきました。その最大の理由は「普通のgcc」で開発できるのと、Arduinoのコード資産やノウハウが流用することができるからです。

ところがPCとのインターフェースとしてUSBを使おうと考えた場合、AVRの場合USBの対応があまり良くありません。Arduinoの場合わざわざFTDIのチップを使ったりしています。AVRでUSB実装する場合は、vusbというソフトウェアスタックを使用したりしていたのですが、Low Speedにしか対応しないなど制約があります。ATmega32U4などUSBインターフェースを備えたチップもあるのですが、使える既存資産と価格の点でイマイチです。

ところで最近はMicrochipからはMPLAB.Xという開発環境が提供されており、これはLinuxやMac OSXにも対応しています。これまでのようにPIC開発にはWindowsが必須といった状況は変わってきています。PICですとPIC18F14K50はちゃんとしたUSBインターフェースが用意されており、価格も安く秋月での入手性も良いです。気持ちとしては、知見が発散してしまうので本当はマイコンの種類を増やしたくないのですが、今回は信念を曲げてPICを使ってみることにしました。

目標は、スタンドアローンでも動かせるコントローラを、できればどんな環境でもドライバレスで使えるよう、HIDとして使えるようにすることです。

まず機材の準備です。PICの開発には、何かしらの書き込み用のハードウェアが必要ですが、3000円ちょいで購入できるPICkit3クローンを用意しました。

image

とりあえずのターゲットとして、秋月の「PIC18F14K50使用USB対応超小型マイコンボード」を使ってみます。PICKit3に直接接続して使いますが、PICKit3は6ピン、ボード側は5ピンですので、接続の向きと空きピンを間違わないようラベルを貼っておきました。

image

開発環境は前述のようにこちらからMPLabXをダウンロード、インストールしておきます。

MPLABX-v1.90-osx-installer.dmg

コンパイラは別途ダウンロードする必要があります。チップの種類によりいくつかあり、最初迷ってしまいました。8ビット用のPICにしても、C18と、XC8の2種類があるのです。結論からいうと、PIC18Fがターゲットであれば、C18を使うのが良いようです。提供されているサンプルをXC8でビルドしようと試みましたがエラーとなってしまい一筋縄ではいかないようです。ネットで見つかるサンプルやMicrochipから配布されているサンプルでも、C18を前提としていることが多いようです。

ところが残念なことに、MicrochipのサイトからはOSX用のC18はダウンロードできなくなっています。Windows用はレガシーとして用意されているようなのですが、OSX用、Linux用は削除されてしまったようです。ネットでも困っている人がいるようですので、mplabc18-v3.37a.dmg または mplabc18-v3.40.dmg というキーワードでgoogleして探してみてください。

さらに、USBの開発をするためにMicrochipからSDKをダウンロードしておきます。これにはライブラリのほか、いろいろなサンプルが入っています。これに含まれているソースやプロジェクトファイルは、多くのCPUに対応するため、少々わかりにくくなっています。これも迷う原因の一つです。

microchip-libraries-for-applications-v2013-06-15-osx-installer.dmg

さて、開発環境をインストールすると、/Applications/microchipにサブフォルだが切られてツール類がインストールされます。

image

/Applications/microchip/mplabx/mplab_ideを起動します。

image

一方SDKのほうは、ホームディレクトリに、microchip_13-06-15というディレクトリが切られて、インストールされています。USB関係のサンプルは、USBフォルダに入っています。たくさんありますが、とりあえずDevice - CDC Basic Demoを試してみます。

image

mplabxでメニューからFile>Open Project…を選択し、USB/Device - CDC - Basic Demo/Firmware/MPLAB.Xを選びます。MPLAB.Xはフォルダですが、MPLabXからはプロジェクトアイコンとして見えています。

image

プロジェクトを開いたら、まずプロジェクトに含まれている構成の中で最も近い構成「LPC_USB_DEVELOPMENT_KIT_PIC18F14K50」を選びます。

image

続いて、左のプロジェクト一覧で右クリックでメニューを開き、Propertiesを選択して設定ダイアログを開きます。

image

設定ダイアログが表示され、右側のリストでは、Conf: [LPC_USB_Development_Kit_PIC18F14K50]が選択されているはずのです。この状態で、DeviceとしてPIC18F14K50が選択されていること、Hardware Toolに接続したPICKit3が表示され選択されていること、Compiler ToolchainsでC18が選択され、インストールされたパスが表示されていることを確認しておきます。

image

さらに、PICKit 3を使って書き込みを行う場合、マイコンの電源をPICKit 3から供給するためにオプションがデフォルトでOFFになっているため、これを設定する必要があります。ダイアログの左のリストで、現在選択している構成の中にあるPICKit 3を選び、上段のOption CategoriesでPowerを選び、Power target circuit from PICKit3にチェックを入れておきます。

image

メニューまたはボタンから、Run>Run Main Projectとするとコンパイル、リンク、書き込みが順に行われます。成功したらボードをPICKit3から取り外し、ボードのUSBをPCに接続します。CDCが動作していたなら、Macの場合こんなダイアログが表示されます。

image

System ProfilerでUSBデバイスの詳細を見てみると、こんな感じになります。

image

Terminalから接続してみます。screenコマンドを使ってデバイスノードを開きます。デバイスノード名は接続したUSBポートなど環境により異なる場合があります。

$ screen /dev/tty.usbmodem641

キーボードから入力した内容がエコーバックされてきます。うまく動作しているようです。

CDCの他、HIDのサンプルも同様に動作させることができました。いろいろなサンプルがありますので、欲しい機能に近いものを適当に選んで改造して使えそうです。チップは小さく安価ですので、いろいろ使いみちがあると思います。

Microchipの開発環境は、互換性の無いコンパイラやIDEがあることが混乱を招いていると思いますが、なんとか使える環境がセットアップできたので、続いてこれを使って各種チップの制御に使ってみたいと思います。

comments powered by Disqus