機構が複雑になったステッピングモーターを使ったスローアクションのポイントマシン。簡素なサーボモーター版に作り変えていたのだが、サーボモーターの制御ができただけで満足して作業を中断していた。やっとやる気になってなんとか完成までこぎつけた。
MPLAB X IDEで、はまる・・(1)
PICマイコンを開発するワークベンチ、MPLAB IDE。
MPLAB X IDEを使って、C言語で開発してみようとして・・ドツボにはまっている状態。
解決の糸口が見えないので、そもそもどこに原因があるのかを最初から検証してみることにした。
なぜ、MPLAB Xにするのか。
従来のIDEは、MPLAB 8 IDE。
これは、すでにv8.92で開発が終了し、MPLAB X IDEに移行している古いバージョン。
業務用にバリバリ開発するわけではないので、別に古いバージョンでも構わないのだが、気になるのが、マイクロチップ社のホームページでの分類。
MPLAB IDEは、「32-bit Windows」用に分類されている。
一方、MPLAB X IDEはWindows用、Mac用、Linux用があるが、Windows版は「x86/x64」用となっている。
私がメインで使っているのが64bitのWindows7ということで、ちょっとひっかかる。
ProgrammerとしてPiCKit3を使用しているが、64bitのWindows7にMPLAB 8 IDEをインストールしても64bit用のUSBドライバはあるようで、MPLAB 8からも、PICKit3 ProgrammerからもPicKit3を認識してちゃんとPICに書きこむことはできる。
メーカーとしても正式に動作確認していないので32bit用としてしかアナウンスしていないのか、どこか動作しない部分があるのかは不明だが、いずれにしても使い慣れているからといってすでに開発が終了している32bit用に固執するより、これからもバージョンアップされるだろう64bit対応版のMPLAB Xに移行する時期かなぁということでMPLAB Xに移行することにした。
これからは、c言語にしたいのは、入力、出力ともになるべく多くできるPICを使いたい要件があるが、複合条件の判定部はアセンブラよりc言語のほうが机上デバッグも確実にできるかなぁという思いから。
・・が、いざ試してみるとmain関数が空の状態になってもPICに書き込むときにエラーになる。
何が悪いんじゃ~
PICKitは、MPLAB 8で作ったものの書き込みに使用しても問題なく動作しているが、設定を確認する意味で、最初から手順の検証しなおし。
MPLAB 8にPICKit3を接続
メニューから「Programmer」「Select Programmer」「PICKit3」を選択する。
PICKit 3 detected
Connecting to PICKit 3…
PK3Err0033: 4 byte expected, 0 byte received
Failed to properly connect to PICKi3 3
と出力されて接続できない。
PICKit3には、PICKit自身にOSをインストールした上でPICKit3 Programmerを使ってPICに読み書きができるモードとMPLABから制御するMPLABモードがある。
PICKit3がMPLABモードになっていないとMPLABから接続時にエラーとなる。
PICKit3 Programmerでモード切り替え
PICKit3 Programmerを起動してみると、ちゃんとPICKit3に接続できる。
つまり、MPLAB modeではない。
メニューから、「Tools」「Revert to MPLAB mode」を選択すると、MPLAB 8からPICKit3に接続できるようになる。
PICKit 3 Connected.
というメッセージが出力され、接続されたことがわかる。
が、PK3Err0045: You must connect to a target device to use PICkit
3.というメッセージもでている。
PICKit3の先にはターゲットとなるPICをICPS書き込みアダプターキットや実際の回路(写真ではブレッドボードに回路を組んでます)におくことになるが、この回路上には電源を持っておく必要がある。
ちょっとした回路で消費電力も少ない場合はPCからPICKit3経由でPICに電源が供給できる。
なもんで、PCから電源を供給する設定
メニューから「Programmer」「Select Programmer」でPICKit3が選択されていることを確認し、「Programmer」「Settings」を選択する。
Powerタブを開いて「Power target circutt from PICKit3」にチェックを入れ、VoltageでターゲットのPICに対応した電圧を指定する。
ダイアログを閉じてOUTPUT画面に戻ると、
Device ID Revision = 0000000b
と出力されて接続ができた模様。
ちなみに、MPLABでプロジェクトを開いていない状態でPICKit3の電源の設定をしようとしたら、3.3Vまでしか設定できないようになっていた。
5Vを使用するPICを指定したプロジェクトを開いて試すと、5V以上も設定できるようになっている。
このプロジェクトを閉じたあとも・・なぜかはわからぬが、5V以上の設定ができるようになっていた。
だけど・・
MPLABにPICKit3をつなげば、ターゲット回路上でデバッグができたりする・・らしい?
が..、注意書きもあった。
Vddには100μ以上のコンデンサをつけてはいけない、とか、MCLRにコンデンサをつけてはいけない、とかPGC、PGDにはプルアップ抵抗をつけてはいけない、とか・・、とか。
6個くらい注意書きがあった。
8ピンくらいのPICではこの制限から逃れるため別のピンを使おうなんてできないし。
仕事で複雑なものを作るわけではないので、ICPS書き込みアダプターキットで書き込んで、PICを取り外してターゲットボード上にもっていくという面倒な手法をとっていた。
PICの足が悪くなるくらい付け替えを行わないようちゃんと机上デバッグをガンバロー。
ちなみに、Win32対応というのが気になって、複雑なIDEよりも単機能なPICKit3 Programmerなほうがトラブルがあっても解決がしやすいかなということで書き込みはおのずからPICKit3 Programmerを使用していた。
今回、念のため、MPLAB 8でもちゃんと書き込めるのか再度試してみたが、一応書き込にも問題はなかったようだ。
で、PICKit3 Programmerの再設定
MPLAB modeになっているPICKit3をPICKit3 Programmerに接続すると、
The PICKit 3 in MPLAB mode Use the Tools menu to download an OS compatible with this application.
というメッセージがでる。
PICKit3にOSインストール
「Tools」「Download PICKit Operating System」を選択する。
デフォルトだと、PICKit3 Programmerをインストールしたディレクトリが表示され、ここに「PK3OSV~.hex」ファイルがあるはずなので、これを選択するとOSがインストールされる。
・・ということを再度確認しなおし、実際に作った.hexファイルを書き込んだりして、PICKit3は正常に書き込み動作ができること、試験に使っているPICも正常に読み書きできることを確認した。