Robotのページ
リアルタイムに加速度センサを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.