So-net無料ブログ作成

MPLAB IPEの操作 [PICkit3]

”PICkit3がConnection Failedを表示してPCと接続できない状態からIPEを使って脱出した”と記しましたが、『MPLAB IPEなんて使ったことがない』という方も多い(<==親族SNS管理人も初めて使った)と思うので、もう少し詳しく、MPLAB IPEの操作を説明してみようと思います。

MPLAB-X IDEをインストールしたとき、デスクトップに二つのショートカット・アイコンが作成されたと思います。親族SNS管理人は、MPLAB IPEのアイコンはbackupフォルダーに放り込んでデスクトップから取り除いてしまいます。<==ゴミ箱に捨てないで良かった。(^_^;)

2017_0907_3.png左がMPLAB IPE

試した結果、PICkit3をターゲットから外してUSBケーブルも抜いた状態から始めるのが、良いようです。

その状態でMPLAB IPEのアイコンをクリックするとこんな画面が表示され、Family にMid-Range・・・、DeviceにPIC16F1938を設定しました。PICkit3が繋がっていないのでToolは空欄のままです。
2017_0907_1.pngIPE起動画面

そこで、USBケーブルを接続すると・・・
2017_0907_2.pngPICkit3が表示された
接続したPICkit3が自動認識されてTool欄に表示されました。

PICkit3をターゲット(<==ターゲット側から5V電源が供給されている)に接続し、Connectボタンをクリックすると・・・
2017_0907_4.png中央のボタン群が有効になった
Outputウィンドウに以下の文字が表示されました。

Target detected
Device ID Revision = 1  <==Revisionによって別の数字(例えば2)が表示されます
無事、ターゲットと接続できたようです。(パチパチパチ~)
---------------------------------
<補足>   先日の記事では、”MPLAB IPEではターゲットと接続できない”と記しましたが、今日お示しした手順だと上手く行くようです。
---------------------------------
ここで↑Raedボタンをクリックすると、ターゲット・メモリの内容を読み出しましたが、何故かファイルに書き出せません。orz

そこでSettings ==>Advanced Settingsと操作すると、ウィンドウがポップアップしてPassword入力が促されます。
2017_0907_7.pngAdvanced Settingsに変更
デフォールトのパスワード”microchip”を入力して、ようやくターゲットから読み出したデータをExport(HEXファイル)できるようになりました。
2017_0907_6.pngExportできるようになった

今回はターゲットから電源供給しましたが、PICkit3から電源供給することもできるようです。
PICデバイスにプログラムを書き込むだけなら、MPLAB IPEを使う方が簡便なのかもしれません。

MPLAB IPEの使いこなしを(もう少し)勉強してみようと思います。


nice!(0)  コメント(0) 
共通テーマ:日記・雑感

PICkit3が繋がらなくなった [PICkit3]

使用中のPICkit3が突然、繋がらなくなりました。

以下の表示から先に進みません
*************************
PICkit3 connected
*************************

USBケーブルを接続し直し、やり直すと今度は『Connection Failed.』の表示です。orz

『PICkit3のボタンを押しながらUSBケーブルを接続し直すと良い』と書かれていたので試しました・・・
ここに書いてあった(↓)
http://www.picfun.com/mplabx/mpxlab05.html

が、駄目です、状況に変化ありません。
更に調べると、『MPLAB IPEを使ったら直った』という記述(これです)が見つかったので試してみると・・・

2017_0905_1.png繋がった?

これは・・・PCとPICkit3は接続できたけれど、Target Deviceとの接続に失敗した?

一歩前進です。で、試しにMPLAB-Xに戻って、デバッガを接続してみると・・・
2017_0905_2.pngターゲットを認識した!

ビンゴ~
再びデバッグできるようになりました!
(パチパチパチ~)

*********************************************************************
実はPICkit3を3台(2台は購入、1台はプレゼント)持っていて、全て同じ症状に陥ったので焦りました。メカニズムは分かりませんが、PICkit3のファームウェア(Version 01.50.04)のバグを疑っています。



nice!(0)  コメント(0) 
共通テーマ:日記・雑感

お試しでPIC24FJ64GA002を動かしてみた [PICkit3]

(2012.11.22)
随分前のことですが、プログラム・メモリとデータ・メモリの大きさに惹かれて、PIC24FJ64GA002を一個だけで購入しました。何を作るという目的があった訳でも無く、単なる”お試し”のつもりでした。

先日、”SDカードを使ったFAT16フォーマットのファイル入出力機能”の実験を思い立ち、PIC24FJ64GA002を部品箱の底から引っ張り出してきました。プログラムは”後閑さん”の所から頂いてきた『これ』を使います。

元のソースを一部(PIC24FJ32GA002用だったり、ICD2用だったりするところを)書き換えて、PICkit3のデバッグ環境に合わせました。コンパイル/リンクまで通ったので、ブレッド・ボードに取り付けたPIC24FJ64GA002にPICkit3を接続して、プログラムを書き込みました。

ここまで順調に進んできたのですが、いざ実行してみるとどうも様子がおかしいのです。設定したブレーク・ポイントで止まってくれません。STOPすると”プログラム・カウンタが読み取れない”とか、”デバイスのコンフィギュレーションを見直せ”などと、デバッガのエラーが頻発します。プログラムの書き込みも、予めFLASHメモリをクリアしておかないと、プログラミング・エラーになってしまいました。

『あれ~、PICkit3じゃ上手くデバッグできないとか?』(<==自分がミスしたと思っていない)

訳が判らないままWEB検索を掛けて、こちらの方のページを見つけました。

『ん!Vcap?DISVREG?』
あわてて、マニュアルを見直し、”23.2 On-Chip Voltage Regulator”の記述に気付きました。実は、マニュアルにちゃんと目を通さず、実験を開始していたのです。(コンフィグ設定も”後閑さん”のコードをそのままパクッた)

マニュアル通り、Vcapに10μFのセラコンを付け、DISVREGをVssに接続すると、PICkit3でちゃんとデバッグできるようになったのでした。

お粗末・・・

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

RB7(PGD)とRB6(PGC)を入力ポートとして使うのはNG [PICkit3]

(2012.02.29)
これまでPGDやPGCはポートとして使用することを避けてきましたが、今回製作したUSB_ControlerではRB7(PGD)とRB6(PGC)をSW入力に使いました。

RB76.pngPGDとPGCを入力ポートとして使った

タクトSWがオフならPICkit3の動作に問題は生じない筈です。そして、マニュアルにある以下の記述も『まぁ、当然のこと』と考えていました。

”All other pin functions are disabled when ICSP. or ICD operation is enabled.”

問題は”ICSP operation is enabledになるのは何時か”ということです。プログラミング中とデバッガでhaltしたときは、PICkit3とターゲット間の通信が発生するので当然”ICSP operation is enabled”だろうと思いましたが、それ以外はPGDやPGCがHi-Zになり入力ポートとして使えるのではないかと思ったのです。

結果は”駄目”でした。Programmerで書き込み後、”Release From Reset”してもPGD,PGCは1.0V位の電圧を示し、Hi-Zにはなりません。つまりPICkit3を外さないとRB7とRB6を入力ポートとして使えないのです。orz

幸いこのSW機能を省いてもUSB_Controlerの動作に支障はないのですが、RB7(PGD)とRB6(PGC)を入力ポートとして使うのはNGです。(追記をご参照下さい)

-----------------------------------------------------------------------------------------
(2012.05.14)
『PICkit3側についているプルダウン抵抗の問題だ』というご指摘を頂き、早速ユーザース・ガイドでPICkit3の出力回路を調べてみました。

PICkit3_circuit.png4.7kでプルダウンしている

”weak pull_upは20kΩ程度のプルアップ抵抗に相当する”と考えるのが良いようで、"PICkit3側でプルダウンされるピン(PGDとかPGCとか)は3.3k以下の外付け抵抗でプルアップするか、もしくはプルダウン型(SWオンでHiになる)にしなければならない”と言うことのようです。ご指摘頂き、有難うございました。
-----------------------------------------------------------------------------------------

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(4)  トラックバック(0) 
共通テーマ:日記・雑感

要素試作がほぼ終わりました [PICkit3]

USB_Controler(PIC18F2550)とPIC10F322のシリアル通信が実機レベルで動くようになりました。
(パチパチパチ~)

MPLAB SIMを使ってロジックを入念にテストしましたが、”実機テストが一発で通る”という訳には参りませんでした。割り込み処理と割り込みタイミングの関係が思っていたよりも厳しく、割り込み処理の順番を見直し、TMR2割り込みのタイミングを見直して、ようやくステータス・コマンド(PIC18F2550==>PIC10F322)とステータス・レスポンス(PIC10F322==>PIC18F255)の送受が出来るようになりました。

youso_sisaku.PNGシリアル通信ライン

タイミング・マージンがどれくらい確保できているか見極められていませんが、要素試作はほぼ終了しました。いよいよ、コンテストに応募する回路の試作に取り掛かろうと思います。

割り込みハンドラに組み込まれた(by HITECH-C)レジスタの退避復帰処理
interrupt_function:
  movwf	saved_w
  swapf	status,w
  movwf	(??_intsrv+0)
  movf	fsr0,w
  movwf	(??_intsrv+1)
  movf	pclath,w
  movwf	(??_intsrv+2)
  movf	btemp+1,w
  movwf	(??_intsrv+3)
  ljmp	_intsrv

(ここにユーザが定義した処理が入る)

  movf	(??_intsrv+3),w
  movwf	btemp+1
  movf	(??_intsrv+2),w
  movwf	pclath
  movf	(??_intsrv+1),w
  movwf	fsr0
  swapf	(??_intsrv+0)^00h,w
  movwf	status
  swapf	saved_w,f
  swapf	saved_w,w
  retfie


上に示したレジスタの退避復帰処理に凡そ10μS掛かります。PIC10F322の割り込みにはプライオリティ制御が無いので、NCO割り込み(現時点では動いていない)が入るとTMR2やIOCの割り込み処理タイミングが10μS以上遅れる場合が出てきます。これをカバーするだけのタイミング・マージンは無さそうなので、さらに一工夫する必要がありそうです。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

USB_Controlerのプログラム(on PIC18F2550) [PICkit3]

PIC10F322から移植したシリアル通信ライブラリがそこそこ動くようになったので、USB_Controler用のプログラムを書き始めました。

さくさく、さくさく・・・

データ・メモリにも、プログラム・メモリにも余裕があるので、気楽に書き飛ばしています。PIC10F322のデバッグでは味わえなかった開放感です。

”いや、気持ち良いなぁ~”
(調子こいていると遠からずズッコケルのですが・・・)

いま暫くは、このまま行かせて下さい。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

USB_Controlerのデバッグ(on MPLAB SIM) [PICkit3]

MPLAB SIMでUSB_Controlerのデバッグを開始しました。デバッガも使える(USB_ControlerにはPIC18F2550を使っている)のですが、以下に示すメリットがあるため、”MPLAB SIM+Stimulus”でロジックのデバッグを行うことにしました。

<MPLAB SIM+Stimulusのメリット>
(1)設定できるBreakPoint数に制限が無い。
(2)アプリケーションで使っていないAD割り込みを使い、適当なタイミングを狙ってBreakが掛けられる。
(3)一度Stimulusファイルを作成すれば、Reset & Runでデバッグしたい状況を再現できる。

実機デバッグの場合、デバッグしたい状況を再現するために、一連のシーケンスを辿るのは結構大変(右ボタンを長押し、左ボタンを3回短押してから、右ボタンを2回長押し・・・)です。

あり難いことにPIC18F2550のMPLAB SIMはTMR2割り込みもIOC割り込みも、割り込みハンドラが正しく呼び出され(それが当然と言えばそうですが)、TMR0とTMR2のクロック・レートも設定どおりに動いています。

何はともあれUSB_Controlerもまじめにテスト仕様を書いて、きちんと動作を確認しようと思います。(実機テストが一発で通ることを期待して・・・)

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC10F322のデバッグ(on MPLAB SIM)終了 [PICkit3]

(2012.01.31)
MPLAB SIMを使ったPIC10F322のデバッグが終了しました。”TMR2、IOC、NCO割り込みが入らない”とか”TMR0割り込みとStimulusの時刻が一致しない”とか、色々不都合な点もありましたが、無理やり押さえ込んで(詳細はこちら)、ロジックに誤りが無いことを確認しました。

テスト仕様はこんな感じです。

1.初期状態(sync_sequence = IDLE_CHECKで起動する)
Break on Initialize@main()
Reset & Run
Break at Initialize
Step Over
==> sync_sequence = 0
==> T2CON = 0x04
==> PR2 = 0xC7
==> INTCON = 0xE8
==> PIE1 = 0x12

2.アイドル状態検出(sync_sequence = IDLE_CHECKでSERIAL_IN = 1が3cycle以上継続するとsync_sequence = START_BIT_SYNCになる)
Read stim2.sbs
Stimulus Set High RA2 fired
Break on TMR2IF
Break on check_idle_common
Run
break at TMR2IF
==> sync_sequence = 0
==> idle_count = 0
==> PORTA = 0x04

Run
break at TMR2IF
==> sync_sequence = 0
==> idle_count = 1

Run
break at TMR2IF
==> sync_sequence = 0
==> idle_count = 2

Run
break at check_idle_common
==> sync_sequence = 0
==> idle_count = 3

Step Over
==> sync_sequence = 1
==> idle_count = 3
==> INTCONbits.IOCIF = 0;
==> INTCONbits.IOCIE = 1;
==> T2CONbits.TMR2ON = 0;
==> PIR1bits.TMR2IF = 0;

同様に以下の項目について、確認手順と確認項目を記してテストを実施しました。
3.STARTビット検出
4.受信
5.コマンド処理
6.送信準備
7.送信

次はコントローラ側のデバッグですが、予定よりかなり遅れているのが心配です。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

"cgpic.exe"がクラッシュ [PICkit3]

(2012.01.29)
PIC10F322のプログラム・サイズが厳しくなってきて、殆どの関数をインライン・アセンブラで書き直しています。HITECH-Cが生成したコードの無駄を省くだけで何とかなりそうな見通しですが、デバッグは未だこれからなので、少しでも余裕を設けておく必要があります。

そこで、さらにインライン・アセンブラ化を進めたところ・・・

cgpic_exe.pngエラー・メッセージが表示された

初めて遭遇するエラー(というかリンカのバグ?)です。リビジョン管理などせずにコードをガシガシ書き換えたので、簡単には元に戻せません。エラー箇所を特定する常套手段(エラーが出なくなるまでプログラムをコメント・アウトする)で、不具合状況が明らかになりました。
<エラーを起こしたコード>
void serial_comm_main(void)
{
#asm
_s_comm_main1:
 movf (_sync_error),w
  |(省略)
_reset_command:
 fcall _nco_reset
 goto _s_comm_main44

<エラーにならないコード(nco_resetを呼び出す所だけCの関数コールにする)>
_reset_command:
#endasm
 nco_reset();
#asm
   goto _s_comm_main44

nco_resetは別のCソース・ファイルに定義された関数で、main.cでも呼び出し(nco_resetはglobal定義されている)ています。それをserial_comm.cの中から呼び出す部分をインライン・アセンブラにした結果、生じたエラーです。HITECH-Cはv9.83を使っています。

ちゃんと勉強しないで適当に作業を進めているので、HITEC-Cのリンカに適切な指示を出す方法が判りません。orz

コード・サイズには影響しないようなので、このまま作業を進めるつもりです。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

イマイチでも(なんとか)使う [PICkit3]

(2012.01.27)
先日、”Stimulusが使えるようになってシミュレータを利用するメリットを感じた”と書いたのですが、やっぱり”イマイチ”な部分が出てきて悩まされています。

実機では入る割り込み(TMR2、IOC、NCO)がMPLAB SIMでは入りません(要求フラグが立っても割り込みハンドラが呼び出されない)。”StimulusでPIRbits.TMR2IFをセットすると割り込みハンドラが呼び出される”と思ったのも勘違いでした。

シミュレーション開始から100μSインターバルでPIRbits.TMR2IFをセットするようにStimulusを設定したところ、TMR2の割り込みハンドラが呼び出されました。

『しめしめ、これなら行ける!』と思ったのですが・・・

色々試していて、StimulusのPIRbits.TMR2IF設定とTMR2割り込みハンドラの呼び出しが一致しないことに気付きました。

結局、割り込みハンドラを呼び出していたのは、インターバル(=1ms)が正しくシミュレートできていないTMR0割り込みでした。(シミュレーション開始から600μS以内にTMR0割り込みが3回入っていた)

Stimulusについて判ったことは以下の通りです。

(1)リセットするとStimulusのシミュレーション時刻は0クリアされる。

(2)”Run==>Break”を繰り返す間も、シミュレーション時刻は経過し、Stimulusの設定に応じた割り込み要求信号等が設定される。

(3)以下のように設定すると、(ほぼ)所定の時刻にTMR2割り込みハンドラを呼び出すことが出来る。
 時刻  TMR2IF TMR0 TMR2
150μS     1   FF      00
250μS     1   FF      00
350μS     1   FF      00

ただし、TMR0割り込みハンドラも呼び出される。

(4)IOCAFを設定するとIOCIFが設定される(2012.01.31 誤りでした)入力信号を変えてもIOCIFは設定されない。以下のように設定すると、(ほぼ)所定の時刻にIOC割り込みハンドラを呼び出すことが出来る。
  時刻   RA2  IOCAF2  IOCIF  TMR0
     0μS    1                    FF  
1100μS    0        1         1       FF
1150μS    1         1          0       <== IOCIE = 0なのでIOCIFも0のまま
1250μS    0         1          1       FF
1350μS    1         1          1       FF

ただし、TMR0割り込みハンドラも呼び出される。

(5)StimulusでADIFを設定すると(ADON=0でも)AD割り込みハンドラを呼び出すことができる。AD割り込みハンドラ内にブレー・ポイントを設定しておくと、(ほぼ)所定の時刻にシミュレーションを停止できる。(その後、シミュレーションを再開することもできる)

これで、なんとかシリアル通信の制御ロジックをデバッグするつもりです。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感