今回の演習環境は以下の通りです。

演習環境:


1. GPIOとは


演習 1-1 (個人PC): PIC にプログラムの書き込みをしてみましょう。

テンプレートプロジェクトをダウンロードして展開してください。
IDE を起動してテンプレートプロジェクトを開いて下さい。
コンパイルボタンを押してエラーが無いことを確認して下さい。
今回は USB から電源を供給するので、PICkit の Power 設定は必要ありません。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が接続箇所です。
PIC のピン配置についてはデータシートの 5p 、PICKit のピン配置については PICKit のマニュアルを参照して下さい。

ピン配置設定・回路接続方法:

1: RA2
2: RA3
3: RA4
(*) 4: MCLR/VPP -- PICkit の 1: NMCLR ※ PIC内部で弱プルアップされてるのでプルアップ抵抗必要無
(*) 5: VSS -- GND(接続済)  ※ PICkit から電源を取る場合は 3: GND
6: RB0
7: RB1
8: RB2
9: RB3

10: RB4
11: RB5
(*) 12: ICSPCLK -- PICkit の 5: PGC
(*) 13: ICSPDAT -- PICkit の 4: PGD
(*) 14: VDD -- 3.3V(接続済) ※ PICkit から電源を取る場合は 2: Vdd
15: RA6
16: RA7
17: RA0
18: RA1

書き込みボタンを押して正常に書き込みできる事を確認して下さい。
指定場所に「正常書き込み完了時のメッセージ」をコピーして記入して下さい。


2. 出力モード


演習 1-2 (個人PC): GPIO を使って LED を光らせてみましょう。プログラムの仕様は以下の通りです。

仕様:

  1. RA0 (17ピン) をデジタル出力モードにする
  2. RA0 (17ピン) に LED を接続する
  3. LEDが 200 ミリ秒光る → 200 ミリ秒消える → 200 ミリ秒光る ・・・を繰り返す

演習1-1から続けます。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。

ピン配置設定・回路接続方法:

1: RA2
2: RA3
3: RA4
4: MCLR/VPP -- PICkit の 1: NMCLR
5: VSS -- GND
6: RB0
7: RB1
8: RB2
9: RB3

10: RB4
11: RB5
12: ICSPCLK -- PICkit の 5: PGC
13: ICSPDAT -- PICkit の 4: PGD
14: VDD -- 3.3V
15: RA6
16: RA7
(*)17: RA0 (GPIO出力) -- LED
18: RA1

テンプレートのままだと 1000 ミリ秒周期で点滅しますので、200 ミリ周期になるようにソースを変更します。
書き込みボタンを押して正常に動作する事を確認して下さい。
指定場所に「main.c」を記入して下さい。


3. 入力モード


演習 1-3 (個人PC): GPIO を使ってデジタル入力をしてみましょう。プログラムの仕様は以下の通りです。

仕様:

  1. RB0 (6ピン) をデジタル入力モードにセットする
  2. RB0 (6ピン) にタクトスイッチを接続する
  3. タクトスイッチを押してない時は LED が消えている
  4. タクトスイッチを押すと LED が点く

テンプレートプロジェクト(template)を「IO_1_3」にコピーします(プロジェクト名を右クリックして Copy を選択)。
テンプレートプロジェクト(template) を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
(MPLAB のバージョンによっては) プロジェクトのプロパティを開き、そのまま「Apply」ボタンを押して設定ファイルを更新します。※ 通常は自動で設定ファイルが更新されますが、バージョンによってはバグのため自動更新されないようです
setting.h を開き、デジタル入力(USE_INPUT)のコメントアウトを解除します。
input.c を開いてコメントに従って設定します。
main.c を開き、ファイルの中身をテンプレートの内容に置き換えて下さい。
穴埋め問題になっていますので、プログラム内のコメントを参考に?のところを正しい内容に修正してください。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。

ピン配置設定・回路接続方法:

1: RA2
2: RA3
3: RA4
4: MCLR/VPP -- PICkit の 1: NMCLR
5: VSS -- GND
(*)6: RB0 (GPIO入力) -- タクトスイッチ ※ PIC内部で弱プルアップしてるのでプルアップ抵抗必要無
7: RB1
8: RB2
9: RB3

10: RB4
11: RB5
12: ICSPCLK -- PICkit の 5: PGC
13: ICSPDAT -- PICkit の 4: PGD
14: VDD -- 3.3V
15: RA6
16: RA7
17: RA0 (GPIO出力) -- LED
18: RA1

書き込みボタンを押して正常に動作する事を確認して下さい。
指定場所に「input.c」と「main.c」を記入して下さい。



演習 1-4 (個人PC): デバッガを使ってみましょう。

引き続きプロジェクト「IO_1_3」を使用します。
コンパイラをデバックモードにします。プロパティーを開き、XC8 Compiler → Option Categories → Optimizations の中にある Debug と Local Code Generation をチェックして OK ボタンを押して下さい。
「NOP()」の行にブレークポイントを打ちます。行番号の所をクリックしてください。
Debug → Debug Project でデバッグを開始します。
タクトスイッチを押すとブレークポイントの行でプログラムが停止します(※1)。
プログラムを停止した時点における RA0 と RB0 の値を変数ウォッチやマウスオーバー時のポップアップ(※2)で確認します。
ブレークポイントを解除し(行番号をクリック)、Debug → Continue で実行を再開します。
Debug → Finish でデバッグを終了します。
指定場所にプログラムが停止した時の 「RA0の値」と「RB0の値」を記入して下さい。

※1 最適化の影響でたまにブレークポイントを置いても停止しない場合があります。
もし停止しない場合は止めたい場所に以下のコードを挿入すると無理やり停止できます。

// 止めたい場所に挿入
while(1){
  NOP(); // ここにブレークポイントを置く
  NOP();
  NOP();
}

※2 マウスオーバーした時の数値を10進数表示にしたい場合は、Window メニュー → Debugging → Watches で Watches タブを開き、 左側の一番下にある$マークアイコンをクリックし、Decimal を選択します。