かんたんUSB温度計 サンプルソース解説・その1

通常の温度計

2011/04/28

Assembly Desk

1. 概要

ここでは、ASOOVU USBの拡張ボード「かんたんUSB温度計キット」のサンプルプログラムの解説を行います。

かんたんUSB温度計キットをASOOVU USBでかんたんに用いるため、便利なライブラリ関数が用意されています。

それらのライブラリ関数の解説はこちらを参照してください。

2. ソースコード解説

2.1 ヘッダ部


#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温度計キットのライブラリを使用

2.2 初期化部


        asv_tmp_init();                //ASOOVUを温度計用に初期化

        asv_tmp_set_7seg_num(0);

        asv_tmp_set_7seg_brightness(2);


7セグメントLEDには0を表示、明るさは2に指定。

2.3 メインループ


        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を点灯させる。

2.3.1 ディレイの値の計算方法

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命令分ウェイトをとることになる。