前へ 目次 次へ
A/D変換を行う(単一モード)
 

 フォトレフレクタからの電圧をA/D変換し、 上位3ビットを3つのLEDに表示するプログラムを作ってみましょう。

A/D変換には、指定されたアナログ入力チャネルを、順次連続してA/D変換するスキャンモードと、 指定された1チャンネルのみを変換する単一モードが指定できます。 ここでは単一モードを使ってみましょう。

フォトレフレクタはPB1/AN1に、 3つのLEDはP50からP52までに繋がっているものとします。

/*
  単一モードA/D変換を行う (adt01.c)
*/

#include<3664.h>

int main(void)
{
  AD.ADCSR.BIT.ADST = 0;      /* A/D変換停止 */
  AD.ADCSR.BIT.SCAN = 0;      /* 単一モード */
  AD.ADCSR.BIT.CKS  = 1;      /* 高速変換 */
  AD.ADCSR.BIT.CH   = 1;      /* AN1 */
  IO.PCR5=0x07;

  while(1){
    AD.ADCSR.BIT.ADST = 1;      /* A/D変換スタート */
    while(AD.ADCSR.BIT.ADF==0){}
    IO.PDR5.BYTE=(AD.DRB>>13) ;
    AD.ADCSR.BIT.ADF=0;
  }
  return(0);
}

 
A/D変換の使い方
 

H8/3664には、A/D変換のためのアナログ入力端子が8本あります(AN0-AN7)。 アナログ入力端子0-3(AN0-AN3)がグループ0、アナログ入力端子4-7(AN4-AN7)がグループ1と、 2グループに分割されています。

アナログ入力端子から入力された値(電圧)は、 A/D変換されA/Dデータレジスタに格納されます。 A/Dデータレジスタは4本あり(ADDRA-ADDRD)、 アナログ入力端子との対応は、以下のようになっています。

アナログ入力チャネル結果が格納されるA/Dレジスタ
グループ0グループ1
AN0AN4ADDRA
AN1AN5ADDRB
AN2AN6ADDRC
AN3AN7ADDRD

A/D変換の結果は、A/Dデータレジスタのビット15からビット6に格納されます。 ビット5からビット0は常に0です。 このデータを読むためには、 1バイトアクセスするか、上位8ビットのみ読み出すようにします。


AD.ADCSR.BIT.ADST = 0

このビットを1にするとA/D変換を開始します。 単一モードでは、A/D変換を終了すると自動的に0になります。


AD.ADCSR.BIT.SCAN = 0

単一モードの場合には、0にします。 1にすると指定されたアナログ入力チャネルを、 順次連続してA/D変換するスキャンモードになります。


AD.ADCSR.BIT.CKS = 1

変換時間を設定します。 1が高速変換に対応します。


AD.ADCSR.BIT.CH = 1

アナログ入力チャネルを指定します。 単一モードのとき、以下のように指定します。

0AN0
1AN1
2AN2
3AN3
4AN4
5AN5
6AN6
7AN7


AD.DRB>>13

A/D変換の結果上位3ビットを、 下位3ビットに格納されるようシフトしています。


AD.ADCSR.BIT.ADF=0

このフラグは、単一モードでA/D変換が終了したときに1になります。


 
やってみよう
 

  • 白い紙を近づけたり離したりして、 LEDの点灯が変わることを確認してみよう。
  • 紙の一部を黒く塗り、 黒いところではLEDが点灯せず、 白いところでは真中のLEDが点灯するようなプログラムを作ってみよう。

 
2003/05/20(Tue)
AKI-H8/3664 QFP版のトップページへ
トップページへ
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送