ADCの使用方法
ADCを利用するには3つの手続きが必要です。 1) アナログ部の電源投入 2) ADC 開始 3) 完了待ちおよび読み出し となります。
// 1) アナログ部の電源投入 if (!bAHI_APRegulatorEnabled()) { vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE, E_AHI_AP_INT_ENABLE, // DISABLE にするとアナログ部の電源断 E_AHI_AP_SAMPLE_2, // サンプル数 2,4,6,8 が選択可能 E_AHI_AP_CLOCKDIV_500KHZ, // 周波数 250K/500K/1M/2M E_AHI_AP_INTREF); while(!bAHI_APRegulatorEnabled()); // 安定するまで待つ } // 2) ADC 開始 vAHI_AdcEnable( E_AHI_ADC_SINGLE_SHOT, // E_AHI_ADC_SINGLE_SHOT 1回のみ // E_AHI_ADC_CONTINUOUS 連続実行 E_AHI_AP_INPUT_RANGE_2, // E_AHI_AP_INPUT_RANGE_1 (0-1.2V) // または E_AHI_AP_INPUT_RANGE_2 (0-2.4V) E_AHI_ADC_SRC_ADC_1 // E_AHI_ADC_SRC_ADC_1 (ADC1) // E_AHI_ADC_SRC_ADC_2 (ADC2) // E_AHI_ADC_SRC_ADC_3 (ADC3) // E_AHI_ADC_SRC_ADC_4 (ADC4) // E_AHI_ADC_SRC_TEMP (温度) // E_AHI_ADC_SRC_VOLT (電圧) ); vAHI_AdcStartSample(); // ADC開始 // 3) ADC 完了待ちおよび読み出し // (ポーリングのAPIに不具合が有るので割り込みを待ちます) // 以下は AppQueueAPI を使用したコードの一部。 PRIVATE void vProcessIncomingHwEvent(AppQApiHwInd_s *psAHI_Ind) { uint32 u32DeviceId = psAHI_Ind->u32DeviceId; //uint32 u32ItemBitmap = psAHI_Ind->u32ItemBitmap; switch (u32DeviceId) { case E_AHI_DEVICE_ANALOGUE: // ADCが終了 u16adc = u16AHI_AdcRead(); // 値の読み出し break; ... } ... }
その他
- ポーリングで完了待ちする API bAHI_AdcPoll() には不具合が報告されています。 以下の手続きにより回避できる可能性が有ります。
1) PeripheralRegs.h をインクルードします。 2) ポーリングには以下のコードを実行します。 #define REG_ANPER_IS_CAPT_MASK 0x01 /* CAPT ビットが設定されるのを待つ */ while(!(u32REG_AnaRead(REG_ANPER_IS)& REG_ANPER_IS_CAPT_MASK)) /* 当該ビットをクリアする */ vREG_AnaWrite(REG_ANPER_IS, 0x1) * キャプチャーモード(Capture Mode)のみで利用可能。
- ADCの設定パラメータとして、周波数およびサンプル回数があります。vAHI_ApConfigure() で設定します。
- ADCを周期実行する場合は、CONTINUOUS モードで連続変換をしておいて、割り込みハンドラで周期的に読みだす方法が簡便です。
- スリープ復帰後には、再度初期化してください。
- ADCについてはこちらもご覧ください。