探索済み区画
これまで
区画を探索
カレンダー(月別)
10 ≪│2017/11│≫ 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
プロフィール

Suma

Author:Suma
東北の田舎でロボット開発に励んでいます。
現在のメインはマイクロマウス。目指すは東北地区大会優勝!!

ご注意
・当ブログはリンクフリーです ・当ブログの掲載情報を元に行った行為によって何らかの損害が生じたとしても管理人は一切責任を負いません。予めご了承ください。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--) --:-- |
今回はAD変換
RX62T内蔵の12bitA/Dコンバータ(S12AD)を使用する

最初にS12AD0とS12AD1のストップを解除しておく
SYSTEM.MSTPCRA.BIT.MSTPA16 = 0; //12bitAD1ストップ解除
SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; //12bitAD0ストップ解除

S12ADはPCLKで動作するためベースクロックは48MHz
今回はベースクロックを8分周して使用する
サンプリング時間は0.4us以上とするようにマニュアルに記載があるため、0.5usに設定
サンプリング時間は本来回路のアナログ特性から時間を決めるべきだが、目的の値が読めていればいいので今回は適当に最速に設定
なお、SH7125からの移植が目的なので変換精度はSHのADCに合わせて10bitに設定した

S12AD0.ADCSR.BYTE = 0x00u; //ADC停止、Clock=PCLK/8、シングルモード
S12AD0.ADCER.WORD = 0x0103u; //サンプルホールド回路未使用、変換データ右詰め、変換精度10bit
S12AD0.ADSSTR = 3; //サンプリング時間=0.5us
S12AD1.ADCSR.BYTE = 0x00u; //ADC停止、Clock=PCLK/8、シングルモード
S12AD1.ADCER.WORD = 0x0103u; //サンプルホールド回路未使用、変換データ右詰め、変換精度10bit
S12AD1.ADSSTR = 3; //サンプリング時間=0.5us

次にAD変換処理を記載する
AN000~AN003はS12AD0、AN100~AN103はS12AD1となることに注意

u16 AdConvert(u8 u8Ch) {
 u16 u16LocalAdValue = 0;
 if (u8Ch <= 3) {
  S12AD0.ADANS.WORD = (u8Ch << 12); //変換チャンネル指定
  S12AD0.ADCSR.BIT.ADST = 1; //AD変換開始
  while(S12AD0.ADCSR.BIT.ADST == 1); //AD変換完了まで待つ
  /* --- Get ADC value --- */
  switch (u8Ch) {
   case 0 : u16LocalAdValue = S12AD0.ADDR0A; break;
   case 1 : u16LocalAdValue = S12AD0.ADDR1; break;
   case 2 : u16LocalAdValue = S12AD0.ADDR2; break;
   case 3 : u16LocalAdValue = S12AD0.ADDR3; break;
   default : break;
  }
 } else if ((4 <= u8Ch) && (u8Ch <= 7)) {
  S12AD1.ADANS.WORD = ((u8Ch - 4) << 12);
  S12AD1.ADCSR.BIT.ADST = 1;
  while(S12AD1.ADCSR.BIT.ADST == 1);
  /* --- Get ADC value --- */
  switch (u8Ch) {
   case 4 : u16LocalAdValue = S12AD1.ADDR0A; break;
   case 5 : u16LocalAdValue = S12AD1.ADDR1; break;
   case 6 : u16LocalAdValue = S12AD1.ADDR2; break;
   case 7 : u16LocalAdValue = S12AD1.ADDR3; break;
   default : break;
  }
 } else {
  /*none*/
 }
 return(u16LocalAdValue);
}

例としてAN100につながっているボリュームのAD値を読みたい場合は以下のようにする
volumeAdValue = AdConvert(4);

2015/01/12(月) 11:35 | コメント:0 | トラックバック:0 |
コメント
コメントを投稿
名前
タイトル
メール
URL
コメント
パスワード
管理者にだけ表示を許可する


トラックバック

この記事のトラックバックURL
 

この記事にトラックバックする (FC2 blog user only!)
 
この記事へのトラックバック


検索フォーム
夢を叶えるための名言集


presented by 地球の名言
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。