アプリケーションノート 3083

MAX7651を使用したADC変換の実行


要約: このアプリケーションノートには、MAX7651のEVキットを使用してアナログ-ディジタル変換を行うためのソースコードと関数呼出しが含まれています。これは、MAX7651のEVキットのターゲットボード用の簡単なプログラムの作成、コンパイル、およびダウンロードの方法を示す、3部構成のアプリケーション例の第1部に相当します。

関連アプリケーションノート: このアプリケーションノート中のソースコードは、8051互換マイクロコントローラMAX7651を使用してアナログ/ディジタル変換を行う方法を示す例になっています。変換を実行して結果を読み取るために必要となる、コードの記述、コンパイル、およびMAX7651EVKITへのダウンロードの主要な手順が含まれています。このプログラムでは、MAX7651に搭載されているオンチップの12ビット内蔵ADCを使用します。

このコード例は、Keil DK-51 IDEツールを使用して作成しました。ソースコードを簡単に利用するため、Keil DK-51のデモソフトウェアをwww.keil.comからダウンロードしてインストールしてください。このKeil社のソフトウェアには、MAX7651用の基本的なライブラリが含まれています。次に、µVision2のプロジェクトファイルとソースコードが格納されたAN3083_uVision2_Project_Files.zipをダウンロードしてください。

この例ではMAX7651EVKITを使用しています。また一方、Keil µVision IDE Simulatorを使用することによってMAX7651EVKITなしでもこのソースコードを動作させることが可能です。Keil社製ソフトウェアのインストールの詳細については、MAX7651EVKITのクイックスタートマニュアルを参照してください。

:マキシムが提供するソースコード例はパブリックドメインです。必要に応じて、自由にコピー、変更、または使用することができます。

Cコードの説明

このソースコード例を有効に活用するためには、ある程度Cプログラミング言語に精通していることが前提になります。このコードは、「ADC Test Function」と呼ばれるmain()プログラムと、convert_all_channels()およびconvert_channel()という2個の関数の、3つの部分で構成されています。メインプログラムは、最初にMAX7651のレジスタ位置によるプログラムの初期化と標準ライブラリ(stdio.h)関数のインクルードを行っています。次に、標準シリアルポートを使用してPCとの通信を行うためのMAX7651の設定を行っています。

main()プログラムは、2個の関数を呼び出しています。convert_all_channels()関数は、8個すべてのADC入力チャネルについて順番に変換を行います。convert_channel()関数は変換チャネルを選択することが可能で、ADC変換が完了した時点で結果が返されます。

変換を開始するには、単にconvert_all_channels()またはconvert_channel()のいずれかの関数を呼び出します。これらの関数は、要求されたチャネルをMAX7651のADCONレジスタに書き込んだ後、ADCONレジスタをポーリングして変換の終了を待つことによって、変換を実行します。変換が完了した後、結果が呼出し元の関数に返されます。そしてmain()プログラムが、stdio.hに含まれているprintf()関数を使用して結果をシリアルポートに出力します。
/*-------------------------------------------------------------------------
ADC Test Function (main.c)
Copyright: Maxim Integrated
Target: MAX7651
Date: Feb 26, 2004
Author: Maxim Integrated

Description: This program will convert 8 channels using the MAX7651
and send the results to Serial Port 0
--------------------------------------------------------------------------*/
#include <reg51.h>					//include MAX7651 register definitions
#include <stdio.h>					//Standard I/O, Print() function.

#define NUMBER_OF_CHANNELS 8			//Convert 8 channels

void convert_all_channels(int* buffer);			//Function declaration
int convert_channel(int adc_ch);  			//Function declaration

void main(void)					//Begin Main()
{
int Adc_Results[NUMBER_OF_CHANNELS];	//Array to store conversion result
int i;					//for loop counter

	convert_all_channels(Adc_Results);		//Convert all channels, Store results in Adc_Results

	#ifndef MONITOR51			//Setup Serial Port if not using Keil Monitor
SCON  = 0x50;				//9600 Baud, 8N1, Xon, Xoff
	TMOD |= 0x20;
	TH1   = 0xFA;
	TR1   = 1;
	TI    = 1;
	PCON |= 0x80;
	#endif

	for (i=0; i < NUMBER_OF_CHANNELS; i++)	//Display contents to Adc_Results
	{
	printf ("CH %d:%x ",i,Adc_Results[i]);	//print the hex
	}

	printf("
 channel 0 %x", convert_channel(0));		//Convert a single channel and display
	printf("
 channel 1 %x", convert_channel(1));
	printf("
 channel 2 %x", convert_channel(2));
	printf("
 channel 3 %x", convert_channel(3));
   	printf("
 channel 4 %x", convert_channel(4));
	printf("
 channel 5 %x", convert_channel(5));
	printf("
 channel 6 %x", convert_channel(6));
	printf("
 channel 7 %x", convert_channel(7));

	while(1);					//End Program, Start infinite loop since there is no OS
}
 /*-------------------------------------------------------------------------
Function: convert_all_channels
Copyright: Maxim Integrated
Target: MAX7651
Date: Feb 26, 2004
Author: Maxim Integrated

Usage: The function will return 8 conversion results to an array.

Parameters: p_buffer, pointer to an 8 location array stores the conversion results

Return: Values are returned to the calling function using the function parameters

/*-------------------------------------------------------------------------
Setup ADC in the MAX7651
--------------------------------------------------------------------------*/

sfr ADCON  = 0xC5;				//Define address of  MAX7651 ADCON
sfr ADDAT1 = 0xC3; 				//Define address of  MAX7651 ADDAT1 (8MSBs)
sfr ADDAT0 = 0xC2;				//Define address of MAX7651 ADDAT0 (4LSBs)

void convert_all_channels(int* buffer);
--------------------------------------------------------------------------*/

#define NUMBER_OF_CHANNELS 8

void convert_all_channels(int* p_buffer)            			//pointer Buffer to return
{
	int adc_ch;
	int conv_val;

/*-----------------------------------------------
Convert all ADC channels
-----------------------------------------------*/

	for (adc_ch = 0; adc_ch < NUMBER_OF_CHANNELS; adc_ch++)      //for ADC channels 1 to 7
{

/*-----------------------------------------------
Start a conversion and wait for it to complete.
-----------------------------------------------*/

	ADCON = adc_ch;					//Start conversion and select channel
while ((ADCON & 0x80) == 0);			//wait for conversion to complete
conv_val = (ADDAT0 >> 4) |  (ADDAT1 << 4);		//Format the data in 12 bit format

	  *(p_buffer+adc_ch) = conv_val;		//Write result back to calling function
}					//End For
}						//End function convert_all_channels()

 /*-------------------------------------------------------------------------
Function: convert_channel
Copyright: Maxim Integrated
Target: MAX7651
Date: Feb 26, 2004
Author: Maxim Integrated

Usage: The function will convert and return the result of a Channel.
Parameters: adc_ch, Select ADC channel to be converted.

Channels 0-7 = single ended channel 0-7.
	Channels 8-11 = differential channel pairs {CH0,1}, {CH2,3}, {CH4,5}, {CH6,7}
	Channel 12 = differential reference measurement {REF+,REF-}

Return: Function returns Integer with the conversion result

Function Declaration: int convert_channel(int adc_ch);
--------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------
Setup ADC in the MAX7651
--------------------------------------------------------------------------*/

sfr ADCON  = 0xC5;				//Define address of  MAX7651 ADCON
sfr ADDAT1 = 0xC3; 				//Define address of  MAX7651 ADDAT1 (8MSBs)
sfr ADDAT0 = 0xC2;				//Define address of MAX7651 ADDAT0 (4LSBs)

int convert_channel(int adc_ch)
{
	int conv_val;

if (ADCON <0 || ADCON >12){		//Check for valid channel
return (-2048);				//Using -FS for the error code
}

	ADCON = adc_ch;				//Select channel and Start conversion
while ((ADCON & 0x80) == 0);		//Wait for the conversion to complete

	conv_val = (ADDAT0 >> 4) |  (ADDAT1 << 4);		//Format the data in 12 bit format

	return (conv_val);					//Return result back to calling function
}							//End function convert_chan



次のステップ
EE-Mail EE-Mail配信の登録申し込みをして、興味のある分野の最新ドキュメントに関する自動通知を受け取る。
© , Maxim Integrated Products, Inc.
このウェブサイトのコンテンツは米国および各国の著作権法によって保護されています。コンテンツの複製を希望される場合は お問い合わせください。.
APP 3083:
アプリケーションノート 3083,AN3083, AN 3083, APP3083, Appnote3083, Appnote 3083