ルネサスエレクトロニクス社のマイコンRX210を使用した12bitAD変換のサンプルコードです。AN01端子の電圧を変換します。入力端子により結果の保存されるレジスタが変化するので注意が必要です。
- #include <stdio.h>
- #include <machine.h>
- #include "iodefine.h"
- /*
- * ADコンバータと温度センサーの初期化
- */
- void ad_init(void)
- {
- SYSTEM.PRCR.WORD = 0xA502; /* protect off */
- MSTP(S12AD) = 0; /* ADコンバータ */
- SYSTEM.PRCR.WORD = 0xA500; /* protect on */
- PORT4.PDR.BIT.B1 = 0; /* ポートを入力に */
- MPC.PWPR.BIT.B0WI = 0; /* enable to write PFSWE bit */
- MPC.PWPR.BIT.PFSWE = 1; /* enable to write PFS register */
- //MPC.P40PFS.BIT.ASEL = 1; /* AN000 */
- MPC.P41PFS.BIT.ASEL = 1; /* AN001 */
- MPC.PWPR.BIT.PFSWE = 0; /* disable to write PFS register */
- MPC.PWPR.BIT.B0WI = 1; /* disable to write PFSWE bit */
- S12AD.ADANSA.BIT.ANSA1 = 1; /* A/D チャネル選択レジスタA */
- S12AD.ADCSR.BIT.ADCS = 0; /* シングルスキャンモード */
- //S12AD.ADSSTR1 = 10; /* アナログ入力サンプリング時間 */
- S12AD.ADCSR.BIT.EXTRG = 0;
- }
- /*
- * 電圧の取得
- */
- unsigned int get_ad(void)
- {
- volatile int i;
- unsigned int temp;
- S12AD.ADCSR.BIT.ADST = 1; /* AD変換開始 */
- while(S12AD.ADCSR.BIT.ADST == 1); /* 終了まで待つ */
- temp = S12AD.ADDR1; /* 結果の読み出し */
- /* 変換結果の入るレジスタはピンで決まる ADDR0~ADDR15 */
- return temp;
- }
- int main(void)
- {
- int adv,i;
- ad_init(); //AD変換初期化
- printf("A/D converter test.\n");
- while (1) {
- adv = get_ad();
- printf("AD value %d\n",adv);
- for(i=0;i<50000;i++) nop();
- }
- }
※コメント投稿者のブログIDはブログ作成者のみに通知されます