PIC開発 (PIC16F19155 でLチカ)

PICの開発環境は改良が続けられている。メーカーであるmicrochipが供給するツールやライブラリの品質も大きく向上し、以前のものとはまったくの別物でC言語での開発も十分に可能である。また、PICはArduinoなどと比べ価格や消費電力など有利な点も多い。この記事では、マイコンにPIC16F1955 開発環境にMPLAB X IDE、書き込みツールにMPLAB SNAPおよびC言語(xc8)を使用した開発手法について解説する。まずはLEDをチカチカさせる。

#入手方法

私は次のサイトで入手した。


| 種別           | 品名        | 入手先    | URL                                                                                     | 
| -------------- | ----------- | --------- | --------------------------------------------------------------------------------------- | 
| マイコン| PIC16F19155 | 秋月電子  | https://akizukidenshi.com/catalog/g/gI-13504/                                           | 
| 書き込みツール | MPLAB SNAP  | 秋月電子  | https://akizukidenshi.com/catalog/g/gM-13854/                                           | 
| IDE            | MPLAB X IDE | microchip | https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide        | 
| C言語          | xc8         | microchip | https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers | 


この他に抵抗、ブレッドボード、LED、コンデンサー、タクトスイッチ、ICクリップなども秋月電子で購入している。

#回路図

実際にはRC1に接続したLED1個しか使わないが、LED2個とSW1個およびPIC構成される回路図を作成した。また、MLABO SNAP に接続するためのJ1を記載した。水晶発振器などもないこともあって非常にシンプルである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/df87b6ce-c982-95cc-f25f-905ece7e62d5.png)


#ソフトウェアのインストール

私はxc8⇒MPLAB X IDEの順でインストールした。MPLAB X IDEをインストールしたあと、MPLAB X IDEのメニューTools⇒plaginから、MPLAB Code Configuratorをインストールする。MPLAB Code Configurator(MCC)は強力なツールでサンプルソースが不要なほどにコード生成を支援してくれる。

#MPLAB SNAP (書き込みツール)
MPLAB SNAPは書き込みの他にステップ実行や変数Watchなどのデバックができるハードウェアである。パソコンとはmicro USB端子を用いて接続し、PICとはジャンパーワイヤなどを用いて接続する。配線を下表にまとめる。コンデンサーや抵抗を挟まずに直接接続する。電源は、マイコン側を切ってからMPAB SNAPを切る。PICKIT4とは異なり電力はMPALB SNAPからは供給されない。

| MPLAB SNAP | PIC16F19155 | 備考                                             | 
| ---------- | ---------- | ------------------------------------------------ | 
| 1 MCLR     | 1 MCLR     | 通常実行時には外さないと動かない場合がある。                              | 
| 2 Vcc      | 20 Vcc     | MPLAB SNAPからは供給されないので、別途電源が必要 | 
| 3 GND      | 19 GND     |                                                  | 
| 4 PGD      | 28 ICSPDAT |                                                  | 
| 5 PGC      | 27 ICSPCLK |                                                  | 
| 6NC        | -          | 接続しない                                       | 
| 7 -        | -          | 接続しない                                       | 
| 8 -        | -          | 接続しない                                       | 


#プロジェクトの作成
MPLAB X IDEからFile⇒NewProjectで表示されるダイアログに従いプロジェクトを作成する。
1.Standalone Project
2.Device >PIC16F19155選択
  Tool> Snap-XXXXXを選択(XXXXXはシリアル番号？)。表示されない場合は、MPLAB SNAPとの接続に問題がある。
3.XC8 (v2.32)を選択
4.ProjectName>プロジェクトの名前をつける。ここではltikaにした。
最後、Finishボタンででプロジェクトがでる。

#PICの設定
次にMCCを使って、PICの設定を行っていく。MCCのアイコンがない場合は、プラグインの設定を確認する。
## 動作周波数の設定
今回は内蔵クロックを利用し32MHzで使用するので、次画像のようにCurrent System Clockが32MHz (2x PLL)になるように設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/30fdcc33-e25e-2300-b6e5-5284d3b11028.png)


## 入出力の設定
MCCを用いて回路図の通りRC0 RC1を出力、RC4入力に設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/0394918f-3c90-4ccb-4f15-62de3a886a36.png)


## pullupの設定
RC4は内部pull upを設定する。内部pull upを使う場合はWPUにチェックを入れる。WPUはweak pull upの略。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/cd421854-0216-ce98-e460-1c087f7eab6e.png)

##コードジェネレート 
あとは、Generateボタンをクリックすると、ここまでのPICの設定を行うコードが生成されプロジェクトに追加される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/42970e6c-5a6e-5cae-ca3e-39b6bb65518f.png)


#ソフト
次にLEDをチカチカさせるコードを記載する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/040a9ce9-ab5e-de71-37ba-a3a66472ea02.png)
のmain.cをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/fa7b6aa3-d959-cd8a-3784-4e2be9e2c6ff.png)

main関数のwhileブロックの中に、LEDを光らせるコードを書く。

```
    while (1)
    {
        // Add your application code
        IO_RC1_SetHigh()  ; 
        __delay_ms(500);      
        IO_RC1_SetLow()  ; 
        __delay_ms(500);        
    }
```

このコードは500ms(=0.5秒)ごとにRC1のLEDを点滅させる。IO_RC1_SetHigh()およびIO_RC1_SetHigh()はRC1のデジタル出力を行うマクロで、MCCで生成されるpin_manger.hで定義されている。このファイルには他にもIO_RC3_Toggle() なども定義されているので一読するとよい。__delay_msは引数分のms間停止するマクロである。pic.hで定義されおり、xcに組み込まれている_delay関数を呼び出す。

##実行

画面の上部 ミドリ三角ボタンの再生ボタンをクリックするとPICに転送され実行される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/1d921547-0a8d-cb84-5b64-5063a00b9405.png)

実行中の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1256483/e455c8fa-76d1-5769-e38d-70f6210c057c.png)

#次回の予定

タクトスイッチを使った例を紹介する。