PIC解説

PIC超入門!ゼロからLチカまでの道【その3:コンフィギュレーション~プログラミング】

投稿日:

前回プロジェクトを作成して設定まで終わったのでいよいよプログラミングに入ります。PIC の第一の関門であるコンフィギュレーションも順を追ってやっていけば簡単にできます。

前回の記事はこちら

PIC超入門!ゼロからLチカまでの道【その2:プロジェクト作成~プロパティ設定】

コンフィギュレーション

プログラムを書く前にコンフィギュレーションの設定を記述しなければなりません。

コンフィギュレーションとは、簡単に言うとクロック源の設定や WDT(Watch Dog Timer)といったハードウェアの設定のことです。

MPLAB X IDE ではコンフィギュレーションビットが一覧となって設定できる機能があるのでそちらを利用します。

ツールバーの Production > Set Configuration Bits を開きます。

画面下部に設定ウィンドウが表示されるのでそこで設定をします。

PIC の種類によって設定できる項目は違うのですが、基本的には以下の3点を設定すれば大丈夫です。

  • FOSC : INTOSC (内蔵発振器使用)
  • WDT : OFF (ウォッチドッグタイマー不使用)
  • LVP : OFF (定電圧プログラミング不使用)

まずは PIC の動作に必要なクロック源の設定です。時計に使ったりなど高精度のクロックが必要な場合を除けば、内蔵発振器で動作させるのが簡単です。

ウォッチドッグタイマーとは、一定時間プログラムからタイマーにアクセスがない場合(意図せず無限ループにはまっている場合など)にハードウェア的に強制的にリセットをかける機能です。

製品に組み込む場合には動作が停止しては困るので使うことがあるかもしれませんが、実験段階ではこれのせいでプログラムが走らなかったりするので OFF にしておいた方が安全です。

定電圧プログラミングはプログラムを書き込むときに、通常は高電圧をかけて PIC を書き込みモードにするのに対して、高電圧をかけずに特殊なプロセスによって書き込みモードにする機能です。

通常の書き込みで特に問題はなく、余計な設定もいらないので 定電圧プログラミング も OFF にしておきます。

 

以上を設定したら下にある Generate Source Code to Output と書かれたボタンを押します。

すると、Output のタブにテキストが出力されるので、これを丸ごとコピーして mainファイルの先頭に貼り付けます。

余計なコメントは削除して構いません。また、
#include <xc.h> は最初から書かれているので2回書かないようにしてください。

以上でコンフィギュレーションの設定は完了です。

 

初期設定

コンフィギュレーションの設定に続いて、初期設定をする必要があります。

これはどういうものかというと、IO ピンの入力/出力の設定や、デジタル/アナログの設定などです。

その前にまずはデータシートで IOピンの場所を確認しましょう。ちょっとスクロールしたところにお目当ての図がありました。

なにやらいっぱい書いてありますが、RAx や RBx と書かれているのがピンの名称です。ピンはポートA、ポートB というように8個セット(場合による)で管理されます。

入出力設定

まずはピンの入出力を設定しましょう。これは TRISA/TRISB レジスタで管理されます。それぞれが ポートA、ポートB に対応し、各レジスタの上位ビットから Rx7, Rx6, … Rx0 に対応します。

このビットが0だと出力に、1だと入力になります。

例えば、下図のようになります。

今回は入力は使わないので全部出力に設定しておきます。(MCLR の RA5 は入力専用ピンです)

TRISA = 0b00100000;
TRISB = 0b00000000;

デジタル/アナログ設定

デジタル/アナログは ANSELA/ANSELB レジスタで設定します。各ピンとビットの関係は先程と同様です。

対応するビットが0だとデジタルに、1だとアナログになります。

今回はすべてデジタルのままにしておきます。

ANSELA = 0b00000000;
ANSELB = 0b00000000;

その他設定

PIC の種類にもよりますが、内蔵発振器の周波数を設定できたり、WPU(Weak Pull Up)の設定ができたりします。

これらの機能を使う場合には設定が必要ですが、何もしなくてもデフォルトの値が設定されるので、PIC が動かないということにはなりません。(上記二つも同じですが、使わない場合にも明示的に書いておいた方がよいと思います。)

今回はクロック周波数を 1MHz に設定したいと思います。この設定は OSCCON レジスタで行います。(データシートP67 参照)

OSCCONbits.IRCF = 0b1011;

レジスタの中で一部だけ値を変更したいときは、bits.xx を付けることによってそこだけアクセスできます。(ビットフィールドという構造体の一種です)

_XTAL_FREQ

こちらは初期設定とは異なりますが、一緒に紹介します。

Crystal Frequency すなわちクロックの周波数を #define で定義しておきます。これを定義しておかないと、delay関数などが使えなくなるので必ず定義しておきましょう。

実際と異なる値に定義してしまうと、delay関数の待ち時間がずれてしまうのでちゃんと設定しましょう。

今回は 1MHz に設定したのでそれに合わせて記述します。

#define _XTAL_FREQ 1000000

0の数を間違えないように気を付けましょう(笑)

 

ここまでで以下のようなコードとなります。

 

プログラミング

さていよいよプログラミングです。といっても今回はLチカさせるだけなのでほんの数行しかありませんが。

今回は RA0 ピンを使ってLチカします。

いきなり完成形を紹介しましょう。

これだけです。出力ピンの ON/OFF を切り替えるには、0か1を代入するだけで大丈夫です。

__delay_ms() は指定した時間何もせずに待機します。ミリ秒単位で整数値で指定できます。最初の_は2個なので注意してください。

これを while(1) で無限ループさせます。無限ループから出ることはないので、元から書いてあった return; はなくて大丈夫です。

というわけで今回のソース全体はこのようになりました。

プログラムが出来たら書き込みの前にビルドをする必要があります。

ツールバーにあるビルドボタンを押します。

プログラムが正常であれば Output ウィンドウに BUILD SUCCESSFUL と表示されます。

何らかのエラーがあれば、その位置とともに教えてくれます。

 

今回はプログラムをビルドして完成させるところまでやりました。次回はこのプログラムを PIC に書き込んで、ついに目標のLチカです。

PIC超入門!ゼロからLチカまでの道【その4:プログラム書き込み~Lチカ】

-PIC解説

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

PICでUSARTに四苦八苦

今回はパソコンとのシリアル通信に挑戦しましたがなかなか苦労しました。最初に結論だけ言うと、 マイコンの TX は相手の RX に、RX は TX に! 逆に接続するよ! ってことでした。それでは本文↓ …

【PIC】I2C通信のやり方

マイコンで Lチカが出来たら次は LCD に文字を表示したり、色々なセンサーを扱いたいですよね。今回はマイコンと周辺機器の通信によく使われる I2C通信のやり方をちょっとだけ詳しく解説していきます。 …

【PIC】I2Cでセンサーの値を読み取る

電子工作といえば色々なセンサーを使ってみたいですよね。 温度・湿度センサーや加速度センサー、ジェスチャーセンサーなんてものもあります。多くのセンサーは I2C 通信で扱えるので一つやり方を覚えてしまえ …

PIC超入門!ゼロからLチカまでの道【その4:プログラム書き込み~Lチカ】

前回プログラムが完成したので、あとはプログラムを書き込んで、回路を組み立ててついにLチカです! あともう少しでゴールなので頑張りましょう。 前回の記事はこちら PIC超入門!ゼロからLチカまでの道【そ …

【PIC】I2CでLCDに文字を表示する

前回の記事で I2C通信を制御するライブラリを作成したので、今回はそれを使って LCD に文字を表示させてみたいと思います。 前回の記事はこちら↓ 【PIC】I2C通信のやり方 目次1 LCD2 接続 …