※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
※以下の情報は2007年12月現在のものです。ご注意ください。
※このページではC言語の基本的な部分を理解している方向けに書いてあります。また、何回かMPLABの操作を行った方を対象にしています。それ以外の方はまず基本編を読んで下さい。
最終更新日:2007年12月5日
もくじ
プログラムについて
PICKit2について
プログラムについて
Q:特殊レジスタを設定しようとしても、きちんと値が反映されない。
A:特殊レジスタを操作する場合、1つのレジスタの各ビットを連続で変更するようなプログラムを書くとうまく反映されないことがあります。このような場合は各ビットを操作するのではなく、そのレジスタの値を一回で書き換えるプログラムにすると上手くいきます。
例)
PORTDbits.RD0 = 1;
PORTDbits.RD1 = 1;
PORTDbits.RD2 = 1;
PORTDbits.RD3 = 1;
と連続で同じレジスタを変えようとするとコケる場合がある。
PORTDbits |= 0x000F;
のようにすると、一回で下4ビットが強制的に1になるので上の4行と同じになる。 など。
Q:汎用IOでポートをHIGH/LOWにしようとしても、動かない。
A:特殊レジスタを操作する場合、1つのレジスタの各ビットを連続で変更するようなプログラムを書くとうまく反映されないことがあります。このような場合は各ビットを操作するのではなく、そのレジスタの値を一回で書き換えるプログラムにすると上手くいきます。
Q:センサーポートのANxを普通のデジタルIOとして使おうと思ったが使えない。
A:AN0〜AN31はデジタルIOとしても使えますが、初期設定ではアナログIO設定(ADCを使う設定)になっています。ADPCFGHとADPCFGLレジスタを操作する必要があります。(各ビットを1でデジタルIO端子になる)
Q:RUNで実行すると、途中で止まる(一時停止ではなく、RUNが終了してしまう)
A:プログラムの書き方では問題なくても、ハード的におかしい場合はこのような減少になります。例えば、ある機能を使っているときにさらにその機能を使うようなプログラム(再帰)になっていると、場合によってはその機能がハングアップし、RUNが強制終了することがあります。例えば、モータやサーボなどを動かしている場合に、突然大きな電流が流れてシステムが一瞬ダウン(急に電圧が下がる)すると強制終了になることがあります。
Q:サンプルプログラムのTimer1を使ったwait_msを使っているが、たまに動かなくなる(カウンタが止まってしまう)。
A:wait_msを使っている最中に、さらにwait_msを使ったりするとこのような現象になります。多重に使わないように注意しましょう。長いプログラムを書いていると以外とわかりづらいミスです。
PICKit2について
Q:HEXファイルを転送してもプログラムが動作しない。(PICKit2Programmer画面でWriteを押して転送が正常終了しても動かない)
A:PICKit2用のHEXファイルを生成するには、MPLAB上で File -> Export でHEXファイルを生成します。MPLABのメイクで作成したHEXファイルはMPLABから直接プログラムを転送する場合(ICD2などを使用)に使われます。
Q:PICKit2Programmerの画面で「No device detected」という表示になる。
A:次の項目を確認してください。
1)A33Fの電源が入っているか?(テスターで電圧を測定してください)
2)PICKit2とPCがUSBケーブルで接続されているか?
3)DeviceFamilyで間違ったデバイスを選択していないか(dsPIC33を選択してください)。
4)A33FとPICKit2の接続が正しいか?
|