リアルタイムに加速度センサをH8/3052で読み取る |
分かりやすく、加速度センサと書きましたが、実際はA/D変換をリアルタイムに読み取る方法なので、加速度センサ以外でも、アナログを用いるものなら何でもOKです。
このコードでは、A/D変換完了割り込みを利用しA/Dの値を常に読み続け、リアルタイムに値をいつでも取得することができます。 この記事は、その覚書です。
|
C言語ソースのダウンロード |
|
マイコンとの接続 |
|
ソース全景 |
/************************************************************************** * 製作日 : 2006/08/03 * ファイル名 : ad_init.c * 製作者 : HM (http://dream-drive.net) * 説明 : H8/3052用のAD変換制御ソースです ***************************************************************************/ //AD変換の初期設定マクロ #define AD_NUM 3 //AD変換するセンサーの個数-1(0〜3) //AD変換を保存するグローバル変数 unsigned int ad_0,ad_1,ad_2,ad_3; /************************************************************************** * 関数名 : adinit * 説明 : AD変換ユニットをマクロの個数で初期化 * 引数 : なし * 戻り値 : なし ***************************************************************************/ void adinit(void){ AD.ADCSR.BIT.ADF = 0; //ADFフラグクリア AD.ADCSR.BIT.SCAN = 1; //スキャンモード AD.ADCSR.BIT.CKS = 1; //クロックセレクト、変換時間134ステート AD.ADCSR.BIT.CH = AD_NUM; //チャネルセレクト,使うADの個数を設定 AD.ADCSR.BIT.ADIE = 1; //AD変換完了割り込み許可 AD.ADCSR.BIT.ADST = 1; //AD変換スタート } /************************************************************************** * 関数名 : int_adi * 説明 : A/D完了時に呼び出され値をグローバルに保存する * 引数 : なし * 戻り値 : なし ***************************************************************************/ void int_adi (void){ AD.ADCSR.BIT.ADIE = 0; //AD変換完了割り込み不可 switch(AD_NUM){ case 3: ad_3 = AD.ADDRD; case 2: ad_2 = AD.ADDRC; case 1: ad_1 = AD.ADDRB; case 0: ad_0 = AD.ADDRA; break; } AD.ADCSR.BIT.ADF = 0; //フラグクリア AD.ADCSR.BIT.ADIE = 1; //AD変換完了割り込み許可 } /************************************************************************** * 関数名 : get_ad0 * 説明 : AD:0の変換後の値を返す * 引数 : なし * 戻り値 : (unsigned int)AD変換の値 ***************************************************************************/ unsigned int get_ad0(void){ return ad_0; } /************************************************************************** * 関数名 : get_ad1 * 説明 : AD:1の変換後の値を返す * 引数 : なし * 戻り値 : (unsigned int)AD変換の値 ***************************************************************************/ unsigned int get_ad1(void){ return ad_1; } /************************************************************************** * 関数名 : get_ad2 * 説明 : AD:2の変換後の値を返す * 引数 : なし * 戻り値 : (unsigned int)AD変換の値 ***************************************************************************/ unsigned int get_ad2(void){ return ad_2; } /************************************************************************** * 関数名 : get_ad3 * 説明 : AD:3の変換後の値を返す * 引数 : なし * 戻り値 : (unsigned int)AD変換の値 ***************************************************************************/ unsigned int get_ad3(void){ return ad_3; } 設定個所が1か所あります。 AD_NUMの値は設定する[ポート数-1]の実数になります。 |
ユーザー関数一覧 |
void adinit(void);
unsigned int get_ad0(void);
unsigned int get_ad1(void);
unsigned int get_ad2(void);
unsigned int get_ad3(void);
|
Copyright ©2004-2010 HM(みっちー) All Rights Reserved.