PIC-DEV-690RLに搭載されているLEDを点滅させる簡単なスケッチを紹介します。
このスケッチは、以下のボードでもそのまま動きます。(MPLABプロジェクトのデバイス設定や、ボードを指定するマクロ定義などはそれぞれに合わせた変更が必要です)
#include "picsys16.h" void setup() { pinMode(LED1, OUTPUT) ; // LED1を出力に } void loop() { digitalWrite(LED1, HIGH) ; // アクティブ・ローなので消灯 delayMilliseconds(500) ; // 0.5秒待つ digitalWrite(LED1, LOW) ; // アクティブ・ローなので点灯 delayMilliseconds(500) ; // 0.5秒待つ }
PIC-DEV-690RLを評価ボードとして、PIC16F690のプログラム例を紹介します。
このページのプログラムはPIC-DEV-690RLでもPIC-DEV-690Rでもそのまま動きます。
PIC-DEV-690RL, PIC-DEV-690Rがソフトウェア的にどのように見えるかを以下に示します。以下の内容は、picdev690rl.hの一部です。SW?はタクトスイッチ、LED?は発光ダイオード、CLCD?はキャラクタ液晶ディスプレイのポート設定を示します。スイッチやLEDなどがどのポートに接続されているかや、そのポートの入出力方向の設定や、プルアップなどの設定を行うSFRの名前などを示しています。
PIC-DEV-690Rは、液晶ディスプレイとSW3がない以外は、PIC-DEV-690RL,と同様です。
PIC-DEV-690RLのソフトウェア的なポート構成
文字表示はありませんが、MCUの世界での"Hello World"のプログラムに相当する、スイッチとLEDを利用したとても基本的なプログラムを作ってみましょう。
ライブラリを利用したプログラム
最初にPICCのヘッダーファイルhtc.hをインクルードします。このヘッダーファイルは、プロジェクトで現在選択されているPICに対応した各PICチップ固有のSFRなどの構成を記述したヘッダーファイルを自動的に選択して読み込むようになっています。PICCを利用する場合には、とにかく最初の行に記載すると考えてよいでしょう。picdev690rl.hは、前述のように、PIC-DEV-690RL固有の入出力構成を定義したものとなっています。
コンフィギュレーションビットの設定は、__CONFIG()ディレクティブ(最初の下線は2文字)で行います。INTIOは、内蔵発信器をクロックとして利用することを指定しています。
setOSC()関数は、内部発信器の周波数(PICの稼動周波数)を設定します。リセット時の既定値は4MHzですが、ここでは、最高周波数の8MHzを設定しています。8MHz以外に4MHz,2MHz,1MHz,500KHz,250KHz,125KHz, そして少し飛んで、31KHzが指定できます。500KHzで稼動させたい場合には、setOSC(OSC_500K)とします。内蔵発信器の周波数の選択は、PICが稼動中にも変更することが出来るので、性能が必要なときには周波数をあげ、そうでない場合には周波数を下げて電力消費量を下げるなどの利用が出来ます。
initPORTS()は、picdev690rl.hに定義されている入出力ピンの構成に従い、PICのピンの入出力方向などの初期化を行います。
最後に、forによる無限ループで、スイッチの値を読んでそれをLEDに出力しています。スイッチもLEDもアクティブロー(0側がON)です。したがって、スイッチは、押されていないときは1, 押されたときは0, LEDは、1が出力されると消灯、0が出力されると点灯となります。
上記のプログラムと同等の機能を、ライブラリを使わず、SFRを直接操作した例を以下に示します。プログラムが簡単なので、SFRを直接操作しても、たいしたことはないですね。
SFRを直接操作したプログラム
OSCCONは、内部発信器を利用する際に、その周波数を設定するレジスタで、このプログラムでは、内部発信器での最高周波数である8MHzを設定しています。
PICの初心者やADコンバータを持たないPICを常用されている方がPIC16F690などにトライアルして、最もトラブルの元になるのは、以下に示す初期化時における入出力ピンのアナログ/デジタル切り替えではないでしょうか。
ANSEL,ANSELHは、PICのピンをデジタルで利用するかアナログで利用するかを設定するレジスタです。PIC16F690は、入出力ピンのうち12ピンもADコンバータ用のアナログ入力ピンとして利用できるようになっています。その各ピンをアナログで利用するかデジタルで使用するかを、ANSEL,ANSELHの対応ビットで設定します。今回は、全てのピンをデジタルで利用するので、全てのビットを0に設定します。
デジタルの入出力ピンの入出力方向は、TRISレジスタで設定します。TRISレジスタは、リセット時には1(入力)に設定されているので、LED用に出力として利用するポートのTRISビットを0に設定し、出力とします。
以上で、簡単ではありますが、PIC16F690の立派なプログラムが出来上がりました。 :-)