としぶぅ~の「工作部屋」...毎日少しのお勉強

趣味・関心事を書いていこうと思います。

PIC16F88を動かす。。。その20(ソースコード貼り付け~ad.c)

2012-09-26 22:09:18 | PIC16F88

こんばんわ

としぶぅ~です。

 

夜は涼しくなりましたね。。。。歩いて帰ってきても汗かかなくなりました^^;

今日は残りのAD部分のプログラムを貼り付けます。

ad.c

/*================================================================================
ADプログラム
File Name : AD.c
Target Compiler: HI-TECH C PRO(Lite MODE)
Verion : 1.0
================================================================================ */
#include
#include "ad.h"
#include "delay.h"

unsigned char ad_data; //(20120908追加)
unsigned char ad_disp; //(20120919追加)
unsigned char ad_data_old; //(20120919追加)

//AD機能とポートの設定
void adinit(unsigned char ansel)
{

/**************************************************
使用するADポートの設定を行う
ansel: bit0:ANS0(RA0)
bit1:ANS1(RA1)
bit2:ANS2(RA2)
bit3:ANS3(RA3)
bit4:ANS4(RA4)
bit5:ANS5(RB6)
bit6:ANS6(RB7)
bit7:
**************************************************/


TRISA=TRISA | 0x38; //ADポート(RA4)を入力設定にする
ANSEL=ansel; //ADコンバータの設定 ANS0-7

ADON=1; //ADコンバータ機能の許可
ADIE=0; //AD割り込み不許可

}

//ad Convert(8bit)
unsigned char ad4()
{
/*************************************************
channel:AN4
基準電圧:+VREF-VSSを使用
AD変換clock:8MHz/16
ADFM=0 Leftjustified
変換時間:
**************************************************/
unsigned char temp = 10;

//設定
ADCON1=0x60; //0110 0000 A/D結果は左詰め,FOSC/16,A/D基準電圧:+VREF-VSS
ADCON0=0x61; //01xx x001 FOSC/16,ANS4,A/D Status(INPUT),A/D-ON

DelayUs(100); /* Delay関数使用 : 安定待ち */

//AD変換開始
GO_DONE=1;

//変換終了待ち
while(GO_DONE==1){}

//変換結果処理
return(ADRESH);
}

void ad_4ms()
{
unsigned char i;
ad_data = ad4();
i = ad_data;
/* 前回のデータと今回のデータが違っていたら表示フラグをセットする */
if((ad_data_old != ad_data)){
ad_disp = 1; /* 表示フラグセット */
ad_data_old = ad_data; /* 新データを旧データにセット */
}
}

こんな感じです。

マーカー部分の説明をします。

ad4()でADの設定します。

ADの基準電圧を+VREF入力~VSS(0V)で行うように設定する。

8bit変換を行うので、左詰めでADのデータを保存するように設定。

(10bit変換の場合は右づめにする。)

  → ま、どちらでもいいけど8bitの場合は、左づめにすれば、ADRESHのデータを

     そのまま使えば、10bit中の下位2bitを無視して8bitデータとして扱える。

10bitでやるときは・・・・・今度やりますね^^

 

次は、ad_4ms()です。

ad4()を実行して前回のデータと比較して違っていたらad_disp変数に”1”を入れて、

LCD表示関数にて温度表示を更新する。

比較データが同じだったら”0”をいれる。 → ”0”なら表示は更新しない。

 

こんな感じの簡単なことしかしてません。

こんな感じでわかりますかね??

 

難しいことしてません^^;

 

とりあえずソースコードの貼り付けはこんな感じでいいかな。。。

 

明日はちょっと、動かなかったPickit3を動かしてみます。

 

とりあえず今日はこの辺で・・・・

おやすみなさい~(^^/