■ 「書き込みができない」というご質問について
「プログラムがPICに書き込みができない、できていない」というご質問を頂くことがしばしばあります。しかし、実際に書き込みができていないということはほとんどありません。
そういったご質問の場合にお話を伺うと、「プログラムが動作しない=書き込みができていない」というように解釈されているケースが多いのですが、プログラムが動作しないのは、書き込みができていないために発生している場合だけではありません。更に、書き込みができていないというこは実際にはほとんどありません。
もし書き込みができていない場合には、エラーが表示されます。書き込み処理で最初から失敗している場合には、最初にエラーが表示されます。 書き込み後にはベリファイが行われます。ベリファイは、PICにHEXファイルを書き込んだ後、一度PICからデータを読み出して書き込みソフトウエアに読み込まれているHEXファイルと内容がすべて一致しているかを検証する作業のことを言います。仮に書き込みに失敗してしまったのであれば、この時点でベリファイエラーが表示されます。
エラーが表示されない場合には、少なくとも書き込みには成功していること思われます。 それが疑わしい・・・と思う場合には、実際にデバイスからデータを読み込んで、視認してみます。
1.書き込みソフトウエアを起動して、"CODE"ボタンをクリックします。
2."Erase"ボタンをクリックします。するとすべてのアドレスで値が FF になります。
3.その状態で"Read"ボタンをクリックします。PICからHEXファイルが読み込まれます。
4.読み込まれたHEXファイルの内容が、先ほどのCODEウインドウに表示されます。すべてFFの状態に変化がなければ、読み込みに失敗しているか、書き込みができていないことが考えられます。FFの値に変化があったのであれば、読み込みに成功していることを示唆しています。
---------------------
書き込みができない、できていない・・・というご質問の場合にはプログラムが動作しないためにそう判断されるのですが、プログラムが動作しないのは、ほとんどの場合にはコンフィギュレーションビットの設定に誤りがあるためです。 コンフィギュレーションビットは、書き込み時にみ設定できる特殊なレジスタで、発振子の種類やウォッチドッグタイマーの有効/無効を設定するなど、PICの動作に関わる最も基本的な部分を設定するものです。
例えば、発振子に20MHzのセラミック発振子を使用している場合、Oscillatorの設定は必ず"HS"にしなければ動作しません。Oscillatorの設定が"XT"で書き込んでいた場合には、プログラムの内容は正しく書き込みも成功していてもプログラムは全く動作しないのです。
その他、もっとクロックの取り回しが複雑なデバイスもあります。PLLでクロックを逓倍できるデバイスの場合には、PLLに入力するクロックの周波数を合わせるために外部クロックを分周するため、その分周比を設定する必要があるものもあります。
コンフィギュレーションビットの設定をよく確認しないと、プログラムの内容は正しいし、プログラムの書き込みも正しく成功している・・・にも関わらずプログラムは動作しない、ということが起こります。
プログラムが動作しないため、書き込みができない!というご質問を頂くことがありますが、ほとんどがこの設定ミスだった・・ということです。
書き込みを行っても動作しないという場合には、今一度コンフィギュレーションビットの設定内容が物理的環境と矛盾しないか、プログラムの内容と、物理的環境が矛盾していないかということを十分検証して頂けますようお願い致します。
|