マイクロテクニカ製品サポートFAQ
[一覧] [1つ前に戻る] [マニュアル及び各種ダウンロードページへ]
プログラミング製品のサポートについて
プログラムを作る各種製品、PicBasic Pro Compilerや、mikroCなどについてのご質問につきましては、基本的に「ソフトウエア本体の使い方」についてのみご案内致しております。ソフトウエアのインストール方法や設定方法、コンパイル方法のご案内等については当方よりご案内しております。

プログラミング内容に関するご質問、エラーの解析、ワーニングメッセージの解析、PICマイコンの使い方についてのご質問は当方ではお答え致しておりません。各製品のサポートフォーラム又は開発元の公式サポートをご利用頂くことになっております。

原則としてプログラムの内容やプログラミングに関するご質問については当方ではお答え致しておりません。プログラミングに関する技術的なご質問についても当方では原則としてお答え致しておりません。例えば下記のようなご質問については原則としてお答えしておりません。

・作ったプログラムを添付して「どこが悪いかデバッグしてください」「○○のように動くようにしてください」というご質問やご依頼

・「プログラムを作ったが動かないので、動くようにしてください」というご依頼

・「このように動かすつもりで作ったが思うように動作しないので、どこが悪いか教えてください」というご質問

・「○○のようなプログラムを記述した時、こんな動作をしたが正常かどうか、又はどうしてごのような動作をするのか」というようなプログラム内容に関わるようなご質問

・「この部品を使いたいのでこの部品で動くプログラムを紹介してください。又はプログラムを手直ししてください」というようなプログラムの作成や内容の確認、デバッグ、検証が必要になるような作業を含むご質問

・エラーメッセージが表示されている、ビルドができないなど、エラーの原因を教えてほしいなどプログラムの内容に関わるエラーやワーニングについてのご質問

その他、当方でお答えできないと判断したご質問についてはお答え致しかねる場合があります。
上記のようなご質問をお寄せ頂いても当方からはご回答できませんので、あらかじめご了承ください。

プログラミングについては、様々な条件や使用しているデバイス、ハードウエア環境などによってその動作や内容が変わり、不確定・不確実な部分が多く、当方からある特定の事象だけ(例えば○○が△△のように動作しないなどの個別プログラムの動作に関する事例、事象)を勘案して回答をすることは適切でないと考えております。
また、プログラミングに関するご質問に対するご案内、回答はその内容が、直接最終的な"機器の動作"に直結することがあり、バグを含む瑕疵責任など、責任問題に抵触することがあるため、当方からの回答はしないことを原則としております。

プログラミングについてのご質問については下記の製品の開発元が開設しているフォーラムでは多数の記事が投稿されており、ほとんどの解決方法が見つかります。
また、ご質問の前に必ずデバイスのデータシートをお読みください。データシートをお読みになることで問題が解決できることがあります。

また、エラーメッセージをGoogle等の検索エンジンで検索するとほとんどの場合関連するページやフォーラムの投稿記事が検索され、そこに原因や解決方法が出ています。まず最初にそのエラーメッセージやワーニングメッセージで検索することをお試しください。

・PicBasic Pro Compilerの場合
http://www.picbasic.co.uk/forum/forumdisplay.php?s=f2719d812983911a3fe82e8a194ad82f&f=4

・mikroCの場合
http://www.mikroe.com/forum/

"Search"リンクよりキーワードを入力して関連する記事を検索できます。その際、"Forum"のプルダウンから検索するフォーラムを"mikroC PRO for PIC General"又は"mikroC for PIC General"に絞り込むことで記事の検索範囲を絞り込むことができます。

PBPの場合には、コンパイラの開発元が技術サポートを全面的に行っており、すべての技術サポートは開発元に行って頂くことになっております。
下記よりお問い合わせが可能ですので、上記フォーラムにて解決策が見つからない場合には、下記メールアドレス宛にご質問をお願い致します。
なお、文章は英文となります。ご質問内容は英文でお書き下さい。お答えも英文となります。
また、ソースファイルを添付する場合には、必ず拡張子を.TXTに変更してテキストファイルとして添付をお願い致します。メール本文にソースコード等を記述されませんようお願い致します。

support@melabs.com

PICマイコンの使い方そのものに関するご質問は、マイクロチップ社の技術サポートが行っております。PICマイコンの使い方や設定方法等は、データシートにすべて記載されており原則、データシートを読むことをおすすめします。また、PICマイコンは型式が異なっても共通する内容が多くありますので、インターネット等で情報を検索すると解決策が見つかります。

http://www.microchip.co.jp/support/tech-help.php


------------------------------------------------------------


まずプログラムが思うように動作しない・・という場合には次のことを試してください。

[1]プログラムを最小限短くする

例えばある程度プログラムを作って、動かしてみて「○○も△△も動作しない・・」となってしまうとどこに問題があるのかわかりにくくなります。
まず最初にプログラムを「○○が動作しない」という部分だけに削り、その部分だけをデバッグしてみます。そこが動作しない結果、△△の部分にも影響を与えている場合があります。
基本はまずプログラムは最小限の小さくしながら、各機能を試しながらそれを組み合わせる感じで長くしていくことを基本としてください。

多くの問題はほとんどこれで解決します。例えば「IOピンが思ったように動作しない・・・」という場合、当然その「IOピンを使って処理を分岐するように書いたプログラム」であれば、その分岐処理も期待通りには動作しないでしょう。
このような場合、まずはIOピンだけのプログラムを書きましょう。例えばPORTAの入力値をそのままPORTBに出力するプログラムを書いてみる・・・

TRISA = 0xFF;
TRISB = 0x00;
PORTB = PORTA;

さあこれで動作するでしょうか。もし動作しなければ原因を探すことになります。
一番多いのが次の[2]でも記載していますが、ポートがデジタルIOになっていないことです。PICは電源投入時やリセット後、ピンがアナログ入力モードになっていることが多くデジタルIOとして使う場合にはレジスタによる設定が必要です。PIC16F1939を使っていたのならば・・・

ANSELA = 0;
ANSELB = 0;

この2つをプログラムの先頭部分(mikroCならばmain関数の最初)で記述しないといけません。
これで再度実行すればプログラムは動くようになったはずです。
もし、これでも動かなければコンフィギュレーションビットの設定が誤っているのかもしれません。

最小限簡単にしたプログラムが動作したら、次のステップに進みましょう。少し機能を追加して思い通りに動作するかどうか確認します。そこで詰まったら再度その部分だけを切り取ってデバッグしたり、データシートを読み返してみましょう。

長くなったプログラムのデバッグはとにかく大変です。疑われる場所が複数あると、どこが悪くてどこが正しく動いているのか分からなくなり、行き詰まってしまいます。少しずつプログラムを確認し、動作確認ができたら次のプログラムを継ぎ足して・・・とすこしずつ大きくしていくように作ればデバッグが楽になります。

[2]サンプルプログラムをそのままコピーして使ったり、別のPIC用に作られたプログラムを移植しない

よくあるのがこの問題です。
サンプルプログラムはプログラミングの際とても便利ですが、それをそのまま使ったり、そっくりコピーして思ったように動作させよう・・というのは難しい話です。サンプルプログラムはあくまでも一例でありその内容がすべてのケースで使えるわけではありません。
また、別のPIC用のプログラムを移植させている場合にもトラブルが多く発生します。

これは先に書いたとおりこれらは「プログラムを徐々に長くながらデバッグ」したわけではないからです。少しずつ、1つずつ動作を確認しながらプログラムを長くしてきた場合、どのあたりに問題があるか検討が付きやすいですが、長いプログラムのそのままコピーしたり別のPIC用に移植すると、いきなり長いプログラムを実行することになり、もしそのプログラムが思ったように動作しないとどこに問題があるのか切り分けがすごく難しくなるということです。

「PIC○○で動いたプログラムをPIC△△用にコンパイルして書き込んだけど動かない!」ということがあります。PICはデバイス毎にレジスタの設定内容が違ったり名前が異なったりしています。あるデバイスで動作したプログラムをそのままコピーして別のPIC用にコンパイルしてうまく動作するケースはごくまれです。PICが変わったのであれば、できれば1から作り直すことをお薦めします。

例えばTMR0を使ったプログラムの場合・・・PIC16F1939で作ったプログラムがあったとします。
TMR0のプリスケーラ分周比はPIC16F1939ではOPTION_REGレジスタのビット0〜2で設定します。

このプログラム同じピン数のPIC18F45K22に移植したとします。しかしPIC18F45K22ではプリスケーラの分周比設定はT0CONレジスタのビット0〜2で設定します。

そのまま移植してもプリスケーラの分周比を設定するレジスタが違うので正しく設定の記述を変更しなければ動作しないのは明白です。1からプログラムを作るとこのあたりは1つ1つ確認しながら作り込みますので違いの気づきますが、そうでないと見落としてしまいがちです。

[3]データシートを確認する
データシートは必ずご確認ください。特に重要なのはPICの場合電源投入時多くのデバイスで、ピンがアナログ入力モードになっている点です。
アナログ入力とはADコンバータの入力ピンです。この設定になっているピンはデジタルIOとしてプログラムから出力をしたりピンの状態をプログラムで検出することはできません。プログラムの先頭部分で必ずデジタルIOピンとしての設定をレジスタで行う必要があります。これをしない場合プログラムが全く思い通りに動かないということになります。
設定はある程度デバイスファミリー間では同じですが、異なるファミリーのデバイスでは設定するレジスタが異なります。
例えば、PIC16F1939などエンハンスドPIC16シリーズ、PIC18F(K,J)などの場合には、ANSELAやANSELBといったレジスタ、PIC16F887などややレガシーなデバイスではANSELH、ANSELレジスタで設定します。さらに古いタイプのPIC16F877AなどではADCON1レジスタで行います。
ご使用のデバイスがどのレジスタを設定すればデジタルIOにできるか、などはそのデバイスのデータシートを見る以外方法はありません。
「うまく動作しない!」という場合には必ずデータシートをお読みください。

[4]コンフィギュレーションビットの設定を確認する
PICを使う上でコンフィギュレーションビットの設定は欠かせません。適当な設定値で使うとプログラムは正しくても全く動作しなかったり、勝手に動作周波数が4逓倍されていたり、Watchdog Timerでリセットがかかってタイマの動作がおかしくなったり・・・と原因を複雑にする様々な問題を引き起こします。
コンフィギュレーションビットの設定もデバイスにより「まちまち」です。ある程度の共通した項目はありますが、デバイスによって設定内容はことなるため、データシートの参照が不可欠です。またインターネットなどでも情報を手に入れられますので、使っているデバイスの型式で検索をしてみると解決策があるかもしれません。
オリジナル - FAQみたいです - 猫でいいです