図16-26と表16-15に、利用可能な全てのアナログ入力チャンネルを1つのS&Hチャンネル
(CH0) でサンプリング / 変換する場合のセットアップ例を示します。ADC 制御レジスタ 2
(ADxCON2<10>)のスキャン入力選択ビット(CSCNA)をセットする事により、CH0正極性入 力へのADC入力をスキャンします。その他の条件は16.10.1「1チャンネルを複数回サンプリ ング/変換する」と同じです。
CH0は最初にAN0入力をサンプリング/変換し、次にAN1入力をサンプリング/変換します。
この入力スキャンプロセスは、バッファがフルになるまで 16 回繰り返します。結果は ADC バッファ(ADC1BUF0~ADC1BUFF)に保存されます。その後ADCモジュールは割り込みを 生成します。以上のプロセスを繰り返し実行します。
図16-26: 割り込み1回あたり16入力をスキャンする
ADC Clock
SAMP
ADC1BUF0
TSAMP
TCONV
ADC1BUF1 DONE
ADC1BUFE ADC1BUFF
Input to CH0 AN0
TSAMP
TCONV
TSAMP
TCONV
TSAMP
AD1IF ASAM Conversion Trigger
AN1 AN14
TCONV
AN15
表16-15: ADC割り込み1回あたり16入力をスキャンする
制御ビット 動作シーケンス
シーケンス選択 MUXA入力をサンプリングする: AN0 ->CH0
SMPI<4:0> =01111 CH0を変換してADC1BUF0に書き込む
サンプリング16回ごとに割り込む MUXA入力をサンプリングする: AN1 ->CH0
CHPS<1:0> =00 CH0を変換してADC1BUF1に書き込む
チャンネルCH0をサンプリングする MUXA入力をサンプリングする: AN2 ->CH0
SIMSAM = n/a CH0を変換してADC1BUF2に書き込む
1チャンネル サンプリングには適用せず MUXA入力をサンプリングする: AN3 ->CH0
BUFM =0 CH0を変換してADC1BUF3に書き込む
16ワード単一データ格納バッファ MUXA入力をサンプリングする: AN4 ->CH0
ALTS =0 CH0を変換してADC1BUF4に書き込む
常にMUXA入力選択を使う MUXA入力をサンプリングする: AN5 ->CH0
ADDMAEN = 0 CH0を変換してADC1BUF5に書き込む
ADCでDMAを使わない MUXA入力をサンプリングする: AN6 ->CH0
MUXA入力選択 CH0を変換してADC1BUF6に書き込む
CH0SA<3:0> = n/a MUXA入力をサンプリングする: AN7 ->CH0
CSCNAによるオーバーライド CH0を変換してADC1BUF7に書き込む
CH0NA =0 MUXA入力をサンプリングする: AN8 ->CH0
CH0-入力にVREF-を選択する CH0を変換してADC1BUF8に書き込む
CSCNA =1 MUXA入力をサンプリングする: AN9 ->CH0
CH0+入力をスキャンする CH0を変換してADC1BUF9に書き込む CSSL<15:0> =1111 1111 1111 1111 MUXA入力をサンプリングする: AN10 ->CH0
スキャン入力選択を使わない CH0を変換してADC1BUFAに書き込む
CH123SA = n/a MUXA入力をサンプリングする: AN11 ->CH0
チャンネルCH1、CH2、CH3 +入力を使わない CH0を変換してADC1BUFBに書き込む
CH123NA<1:0> = n/a MUXA入力をサンプリングする: AN12 ->CH0
チャンネルCH1、CH2、CH3 -入力を使わない CH0を変換してADC1BUFCに書き込む MUXB入力選択 MUXA入力をサンプリングする: AN13 ->CH0
CH0SB<3:0> = n/a CH0を変換してADC1BUFDに書き込む
チャンネルCH0+入力を使わない MUXA入力をサンプリングする: AN14 ->CH0
CH0NB = n/a CH0を変換してADC1BUFEに書き込む
チャンネルCH0-入力を使わない MUXA入力をサンプリングする: AN15 ->CH0
CH123SB = n/a CH0を変換してADC1BUFFに書き込む
チャンネルCH1、CH2、CH3 +入力を使わない ADC割り込み
CH123NB<1:0> = n/a 以上を繰り返す
チャンネルCH1、CH2、CH3 -入力を使わない
初回のADC割り込み時の ADCバッファの状態
2回目のADC割り込み時の ADCバッファの状態
ADC1BUF0 AN0 Sample 1 AN0 Sample 17
ADC1BUF1 AN1 Sample 2 AN1 Sample 18
ADC1BUF2 AN2 Sample 3 AN2 Sample 19
ADC1BUF3 AN3 Sample 4 AN3 Sample 20
ADC1BUF4 AN4 Sample 5 AN4 Sample 21
ADC1BUF5 AN5 Sample 6 AN5 Sample 22
ADC1BUF6 AN6 Sample 7 AN6 Sample 23
ADC1BUF7 AN7 Sample 8 AN7 Sample 24
ADC1BUF8 AN8 Sample 9 AN8 Sample 25
ADC1BUF9 AN9 Sample 10 AN9 Sample 26
ADC1BUFA AN10 Sample 11 AN10 Sample 27
ADC1BUFB AN11 Sample 12 AN11 Sample 28
ADC1BUFC AN12 Sample 13 AN12 Sample 29
ADC1BUFD AN13 Sample 14 AN13 Sample 30
ADC1BUFE AN14 Sample 15 AN14 Sample 31
ADC1BUFF AN15 Sample 16 AN15 Sample 32
A/D コンバータ (ADC)
16.10.3 3 入力を高頻度でサンプリングし、別の 4 入力をスキャンする
図16-27と表16-16に、 S&HチャンネルCH1、CH2、CH3で3つの入力を高頻度でサンプリ ングし、S&HチャンネルCH0で他の4つの入力をスキャンして低頻度でサンプリングするよう にADCモジュールを設定する方法を示します。この場合、MUXA入力のみを使い、4チャンネ ル全てを同時にサンプリングします。4つの入力(AN4、AN5、AN6、AN7)をCH0でスキャン し、AN0、AN1、AN2をそれぞれCH1、CH2、CH3への固定入力とします。つまり、16回のサ ンプリング中にAN0、AN1、AN2をそれぞれ4回サンプリングし、AN4、AN5、AN6、AN7を それぞれ1回だけサンプリングします。
図16-27: 1回の割り込みあたり3入力を4回、4入力を1回変換する
ADC Clock
SAMP DONE
Input to CH0 AN4 TSAMP
AD1IF
TCONVTCONVTCONV TCONV
AN0 AN1 AN2 Input to CH1
Input to CH2 Input to CH3
ADC1BUFD ADC1BUFE ADC1BUFF
AN5 TSAMP
AN0 AN1 AN2
AN7 TSAMP
AN0 AN1 AN2 ASAM
AN4 AN0 AN1 AN2
ADC1BUF0 ADC1BUF1 ADC1BUF2 ADC1BUF3 ADC1BUFC
AN6 AN0 AN1 AN2 Conversion
Trigger
TCONVTCONVTCONV
TCONV TCONVTCONVTCONVTCONV
表16-16: 1回のADC割り込みあたり3入力を4回、4入力を1回変換する
制御ビット 動作シーケンス
シーケンス選択 MUXA入力をサンプリングする:
SMPI<4:0> =00011 AN4->CH0, AN0->CH1, AN1->CH2, AN2->CH3
サンプリング4回ごとに割り込む(1) CH0を変換してADC1BUF0に書き込む
CHPS<1:0> =1X CH1を変換してADC1BUF1に書き込む
チャンネルCH0, CH1, CH2, CH3をサンプリングする CH2を変換してADC1BUF2に書き込む
SIMSAM =1 CH3を変換してADC1BUF3に書き込む
全てのチャンネルを同時にサンプリングする MUXA入力をサンプリングする:
BUFM =0 AN5->CH0, AN0->CH1, AN1->CH2, AN2->CH3 16ワード単一データ格納バッファ CH0を変換してADC1BUF4に書き込む
ALTS =0 CH1を変換してADC1BUF5に書き込む
常にMUXA入力選択を使う CH2を変換してADC1BUF6に書き込む
ADDMAEN = 0 CH3を変換してADC1BUF7に書き込む
ADCでDMAを使わない MUXA入力をサンプリングする:
MUXA入力選択 AN6->CH0, AN0->CH1, AN1->CH2, AN2->CH3
CH0SA<3:0> = n/a CH0を変換してADC1BUF8に書き込む
CSCNAによるオーバーライド CH1を変換してADC1BUF9に書き込む
CH0NA =0 CH2を変換してADC1BUFAに書き込む
CH0-入力にVREF-を選択する CH3を変換してADC1BUFBに書き込む
CSCNA =1 MUXA入力をサンプリングする:
CH0+入力をスキャンする AN7->CH0, AN0->CH1, AN1->CH2, AN2->CH3
CSSL<15:0> =0000 0000 1111 0000 CH0を変換してADC1BUFCに書き込む
AN4、AN5、AN6、AN7をスキャンする CH1を変換してADC1BUFDに書き込む
CH123SA =0 CH2を変換してADC1BUFEに書き込む
CH1+ = AN0、CH2+ = AN1、CH3+ = AN2 CH3を変換してADC1BUFFに書き込む
CH123NA<1:0> =0X ADC割り込み
CH1-,CH2-,CH3- = VREF- 以上を繰り返す
MUXB入力選択 CH0SB<3:0> = n/a
チャンネルCH0+入力を使わない CH0NB = n/a
チャンネルCH0-入力を使わない CH123SB = n/a
チャンネルCH1、CH2、CH3 +入力を使わない CH123NB<1:0> = n/a
チャンネルCH1、CH2、CH3 -入力を使わない 初回のADC割り込み時の
ADCバッファの状態
2回目のADC割り込み時の ADCバッファの状態
ADC1BUF0 AN4 Sample 1 AN4 Sample 2
ADC1BUF1 AN0 Sample 1 AN0 Sample 5
ADC1BUF2 AN1 Sample 1 AN1 Sample 5
ADC1BUF3 AN2 Sample 1 AN2 Sample 5
ADC1BUF4 AN5 Sample 1 AN5 Sample 2
ADC1BUF5 AN0 Sample 2 AN0 Sample 6
ADC1BUF6 AN1 Sample 2 AN1 Sample 6
ADC1BUF7 AN2 Sample 2 AN2 Sample 6
ADC1BUF8 AN6 Sample 1 AN6 Sample 2
ADC1BUF9 AN0 Sample 3 AN0 Sample 7
ADC1BUFA AN1 Sample 3 AN1 Sample 7
ADC1BUFB AN2 Sample 3 AN2 Sample 7
ADC1BUFC AN7 Sample 1 AN7 Sample 2
ADC1BUFD AN0 Sample 4 AN0 Sample 8
ADC1BUFE AN1 Sample 4 AN1 Sample 8
ADC1BUFF AN2 Sample 4 AN2 Sample 8
Note 1: この同時サンプリング事例では、1回のサンプリングと4回の変換が1回のサンプリング/変換シーケンス として扱われます。従ってSMPI<4:0> = 00011 (サンプリング4回ごとに割り込む)に設定する事により、
16個の変換結果をADC1BUF0~ADC1BUFFにバッファリングした後にADC割り込みを生成します。