「コンフィギレーション」の設定及び書き込みについて

  PIC の場合「コンフィギレーション」を使用目的に合わせ、正しく設定
  しませんと、動作をしてくれなかったり(オッシレータの設定で顕著です)
  予想外の動作をする事があります
  未設定のディフォルトのままで無く、きちんとした設定をするにはどうし
  たら良いのかを、幾つか考えてみました

  
1.正規版のライターの場合
   デバイスの選択及びプログラムのインポートをします
    CONFIG の窓を出します
   
   項目が表示されますので設定(変更)をして書き込みます
   一部のライターにはその設定を強制的に保存させられる機種もあります

  
2.PIC Kit2(3) 等を使用する場合
   MPLAB IDE の画面から Configration Bit の窓を出します
  
   Configration Bits set in code のクリックを外します、警告に OK します
   項目が表示されますので設定(変更)をします 
   全部の項目が表示されないデバイスもあります
   Configration Bits set in code にクリックを入れます
   以後の詳細は下記「・・相互関係」を参照してください

  
3.プログラムの中に CONFIG の項目を記入する方法
   自動的に書き込んでくれるライターと非対応のライターがある様です
   CONFIG の指定の前に INCLUDE でデバイスを事前に指定しておく
   必要があります

   (A).インクリュードファイルから項目を選んで設定する方法
    ・・\MPLAB8.1\MPASM Suite\P16F887.INC
     PIC 16F887 の使用一例
      #INCLUDE 'P16F887.INC'
      __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & ・・・
      __CONFIG _CONFIG2, _WRT_OFF & _BOR21V

    必要項目を「 & 」で接いで記入して行きます
    一つの CONFIG に対しましては一行で全ての設定を記入しませんと
    エラーが発生します
    凄く長い行になってしまいます

   (B).デバイスのデータ資料から CONFIG の項目を調べ設定する方法
    PIC 16F882/883/884/886/887 Data Sheet.pdf
    記入の方法は上記と同じですが、どうせなら16進コードを作って
    しまい、下記の方が簡単に済みます

   (C).予め上記の方法で調べておいた16進(HEX)コードで設定する方法
     PIC 16F887 の使用一例
     #INCLUDE 'P16F887.INC'
      __CONFIG _CONFIG1,H'20E4'  最初のアンダーバーは
      __CONFIG _CONFIG2,H'0600'   2個連続です
    私的にはこの方法が一番適していると思います、それは
     そのデバイスの全ての CONFIG に付いて勉強出来る(必要がある)
     記入ミスを起こし難い
     行幅が短くて済む
     後述の「***.HEX」ファイルを読んだり、変更したり、追加する場合は
     必須要件なのですから

 4.「***.HEX」ファイルの中に CONFIG の項目を強引に
  記入する方法
    考えましたのが後になりましたので、最後の方に記述してあります


  補足
   デバッグを行う場合も CONFIG の設定が必要の様ですが、使用する
   機種に寄りまして必要項目が異なる様です
   又問題としまして実装品としての書き込みと、デバッグの時では
   CONFIG の設定が異なる場合もあります

   16進(HEX)コードのプログラムのみを表示又は配布されました場合
   正規版のライターが有れば自分で CONFIG の設定をして書き込み
   出来ますが PIC Kit2 や自作のライター等の場合は対応が必要です  
   MPLAB IDE の画面から Configration Bit の窓を出して設定する
   方法も有りますが・・・



 「PIC Kit2」と「Configration」の相互関係

  
1.ソースプログラムに CONFIG の設定が無い場合
    又は Inport した Hex File に CONFIG の設定がされていない場合
    IDE 及び PIC Kit2 をデバッグ状態にします
     IDE の Config Bit はディフォルトである値が設定されています
    使用目的に合わせ必要があれば変更します
    デバッグの時には IDE の Config Bit の値が使用されます
    そのままプロジェクトを保存しますと(TEST1)  CONFIG の値はプロジェクト
    にのみ保存となりますが16進(HEX)FILE には反映されません

    別の名前(TEST3)でCONFIG を含めた EXPORT を行ってみます
     

     

    PIC Kit2 のプログラム画面を起動します
    TEST1 を Inport した状態です CONFIG は設定されていません
     


    TEST3 を Inport した状態です CONFIG の値が入っています
     

    Program を行いますと正常に書き込みが出来ました 
    

  
2.ソースプログラムと IDE の設定値が異なる場合
    Buid を行いますと IDE の設定がデバッグに関係無い範囲で
    プログラムの設定に強制的に書き換えられてしまいます
    デバッグは IDE の値を基に行われ
    書き込み時にはプログラムの値が使用されます
    PIC をリードした時にプログラムで設定した CONFIG の値が
    読み出せました

  
3. IDE の Config Bit の項目について
    デバッグに関連する様な DEBUG と MCLRE の項目は窓に表示されず
    設定する事が出来ません。又プログラム上で非対応の設定を行い
    ましてもデバッグは可能でした
    この辺りデバッグ優先になっている ? のかも知れません
    Export したファイルには デバッグ非対応の値か入っていました
    タイトな CONFIG を書き込みたい場合は、プログラムで設定するか
    ライターで設定した方が無難な様に思います



 実験用 デバイス別「コンフィギレーション」設定例

    発振機能         HS 水晶等の発振素子外付け
    ウオッチドッグタイマー  OFF 未使用
    コードプロテクト      OFF 未使用
    リセット機能       一部ON パワーアップのみ使用
    クロック切り替え     OFF 未使用
    デバッグ機能       OFF 未使用、上記を参照して下さい

    16F84         __CONFIG  H'0012'      ;最初のアンダーバーは
    16F873/4/6/7    __CONFIG  H'3932'      ;2個連続です
    16F882/3/4/6/7  __CONFIG _CONFIG1,H'20E2'
                __CONFIG _CONFIG2.H'0600'

    16F882/3/4/6/7  __CONFIG _CONFIG1,H'20E4' ; 内臓発振機能使用時
                __CONFIG _CONFIG2.H'0600'


 
コンフィギレーションコードの確認、変更、追加方法

   目的のプログラムをアセンブルします
   生成された「***.HEX」ファイルを、強引に「ノートパット等」で開きます
   下から二行目位に ;02400E00
323945 等のデータが有ります
   
3932 がCONFIG の値(H’3932’)です
   デバイスに寄りましてはこの行が複数行になります
   この行が全く無い場合は未設定です
   H’3FFF’ の時 そこの CONFIG は未設定、又はその値の設定となります

   変更する場合は最後の2文字(サムチェック)を含めて変更します
   追加する場合は一行を丸々挿入します
   フアイルの「上書き保存」を行い定着します

   サムチェック(コンフィギコード)の作り方
   適当な最も短いダーミーのプログラムを作ります
   設定デバイスの指定は実際に使用する物にします
   設定したい「コンフィギコード」を記入します
   アセンブリして「***.HEX」ファイルから読み出し、コピーします


 私の反省も含めた皆様方への提案
   「ソースファイル」に「コンフィギコード」を必ず記入する様にしましょう
    くどい位のコメントも付けましょう
   「***.HEX」ファイルだけを公開又は渡す場合は、コンフィギに対する
    コメントも付けましょう
   「***.HEX」ファイルを受け取った時は「コンフィギコード」を必ず確認しましょう
   自分の使用するデバイスの「コンフィギコード」を熟知して、使いこなせる様にしましょう




    [メニューページに戻ります]