fc2ブログ

「電飾しましょっ!2~PIC編~」を参考にPICを導入する!(11)最終回

 今年も桜の季節ですね!!
 今月2度目の更新ですが、1月から続けてきた「電飾しましょっ2」応援企画も、今回で締めにしたいと思います。最終回は、これまでおつきあい頂いた皆様へのお礼も兼ねて、いくつかのプログラムを紹介してみたいと思います。

20.「黄金のPWMプログラム」を活用する!
 PICをやりたいと思った理由が、LEDをふわふわ明減させるPWMを実現したいから、という方も多いのではないでしょうか。中でもこの本のP78以降に掲載されているプログラムは、各ポート毎に別々なタイミングで明減させることが出来るなど大変汎用性の高いもので、ワタシはこれを「黄金のPWMプログラム」と呼んでおりますww

 企画の最後として、黄金のPWMを応用したプログラムをいくつか紹介したいと思います。

(1)PIC12F1822で「高速明減」 
 まず最初に紹介するのは高速点滅ではなく「高速明減」です。
 点滅は消えたり点灯したりを繰り返しますが、これはあくまでPWMの「明減」で、明るくなったり暗くなったりを繰り返し、完全に消えないのがミソです。
 ロケットのエンジンの噴射光などを表現するのに使うと実感が高まります。
 まず回路ですが、下の写真のようにRA0、RA1、RA4、RA5に抵抗を介してLEDを接続して下さい。


 ではプログラムを紹介します。
 「電飾しましょっ!2」のP56の"PIC12F1822テンプレート"を雛形にして、void main(void){ 以降を以下のプログラムに置き換えて下さい。

void main(void) {
    OSCCON = 0b01110010;
    ANSELA = 0b00000000;
   
    TRISA = 0b00001000;

    PORTA = 0;
   
//------------変数の宣言------------
//ED明減のための変数
char zentime = 65;
char ontime = 20;
char ima = 1;
char fugou =2;
 
 while(1){

 //------------明減------------
      if(ima < ontime){     
         PORTA = 0b00110011;
         }
      else{
         PORTA = 0b00000000;
         }

//---------明減ロジック---------
 ima++;
 if(ima > zentime){
     ima = 1;
     ontime = ontime + fugou; //点灯している時間を徐々に増減
     if(ontime > zentime){
            fugou = -1;
            }
            else{
                if(ontime < 20){
                fugou = 1;
            }    
       }
    }
 
 __delay_us(4);
 
}//End of while
return;
}//End of main

 コンパイル、書き込みを行い動作させると、下の動画のような明減が得られます。↓

 ヤマトの波動エンジンや、スターウォーズのX、Yウイングなどにどうぞ!

(2)PIC12F1822で「LED4個のパトランプ風」
 これも(1)と同じ回路で、下の動画のようにRA0、RA1、RA4、RA5のLEDがクルクル回転するように明減します。↓

 (1)と同様にP56の"PIC12F1822テンプレート"を雛形にして、void main(void){ 以降を下のプログラムに置き換えて下さい。

void main(void) {
    OSCCON = 0b01110010;
    ANSELA = 0b00000000;
   
    TRISA = 0b00001000;

    PORTA = 0;
   
//------------変数の宣言------------
//PWM明減のための変数
char zentime0 = 70;
char ontime0 = 2;
char ima0 = 1;
char fugou0 =2;

char zentime1 = 70;
char ontime1 = 2;
char ima1 = 1;
char fugou1 =2;


char zentime4 = 70;
char ontime4 = 2;
char ima4 = 1;
char fugou4 =2;


char zentime5 = 70;
char ontime5 = 2;
char ima5 = 1;
char fugou5 =2;

char senkou0 = 1;
char senkou1 = 0;
char senkou4 = 0;
char senkou5 = 0;

 while(1){
 
 //------順次発光・いらないところは消す------------
 
     if(ima0 < ontime0 && senkou0 == 1){
          RA0 = 1;
         }
      else{
          RA0 = 0;
      }


     if(ima1 < ontime1 && senkou1 == 1){
          RA1 = 1;
         }
      else{
          RA1 = 0;
      }
 
     if(ima4 < ontime4 && senkou4 == 1){
          RA4 = 1;
         }
      else{
          RA4 = 0;
      }

     if(ima5 < ontime5 && senkou5 == 1){
          RA5 = 1;
         }
      else{
          RA5 = 0;
      }      

//---------RA0 LEDの明減--------------     
 if(senkou0 == 1){ima0++; //手前のLEDがMAX発光になったらPWMスタート
 if(ima0 > zentime0){
     ima0 = 1;
     ontime0 = ontime0 + fugou0;     
     } //点灯している時間を徐々に増
     
     if(ontime0 > zentime0){
            fugou0 = -1;   //点灯している時間を徐々に減
            senkou1 = 1;   //MAX発光になったら次のPWMスタート           
            }
            else{
                if(ontime0 < 1){
                fugou0 = 1;
                ontime0 = 2;
                senkou0 = 0;
                }                                    
            }
     }

//---------RA1 LEDの明減--------------    
 if(senkou1 == 1){ima1++;  //手前のLEDがMAX発光になったらPWMスタート
 if(ima1 > zentime1){
     ima1 = 1;
     ontime1 = ontime1 + fugou1;     
     } //点灯している時間を徐々に増
     
     if(ontime1 > zentime1){
            fugou1 = -1;     //点灯している時間を徐々に減
            senkou4 = 1;     //MAX発光になったら次のPWMスタート           
            }
            else{
                if(ontime1 < 1){
                fugou1 = 1;
                ontime1 = 2;
                senkou1 = 0;
                }                                    
            }
     }

//---------RA4 LEDの明減--------------
 if(senkou4 == 1){ima4++;   //手前のLEDがMAX発光になったらPWMスタート
 if(ima4 > zentime4){
     ima4 = 1;
     ontime4 = ontime4 + fugou4;     
     } //点灯している時間を徐々に増
     
     if(ontime4 > zentime4){
            fugou4 = -1;     //点灯している時間を徐々に減
            senkou5 = 1;     //MAX発光になったら次のPWMスタート           
            }
            else{
                if(ontime4 < 1){
                fugou4 = 1;
                ontime4 = 2;
                senkou4 = 0;
                }                                    
            }
     }
//---------RA5 LEDの明減--------------
 if(senkou5 == 1){ima5++;   //手前のLEDがMAX発光になったらPWMスタート
 if(ima5 > zentime5){
     ima5 = 1;
     ontime5 = ontime5 + fugou5;     
     } //点灯している時間を徐々に増
     
     if(ontime5 > zentime5){
            fugou5 = -1;     //点灯している時間を徐々に減
            senkou0 = 1; //MAX発光になったらまた最初のLEDのPWMスタート
            }
            else{
                if(ontime5 < 1){
                fugou5 = 1;
                ontime5 = 2;
                senkou5 = 0;
                }                                    
            }
        }
    
     __delay_us(4);    //明減速度微調整
    
    }     //END of while
    return;
}         //END of main


 チップLEDを4方向に組み込んで光らせると回転灯のような表現ができます。

(3)PIC12F1822で「高速明減と発射発光」
 これも(1)と同じ回路で構いませんが、発光するのはRA0、RA1だけです。
 RA0は(1)のような高速明減、RA1は定期的に「パッと点灯しじわっと消えてゆく発射発光」になります。

 これも(1)と同様にP56の"PIC12F1822テンプレート"を雛形にして、void main(void){ 以降を下のプログラムに置き換えて下さい。

void main(void) {
    OSCCON = 0b01110010;
    ANSELA = 0b00000000;
   
    TRISA = 0b00001000;

    PORTA = 0;
   
//------------変数の宣言------------
//LED明減のための変数
//高速明減RA0用
unsigned char zentime = 45;
unsigned char ontime = 15;
unsigned char ima = 1;
unsigned char fugou =2;
char holdf = 0;         //RA1最大発光ホールドフラグ
unsigned char ht = 0;   //RA1最大発光ホールドタイム

//発射発光RA1用
unsigned char zentime1 = 240;
unsigned char ontime1 = 1;
unsigned char ima1 = 1;
unsigned char fugou1 =25;
unsigned char frg = 0;   //発射発光間隔調整用
 
 while(1){

 //------------高速明減(RA0)------------
      if(ima < ontime){     
         RA0 = 1;
         }
      else{
         RA0 = 0;
         }

 
  //------------発射明減(RA1)------------
      if(ima1 < ontime1 && frg == 3){   //二つの条件でANDをとり両方が揃ったら点灯する
         RA1 = 1;
         }
      else{
         RA1 = 0;
         }    

//---------高速明減ロジック(RA0)---------
 ima++;
 if(ima > zentime){
     ima = 1;
     ontime = ontime + fugou;     //点灯している時間を徐々に増減
     if(ontime > zentime){
            fugou = -1;
            }
            else{
                if(ontime < 20){
                fugou = 1;
                if(holdf = 1){   //もしRA1最大発光ホールドフラグが立ったら
                 ht++;}          //RA1最大発光ホールドタイムカウント開始
            }    
       }
    }

//---------発射明減ロジック(RA1)---------
 ima1++;
 if(ima1 > zentime1){
     ima1 = 1;
     ontime1 = ontime1 + fugou1; //点灯している時間を徐々に増減
     if(ontime1 > zentime1){
            fugou1 = 0;          //最大発光
              holdf = 1;         //最大発光をホールドフラグオン
            if(ht > 20){         //最大発光ホールドタイムはこの数字で調整する
                fugou1 = -1;     //減光開始
              holdf = 0;         //最大発光をホールドフラグオフ       
            }
     }
            else{
                if(ontime1 < 1){
                frg++;      //1発光サイクル毎にfrgをインクリメントする
                ht = 0;     //1発光サイクル毎に最大発光ホールドタイムをリセットする
                fugou1 = 25;
            }    
       }
    }

 if(frg > 3){
     frg = 0;}     //frgが5を超えたらfrgをリセットする
 
 __delay_us(10);   //やはりこれがあると滑らかなPWMになりますね。お好みで調整して下さい。
 
}//End of while
return;
}//End of main


 エンジン噴射とレーザー発光など、本来なら二つのPICで別々に行うものが一つのPICにまとまります。1822は全部で5個のLEDを点灯させることができますから、プログラムを工夫すればXウイングの4個のエンジン発光と、プロトン魚雷発射発光を一つのPICで表現できますね。

(4)プログラムを弄り倒す中から新しい発見が!
 これらのプログラムは、いずれも黄金のPWMを色々弄り倒しつつ制作したもので、同じような動きをするプログラムでも色々な手法が存在すると思います。
 大ベテランのプログラマーから見れば「何と無駄な事を!」と思われるかも知れませんし、「こうすればもっと簡単に実現できるよ!」ということもあると思います。
 いずれにせよ大事なのは、まず弄り倒してみる事です。
 変数の値を変えてみたり、実行するプログラムの順番を変えてみたり、時にはエラーを出したりする中に新しい発見があります。
 時にはおかしな動きをするかも知れませんが、それで誰も死にませんw

21.まとめ・・・のようなもの 
 さて、そろそろ終わりとしたいのですが、最後にまとめらしき事を・・・
 第1回で申し上げたように「電飾しましょっ!2〜PIC編〜」は、単に読むだけのものではありません。読むだけだときっと眠くなりますよんww。
 やはりこの本は、実際にPC画面やPICライターなどを使い、悪戦苦闘しながら読む事で、本来かなり遠回りしなければ習得できない技術を最短距離で「身に付ける」ためのツールだと私は思っています。
 限られた紙面の中で様々な工夫がなされ、必要機材を揃えるところからプログラムの実践までを解説するだけでなく、最後にはかなり高度なPWMのプログラム手法までを解説しています。 これを身に付ける事で、将来はサーボモーターやDCモーターをコントロールし、模型に動きを付ける、なんて事も決して夢ではないのです!!!

 と、まあかなり熱く語りましたが、そこは一つ、肩の力を抜いて、この本を片手に一人でも多くの皆さんがPICマイコン電飾をモノにされる事を願っております。
 このカテゴリーではこれからも面白いプログラムやノウハウを紹介していけたらと思っていますが、その前にブログの引越しが先ですねww。
 それでは皆様。ここまでお付き合い頂きありがとうございました!(了)

「電飾しましょっ!2~PIC編~」を参考にPICを導入する!(10)プログラムライブラリーを増やそう!

 また少しの間更新が滞っていましたが、3月も半ばを過ぎ、そろそろ桜の季節ですね。
 さて、皆様如何でしょうか?PICマイコン導入はうまくできましたか?

 twitterなどでは、この本を参考にPIC導入に成功された方々の嬉しいコメントなども幾つか拝見しております。この「電飾しましょっ!2」ですが、以前から誤植が指摘されていた部分もあり、モデルカステン のHPに正誤表がアップされております。


 P78から79にかけてのPWMのプログラムは一部で欠落があったのですが、それも訂正されており、pdfファイルには改めてソースコードが掲載されておりますのでご利用くださいませ。

19.プログラム開発の進め方
 MPLAB X IDEのファイル管理についてはひと段落して、実際にプログラムのレパートリーを増やす事にしましょう!

(1)似たようなプログラムを雛形にして発展させる
一応テンプレートなども作られたと思いますが、似たようなプログラムを雛形にして、その発展形を作る方が早い場合もあります。
 この本で紹介されている、LEDをふわふわ明減させる「PWM」のプログラムを例にすると、こんな感じで進めて行くのがよろしいかと思われます。↓


 PICに書き込んで、ちゃんと動かせたらそれを雛形にしてどんどん発展させて行くやり方ですが、こうする事でプロジェクト内にプログラムライブラリーができてきます。
 私の場合、こうしてプロジェクト内にプログラムライブラリーを作って管理していますが、とっても大切なプログラムはテキストファイルで別に保存する事も併せて行なっています。

(2)ファイル名を分かりやすく付ける
 プログラム(ソース)の名前は、分かりやすく付けましょう。
 私の場合は、まず作った日付を先頭に付けます。例えば、

      190317 YAMATO MAIN ENGINS.c
      190317 X WING ENGINS.c

 というようにしています。
 ど頭の数字は2019年の3月17日で、宇宙戦艦ヤマトのエンジン発光ようのプログラム。その下はXウイングの4個のエンジンノズルを発光させるプログラムで、どちらもPWMによる高速明減プログラムを使用しています。
 作った時期がわかれば、「確か昨年の夏に作ったアレと同じようなプログラムでいいよな?」なんて時に引っ張り出してきてSave Asして修正すれば使えますからねww


(3)プログラムの先頭には表題コメントを付ける
 プログラムには、まず全体の概要がわかるようなコメント表題をつけています。
↓下は、最近依頼されて制作したギミック回路用のプログラムの冒頭コメントです。

/**********************************************************
 * ファイル名:190226 SOL TB2 sound gimmick.c
 * デバイス名:PIC16F1823
 * 使用キット:TB2エレベーターカージオラマギミック
 * 作 成 日:2019年02月26日
 * 作成環境:MPLAB X IDE (v4.15) XC8コンパイラ(v1.45)
 * 概  要:MP3音声プレーヤー音源再生とモーターなどのタイミング形成
 * Ver 2.1
 *
 * 使用ポート
 * RA3 is INPUT:ギミックスタート
 * RA0:ギミック音声再生
 * RA1:冒頭5-1秒読み開始パルス
 * RA2:ボタンが押せるまでの時間60秒カウントダウンスタートパルス
 * RA4 is INPUT:5分タイマー機能ON/OFF
 * RC0:モーター回路ON/OFF(リレー回路)
 * RC3:ボタン照明

 ***********************************************************/

 これは全てのプログラムについて書いているわけではありません。開発の途中経過のものはもっと簡略したメモ程度しか書かないのですが、正式に完成し模型に組み込んだものは、面倒でもこれくらいの情報を書いておけば、後で別なものに応用する時にも役立ちます。

 さて、今日のところはここまでとし、次回はここまで気長に付き合って頂いた皆様へのお礼として、いくつかのプログラムを紹介して一応区切りとしたいと思います。

 また、Yahooブログサービス終了に伴い、当ブログも引越しを検討中です。(つづく)

「電飾しましょっ!2~PIC編~」を参考にPICを導入する!(9)MPLAB X IDEについて-3-

 前回記事が尻切れトンボになってしまいましたスミマセンww
 前回の、1827と1822のプロジェクトが開いた状態から続けます。

(5)1827のテンプレートを「Open File」して
   1822のテンプレートを作る
 前回、PIC12F1822のプロジェクトを作成したので、次に1822用のテンプレートを作成してみます。

1822のプロジェクトで、"Source Files"を右クリック
●"New" → "C Source File..."を選択。↓(Windowsと操作環境が違うかも・・)


●ファイル名は"1822TEMPLATE"にしました。保存先(Project:)は1822のプロジェクトになっていることを確認します。

●"Finish"をクリックします。



●これで1822のプロジェクトに「まっさらのファイル」ができてきます。
●↓Source FilesにもちゃんとAddされているのがわかりますね。


●「電飾しましょっ!2」のP55に書かれているように「メモ帳」や「テキストエディタ」に1827のテンプレート(テキスト形式)を保存されている方は、それを開いてきて今作った「まっさらなファイル」にペーストして、1822用にプログラムを修正します。
●が、ここではOpen Fileを使って1827のプロジェクトに保存されているテンプレートを開いて、今作ったファイルへコピペしてみます。

Fileメニュー → "Open File..."を選択。



●PCの一番表層のフォルダが開いた場合は、↓


●"MPLABXProject"フォルダを探してダブルクリックします。↓



1827のプロジェクトダブルクリックします。↓



●1827のプロジェクトの中身が開くので、"1827TEMPLATE"を選択。
"Open"をクリックします。


●エディタに"1827TEMPLATE"が開くので、


●Windowsなら"Ctrl" + "A"
●Macなら"command" + "A"
  で、中身を全て選択します。



 続いて、
●Windowsなら"Ctrl" + "C"
●Macなら"command" + "C"
  で、コピーします。

●先ほど作った"1822TEMPLATE"(まっさら)のタブを選択し、


●Windowsなら"Ctrl" + "V"
●Macなら"command" + "V"
  で、ペーストします。


●それから必要な部分を1822用に修正します。
 ペーストされたプログラム文をスクロールダウンしていくと、エディタの働きにより行番号のところにマークがついています。P55後半から解説されている不要な部分に相当するところですので、これは消してしまいます。



●修正するとこんな感じになります。



●Windowsなら"Ctrl" + "S"
●Macなら"command" + "S"
     で保存して、試しにコンパイルしてみます。ハンマーにホウキボタンをクリック!!

●コンパイルは1822のプロジェクトに対して行われる筈です。



これで1822のテンプレートが作成できました。このテンプレートを"Save As"する等して、新しいプログラム作成に着手できます。
 なお、参考にした1827TEMPLATEは×をクリックして閉じてしまいます。(開きっぱなしにすると思わぬ間違いの元ですww)

 新しくプロジェクトを作った時は、
P67後半からP68にかけてのPICkit3の設定をお忘れなく!!

 このように"Open File"を使って、以前に作ったソースを開いてプログラムを参照したり、コピペしたりすることができます。テキストファイル形式で保存したものをコピペする場合とそれ程労力は変わらないので、好みの問題とも言えますがww

 前回でアップし損ねた部分まで書けたのでここで一旦切ります。(つづく)

「電飾しましょっ!2~PIC編~」を参考にPICを導入する!(8)MPLAB X IDEについて-2-

 続けます!
 前回に引き続き、MPLAB X IDEに関して、私の半ば自己流な使い方を紹介していきます。
 Add、Removeに続いて、基本的なファイル管理についてです。

(3)”Open/Close Project”
 例によってMPLAB X IDEを起動します。
 すでにお気づきでしょうが、MPLABは前回の最後の状態を記憶しているので、何もしなければ前回通りな画面で立ち上がってきます。


●これから説明する事柄を分かりやすくしたいので、右側のエディターのタブ(tenmetsu.cが開いている)の✖︎をクリックして閉じます。
●Outputのタブも開いていたら✖︎をクリックして閉じて下さい。

●現在開いているプロジェクト(左画面)のSource Filesに呼び出されているファイルを右クリックしてRemove From Projectして下さい。


●さらに現在開いているプロジェクトを選択し、Fileメニューから、Close Project(ファイル名)を選択し、プロジェクトを閉じます。消す訳ではなく閉じるだけですのでご安心を!


●画面上から何もいなくなりました。↓



●この状態で一度MPLAB X IDEを終了します。
 Windowsなら、Fileメニューから一番下の"Exit"を選択する。


 Macは、一番左端のMPLAB X IDEをプルダウンして、"Quit MPLAB X IDE"を選択する。


●で、再びMPLAB X IDEを起動します。
 終了する前の状態で立ち上がってくると思います。色々説明したいが為に全部閉じちゃっているので、ここからまず16F1827のプロジェクトを開きます。
 やり方は複数ありますが、取り敢えず、

File Open Projectを選択 →



MPLABProjectsフォルダの中身が表示される → 自分が作った16F1827のプロジェクトを選択し、右下の"Open Project"をクリックする。


●プロジェクトはこのように必要に応じて閉じたり開いたりします。
●プロジェクトの左側の三角ボタンをクリックすると中身が表示され、もう一度クリックすると中身は閉じます。




Source Files右クリックして、"Add Existing Item..."を選択。
 必要なソース(この例では"tenmetsu.c")を選択して呼び出します。↓


Addされた"tenmetsu.c"をダブルクリックするとエディターのタブが開きます。↓


●後はコンパイルしてPICに書き込むなり、Save Asして新しいソースを作って開発を進めるという事なのですが・・・・・・。

(4)複数のプロジェクトを操作する(Set/Unset as Main Project)
 その前に「電飾しましょっ!2」の中で使うもう一つのデバイス。PIC12F1822のプロジェクトをまだ作っていませんでしたね。
 「03活用編」P50〜51にかけての「プロジェクの作成」の手順で作りましょう。

手順4で、デバイスは"PIC12F1822"を選びます。
手順8で、ファイル名はデバイス名がわかるようにつけます。EncodingShift JISである事を確認します。
●そしてもう一つ!
 "Set as main project"にチェックが入っていたら外して下さい!!


Finishをクリック。
 新たにプロジェクトが出来ました。
 MPLABではこのように複数のプロジェクトを開いて作業が出来ますが、これが結構紛らわしいのですww


●下のスクショを良く見て下さい。↓
 1827のプロジェクト強調文字(太文字)になっています。これは1827のプロジェクトがMPLABのメインプロジェクト」に選ばれている事を指します。



●この状態では1822のプロジェクトにソースファイルを作ってもコンパイルや書き込みはできません。コンパイルすると常にメインである1827のプロジェクトで実行されてしまいます。

●それでは困る!という場合は、メインプロジェクト設定を外します。
太文字の1827のプロジェクト右クリック!



●"Unset as main project"を選択。
●これで1827のプロジェクトはメインプロジェクトから外れました。(強調文字でなくなる)
●逆にメインプロジェクトに指定したい場合は、
 指定したいプロジェクト右クリック"Set as main project"を選択。

 先ほどプロジェクト作成の時に"Set as main project"にチェックを外すという意味はこれだったのです。もちろんメインプロジェクトに指定したい場合はそのままですがww

●どちらもメインプロジェクトではない状態では、マウスで選択したプロジェクトのコンパイルや書き込みが行えます。


 この続きも書いたのですが、なぜかうまく反映されないので今回はこの辺で。(つづく)



「電飾しましょっ!2~PIC編~」を参考にPICを導入する!(7)MPLAB X IDEについて-1-

 少し間が空きましたが、この本を参考にPICに挑戦された皆様。
 うまくいきましたか?

 twitterなどで私が知る限りでは、何名かの方々がPICプログラム開発、書き込み環境をゲットされたようで、嬉しいお声が聞こえてきておりますww
 本の売れ行きも予想よりかなり良いようで、メデタシメデタシと言ったところでしょうか。


 さて、この投稿もそろそろまとめてどうやって終わらそうか?と迷っているのですが、とりあえずあと2、3の事柄について述べたい思います。

18.MPLAB X IDEのファイル管理
 「電飾しましょっ!2」ではMPLAB X IDEに関しては最低限しか説明されておりません。
 これは紙面上の制約に加えて、
●日進月歩のバージョンアップにより近い将来は画面などが変わってしまう。
●現状においてもWindows 版やMac版、各バージョンにより画面や操作環境に違いが出る。
 などがある為です。

 しかし、覚えていると便利な使い方もあるので、このブログにおいては、
 現状で私が使用しているMac版MP LAB X IDE バージョン4.15という条件付きで記述してみたいと思います。

(1)プロジェクトファイルの保存フォルダの在り処
 特に指定しなければ、作成したプロジェクトファイルは、Windowsの場合はCドライブのユーザーフォルダの一番表層に"MPLABXProjects"というフォルダに保存されます。↓


 Macでも、Macintosh HD→ユーザー→自分のユーザー名の中に"MPLABProjects"というフォルダがあり、そこに保存されます。↓


 これらは直接開くことは少ないと思いますが、必要ならショートカットやエイリアシスを作ってデスクトップに貼っておくと良いでしょう。
 ちなみに私はMacですが、プロジェクトフォルダを開くとこんな感じになっております。


 私は、以前の古いバージョン時代からプロジェクトはデバイス単位で作り、プログラムソースは各プロジェクトフォルダの中に保存して管理しています。
 いろいろなサイトを参考にしつつ自己流でファイル管理した結果、現在こうなっているというのが正直なところで、メリット、デメリットがあると思いますが、どうか一個人のやり方という解釈でお付き合い願います。
 では次に実際にMPLAB X IDEを起動して、プログラム開発や書き込みなどを行う中でのファイル管理について説明したいと思います。

(2)”Save As”と"Remove From Project"  ”Add Existing Item”
 これを説明するために時計の針を1月19日投稿の記事に戻します。


 ここではPIC16F1827のプロジェクトを作り、"main.c"というソースファイルを作りました。
 そして最後にP66のようなプログラムを書き込んでLEDを点滅させました。
 現状で、下のスクショのように"main.c"が開かれている状態として話を進めましょう。

●P54のPIC16F1827用テンプレートを保存する(別名保存)
 LED点滅のために書き加えて部分

        RB0 = 1;
        __delay_ms(500);
        RB0 = 0;
        __delay_ms(500); 

           は消して、P54の状態に戻して下さい。



 念のため、
 Windowsなら"Ctrl + S"
 Macなら"command + S"で保存します。

 更にプログラムに間違いがないかどうか?P55に書かれているようにコンパイルしてみます。
 正常にコンパイルできたら、P55に書かれているメモ帳やテキストエディタにmain.cの中身を全部コピぺし、テキスト形式で保存する方法に加え、もう一つ方法としてプロジェクト内に別名保存(Save As)してみます。

 上図のような状態から、File→Save Asを選択。


ファイル名をつけます。 名前は"1827TEMPLATE.c"としました。
 拡張子の .cを必ずつけて下さい!!

保存先は現在使用中のプロジェクトになっていますので、そのまま③Saveをクリックすると別名保存が実行されます。
 下図のようにエディタのファイル名が"1827TEMPLATE"に変わりました。

●いま作ったテンプレートを別名保存して、点滅プログラムを作る
 実はある事を知って頂きたい為にちょっと回りくどい事をしております。
 テンプレートができたので、さらにこれをSave Asして違うプログラムを作り保存します。
 今、"1827TEMPLATE"が開いている状態で、もう一度File→Save Asを選択。

 次はファイル名を"tenmetsu.c"と付けて保存します。


 上図のようにエディタータブが"tenmetsu.c"に変わったら、それに改めてP65のプログラム文を書き加えます。RB0が0.5秒おきに点滅するプログラムです。

        RB0 = 1;
        __delay_ms(500);
        RB0 = 0;
        __delay_ms(500); 

 Windowsなら"Ctrl + S"
 Macなら"command + S"で保存します。

 この段階で上図の左上の赤い注意書きをみて下さい。
 Source Filesの項目に呼び出されているのは最初に作った"main.c"というファイルです。



 さてお立会い!!
 この状態でPICに書き込むと何が起きるか?やってみます。
 書き込みアダブターにPIC16F1827をセットし、書き込みボタンを押して下さい。
 書き込みはできる筈なのですが、PICをブレッドボードに移動して点滅させてみると・・

点滅しない!!

 原因は上図の赤い注意書きの通り、
 Source Filesに呼び出されているファイルがコンパイル、書き込みの対象になるので、今書き込まれたのは右側でエディットした点滅プログラムではなく、テンプレートの元になった「何もしないプログラム」だったというオチですw

 これは前々回記事の「トラブルシューティング」にもなりますが、プログラムを書き換えたけどPICに書き込んでも反映されない!
又は正常に書き込みが出来ない原因に一つにもなります。

●書き込み対象でないファイルをRemoveする。
 次の方法で"main.c"Removeします。

①Source Filesの下の"main.c"を「右クリック」
②Remove From Projectを選択すると、
③Source Filesの項目の下から消える。(※ファイルを消したのではなく外しただけ)


●書き込み対象のファイルをAddする。
 次に本来書き込みたいファイルをSource Filesに呼び出します。

①Source Filesを「右クリック」
②Add Existing Item...を選択


③ポップアップ画面に、現在このプロジェクト内に保存されているファイル一覧が表示される。
 最初に作ったmain.c や1827TEMPLATEなどもちゃんと保存されている。
 Addしたい(呼び出したい)ファイル"tenmetsu.c"を選び、

④Selectをクリックすると、




⑤Source Filesの下に"tenmetsu.c"がAddされます。

 改めてPICに書き込んでみて下さい。
 ちゃんと点滅する筈です。

 なお、下のスクショのように複数のファイルをAddした状態でコンパイルするとエラーになります。



●まとめ
①画面左のSource Filesには書き込もうとするファイルを呼び出す。
②右側のエディタのタブにも同じファイル名が開かれている事を確認する事。
③Source Filesに複数のファイルを呼び出した状態で書き込むとエラーになる。

 ぎょえええええ大変だ〜全然進まない!!
 自分のハマってきた道なんですが、こうして説明しようとすると難しいですねww
 とりあえず今日のところはここまでとします。

 残りはまた次回に!!(つづく)

プロフィール

toshi580909

Author:toshi580909
プラモデルの製作記などをダラダラと書いてみます。
飛行機(旧海軍機)がメインですが、最近はスターウォーズなどSFにも手を染めています。
さて、いつまで続くかな・・・・

最新記事
最新コメント
カテゴリ
RSSリンクの表示
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
カレンダー
02 | 2024/03 | 04
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -
カウンター
月別アーカイブ