2011/04/28
Assembly Desk
ここでは、ASOOVU USBの拡張ボード「かんたんUSB温度計キット」のサンプルプログラムの解説を行います。
かんたんUSB温度計キットをASOOVU USBでかんたんに用いるため、便利なライブラリ関数が用意されています。
それらのライブラリ関数の解説はこちらを参照してください。
#include <p18f2550.h>
#include <delays.h>
#include "bootload.h"
#include "asv_tmp.h"
各種、ヘッダファイルを読み込みます。
それぞれ、以下の様な内容になっています。
p18f2550.h | 使用するマイコンにあったものをインクルード |
delays.h | メインループで使用するディレイを用いるため |
bootload.h | ASOOVU USBでUSBブートローダを使用するため |
asv_tmp.h | かんたんUSB温度計キットのライブラリを使用 |
asv_tmp_init(); //ASOOVUを温度計用に初期化
asv_tmp_set_7seg_num(0);
asv_tmp_set_7seg_brightness(2);
7セグメントLEDには0を表示、明るさは2に指定。
while(1)
{
Delay1KTCYx(12); //1ms
asv_tmp_disp7seg(); //1msに一度この関数を呼出し、7セグをダイナミック点灯する
interval_time_counter--;
if(interval_time_counter == 0)
{
interval_time_counter = INTERVAL_TIME;
asv_tmp_set_7seg_num(asv_tmp_get_temperature()); //現在の温度を取得し、それを7セグに表示する
}
asv_tmp_set_7seg_brightness(asv_tmp_get_analog(1)*4/1024);
if(!asv_tmp_get_SW()) //スイッチが押されていたらLEDを点灯させる
asv_tmp_set_led(1);
else
asv_tmp_set_led(0);
}
ディレイを用いて、メインループを約1msで回るようにする。
INTERVAL_TIMEは500となっているので、500msに一回、温度センサから値を読み出し、それを7セグメントLEDに表示する。
また、ボリュームの値を監視し、明るさを変更する。
スイッチが押されるとLEDを点灯させる。
ASOOVU USBは48MHzの周波数で動作している。PICは4クロック1命令なので、1命令に要する時間は
1/48000000 * 4 = 1/12000000 s
1msのウェイトをおくためには
(1/1000) / (1/12000000) = 12000
12000命令分ディレイをおけばよい。
Delay1KTCYx関数は引数×1000命令をウェイトとして消費するので、
Delay1KTCYx(12);で12000命令分ウェイトをとることになる。