【概要】
この10ビットA/Dコンバータ用ライブラリは下記の性能機能を持っています。
(1) AN0からAN15までの最大16ピンのアナログ入力を扱う
どこまで可能かはデバイスにより異なる
(2)最大2ピンまでのリファレンス入力が可能
【関数詳細】
A/Dコンバータ用のライブラリ関数には下表のような関数が
用意されています。
関数名 機 能 と 書 式 BusyADC10 ADCの状態を返す
0:変換中でビジー 1:変換完了
【書式】 char BusyADC10(void);
CloseADC10 ADCをオフにし割り込みをクリア
【書式】 void CloseADC10(void);ConfigIntADC10 ADCの割り込みの設定を行う
【書式】 void ConfigIntADC10(unsigned int config);
configには下記を組み合わせて使う
@割り込み許可禁止
ADC_INT_ENABLE ADC_INT_DISABLE
A割り込み優先レベル設定
ADC_INT_PRI_0 ADC_INT_PRI_1 ADC_INT_PRI_2
ADC_INT_PRI_3 ADC_INT_PRI_4 ADC_INT_PRI_5
ADC_INT_PRI_6 ADC_INT_PRI_7
【例】 ConfigIntADC10(ADC_INT_ENABLE & ADC_INT_PRI_4);
ConvertADC10 サンプリングを停止してAD変換を開始する
【書式】 void ConvertADC10(void);
OpenADC10 ADコンバータの動作モードを設定する
【書式】
void OpenADC10(unsigned int config1,
unsigned int config2,
unsigned int config3,
unsigned int configport,
unsigned int configscan)
config1には下記を組み合わせて使う(ADCON1レジスタ)
@モジュールのオンオフ
ADC_MODULE_ON ADC_MODULE_OFF
Aアイドル時動作
ADC_IDLE_CONTINUE ADC_IDLE_STOP
B結果形式
ADC_FORMAT_SIGN_FRACT ADC_FORMAT_FRACT
ADC_FORMAT_SIGN_INT ADC_FORMAT_INTG
C変換トリガ指定
ADC_CLK_AUTO ADC_CLK_MPWM ADC_CLK_TMR
ADC_CLK_INT0 ADC_CLK_MANUAL
D自動サンプリング指定
ADC_AUTO_SAMPLING_ON ADC_AUTO_SAMPLING_OFF
Eサンプリング開始
ASC_SAMP_ON ADC_SAMP_OFF
config2には下記を組み合わせて使う(ADCON2レジスタ)
@電圧リファレンス指定
ADC_VREF_AVDD_AVSS ADC_VREF_EXT_AVSS
ADC_VREF_AVDD_EXT ADC_VREF_EXT_EXT
Aスキャン選択
ADC_SCAN_ON ADC_SCAN_OFF
B割り込みごとのサンプリング回数指定
ADC_INTR_EACH_CONV ADC_INTR_2_CONV
ADC_INTR_3_CONV ADC_INTR_4_CONV
−−−−−−−−−−−−−−−
ADC_INTR_15_CONV ADC_INTR_16_CONV
Cバッファモード指定
ADC_ALT_BUF_ON ADC_ALT_BUF_OFF
D交互入力モード指定
ADC__ALT_INPUT_ON ADC_ALT_INPUT_OFF
config3には下記を組み合わせて使用する(ADCON3レジスタ)
@変換クロック源指定
ADC_CONV_CLK_INTERNAL ADC_CONV_CLK_SYSTEM
A自動サンプリングの時間指定
ADC_SAMPLE_TIME_0 ADC_SAMPLE_TIME_1
−−−−−−−
ADC_SAMPLE_TIME_30 ADC_SAMPLE_TIME_31
B変換クロック速度指定
ADC_CONV_CLK_1Tcy2 ADC_CONV_CLK_1Tcy
ADC_CONV_CLK_3Tcy2 ADC_CONV_CLK_2Tcy
ADC_CONV_CLK_5Tcy2 ADC_CONV_CLK_3Tcy
−−−−−−−
ADC_CONV_CLK_255Tcy2 ADC_CONV_CLK_128Tcy
configportには下記を組み合わせて指定(ADPCFGレジスタ)
ENABLE_ALL_ANA_0-15 ENABLE_ALL_DIG_0-15
ENABLE_AN0_ANA ENABLE_AN1_ANA
−−−−−−−
ENABLE_AN14_ANA ENABLE_AN15_ANA
configscanには下記を組み合わせて指定(ADCSSLレジスタ)
ENABLE_ALL_INPUT_SCAN DISABLE_ALL_INPUT_SCAN
ADC_SKIP_SCAN_AN0 ADC_SKIP_SCAN_AN1
−−−−−−−−
ADC_SKIP_SCAN_AN14 ADC_SKIP_SCAN_AN15
【例】/// ADコンバータ設定用パラメータ
unsigned int ADCON1value = ADC_MODULE_ON & ADC_IDLE_CONTINUE
& ADC_FORMAT_INTG & ADC_CLK_TMR & ADC_AUTO_SAMPLING_ON
& ADC_SAMP_OFF;
unsigned int ADCON2value = ADC_VREF_AVDD_AVSS & ADC_SCAN_ON
& ADC_INTR_12_CONV & ADC_ALT_BUF_OFF & ADC_ALT_INPUT_OFF;
unsigned int ADCON3value = ADC_CONV_CLK_SYSTEM
& ADC_SAMPLE_TIME_31 & ADC_CONV_CLK_5Tcy;
unsigned int ConfigPort = ENABLE_AN0_ANA & ENABLE_AN1_ANA
& ENABLE_AN2_ANA & ENABLE_AN3_ANA;
unsigned int ScanSel = ADC_SKIP_SCAN_AN4 & ADC_SKIP_SCAN_AN5
& ADC_SKIP_SCAN_AN6 & ADC_SKIP_SCAN_AN7 & ADC_SKIP_SCAN_AN8
& ADC_SKIP_SCAN_AN9 & ADC_SKIP_SCAN_AN10 & ADC_SKIP_SCAN_AN11
& ADC_SKIP_SCAN_AN12;
/// ADCの設定
OpenADC10(ADCON1value,ADCON2value,ADCON3value,
ConfigPort,ScanSel);SetChanADC10 チャネル0の±入力ピンの指定
【書式】 void SetChanADC10(unsigned int channel);
channelには下記を組み合わせて設定(ADCHSレジスタ)
@MUX Bのマイナス側
ADC_CH0_NEG_SAMPLEB_AN1 ADC_CH0_NEG_SAMPLEB_VREFN
AMUX Aのマイナス側
ADC_CH0_NEG_SAMPLEA_AN1 ADC_CH0_NEG_SAMPLEA_VREFN
BMUX Bのプラス側
ADC_CH0_POS_SAMPLEB_AN0 ADC_CH0_POS_SAMPLEB_AN1
−−−−−−−−
ADC_CH0_POS_SAMPLEB_AN14 ADC_CH0_POS_SAMPLEB_AN15
CMUX Aのプラス側
ADC_CH0_POS_SAMPLEA_AN0 ADC_CH0_POS_SAMPLEA_AN1
−−−−−−−−−−−−−−
ADC_CH0_POS_SAMPLEA_AN14 ADC_CH0_POS_SAMPLEA_AN15
ReadADC10 バッファ内変換結果の読み出し
【書式】 unsigned int ReadADC10(unsigned char bufIndex);
bufIndexはバッファの番号(0-15)を指定する
(ADCBUF0 to ADCBUFF)
用意されているマクロには下表があります。
マクロ名 機 能 と 書 式 EnableIntADC
DisableIntADC割り込みの禁止、許可 SetPriorityIntADC 割り込み優先レベルの設定
【基本的な使い方】
ADコンバータのライブラリを使うためには下記設定が必要です。
(1) ヘッダファイルのインクルード
#include <adc.h>
(2) プロジェクトにPIC24Fのライブラリの登録
【使用例1】
下記はADコンバータ用ライブラリの実際の使用例です。
4チャネルのアナログ入力電圧を3回自動スキャンすると、ADコンバータの
割り込みが入ります。割り込み処理では4入力のそれぞれの3回分の計測
の平均をとってUART経由で電圧にして送信しています。
送信にはprintf関数を使いましたので簡単な記述でデータを送信することが
できます。