• 検索結果がありません。

A/D コンバータ (ADC)16.10.216個のアナログ入力をスキャンしながらA/D変換する

ドキュメント内 Section 16. Analog-to-Digital Converter (ADC) (ページ 59-63)

図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割り込みを生成します。

A/D コンバータ (ADC)

ドキュメント内 Section 16. Analog-to-Digital Converter (ADC) (ページ 59-63)