私は、2013年からPICの勉強を始めました。勉強とPICを使った製作の経過は、JH7UBCホームページのこちらに掲載しています。
最初の頃は、MPLAB IDEとアセンブラの組み合わせでプログラミングをして、HEXファイルを自作のPIC writer(RCDライタ,writer509,PICerFTなど)で書き込みを行いました。PIC用のアセンブラで煩わしいのが、BANK切り替えでした。
2018年からMPLAB X IDEに切り替え、言語もXC8に変更しました。これに伴い、BANK切り替えの煩わしさからは解放されましたが、各レジスタの設定は、先人のWeb上の情報や、PICの説明書などを見ながら行ってきました。PIC writerは、PICKit3を購入して、IDEでbuildして即書き込みができるようになりました。
最近、MPLAB X IDEでプラグインのMCC(MPLAB Code Configurator)を使えば、各種設定が画面上ででき、configやレジスタ設定のコードを自動で生成してくれ、プログラム開発の効率が格段に向上することを知りました。
そこで、さっそくMCCをインストールして、試してみることにしました。インストールのしかたは、こちらのサイトなどを参照してください。
手元にPIC16F84がたくさんあったので、これで試そうと思ったのですが、これらのレガシーPICにはMCCは対応していないようです。F1シリーズに対応しているようです。そこで、最もシンプルなPICであるPIC12F1822(8pin PIC)を使ってみます。定番のLチカをやってみます。回路図です。
![](https://blogimg.goo.ne.jp/user_image/5e/cd/53d2b0d988f8d1c816044add304cdfcc.png)
まず、PIC12F1822_Blinkという名前でprojectを作成。
次に、各種設定を行うために、MPLAB IDEのメニューからTools→Enbendded→MPLAB Code Configuratorを開きます。次のような画面になります。
![](https://blogimg.goo.ne.jp/user_image/12/08/7de245682047209ca62d3f52ea9491b4.png)
右上にPINの配置図、左側にmoduleなどの選択、真ん中に各設定項目が表示されます。
まず、System Moduleで、クロックやレジスタの設定を行います。
内部クロックで16MHzとします。
LEDは、RA1に接続することにしますので、画面の一番下に表示されているPin ManagerでPortAの1,outputのカギマークをクリックします。
![](https://blogimg.goo.ne.jp/user_image/36/7f/e4554a0f595eb2bcccbaa9b54900b536.png)
次に、Registersタグをクリックすると各レジスタの設定ができます。
![](https://blogimg.goo.ne.jp/user_image/41/23/06e2ee713f89daf6189cb104ebb4160f.png)
一応上の図のように設定しました。
Pin Modeを詳しく設定します。MCC画面の左上のProject ResourcesをPin Moduleに切り替え、RA1のoutoutだけを指定します。
![](https://blogimg.goo.ne.jp/user_image/6c/1e/5197e8d697c19877787bd5e489869512.png)
今回の設定は、こんなもので大丈夫でしょう。左上のTree ViewのGenerateをクリックすると各種設定ファイルが自動的に生成されます。
MCCを終了して(MCCのアイコンをクリックすると終了します)設定ファイルの中身を見てみます。
mcc.cです。OSC関係とWDT設定が生成されています。
![](https://blogimg.goo.ne.jp/user_image/59/11/5267142b3ad6eb5c4bfbe2dbf4f04629.png)
device_config.cです。設定したとおりにconfigが生成されています。
![](https://blogimg.goo.ne.jp/user_image/5d/a0/b88178cd09added86a50c34ddb39b730.png)
pin manager.cです。pin設定のコードが生成されています。
![](https://blogimg.goo.ne.jp/user_image/4b/48/83bde406a01eebe1c8fa9eb20f45eb8f.png)
この時点で、main.cも次のような形で自動的に生成されています。
-------------------------------------------------------------
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
}
}
void main(void)
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
}
}
--------------------------------------------------------------------
プログラムは、
while(1){
}
の間に記入します。
RA1に接続したLEDを500msごとに点滅しますので、次のようにしました。
PIC F18シリーズには、LATレジスタがありますので、RAレジスタではなく、LATAレジスタを操作しています。
![](https://blogimg.goo.ne.jp/user_image/6c/a3/08754fd07874eab8777e7f293165bfb1.png)
ブレッドボードです。電源は電池2本で供給しています。
![](https://blogimg.goo.ne.jp/user_image/4c/9f/4c8f9f87ec4aefd8917fca829b4b8e3e.jpg)
プログラム通りLEDが点滅しました。
初めてMCCを使いましたので、記事の中に誤りがあるかもしれません。
その場合、コメントなどで教えていただきたいと思います。
※コメント投稿者のブログIDはブログ作成者のみに通知されます