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

アナログ / デジタル コンバータ (ADC) 16.9 1.1 MspsADC コンフィグレーション

デバイスが40 MIPSで動作する場合、スループット1.1 Msps/分解能10ビットでサンプリン グするようにADCモジュールを設定できます。

AD12Bビット(ADxCON1<10>)を「0」にクリアする事により、ADCモジュールを10ビット 動作に設定します。ASAMビット(ADxCON1<3>)を「1」にセットする事により、変換終了後 にサンプリングを自動的に開始します。SSRC<2:0>ビット(ADxCON1<7:5>)を「111」に設 定する事により、サンプリング終了/変換開始をトリガするサンプルクロック源として内部カ ウンタを選択します。ADRCビット(ADxCON3<15>)を「0」にクリアする事により、ADC変 換クロックとしてシステムクロックを選択します。自動サンプリング時間ビットを12 TADより も低く設定します。ADCS<7:0>ビット(ADxCON3<7:0>)を「00000011」に設定する事によ り、ADC変換クロックを75 nsに設定します(式16-7参照)。

16-7: 40 MIPS動作時のADC変換クロック

最大16 MIPSのデバイスでも、CPUが13.3 MIPSで動作すれば1.1 MspsのADC速度を達成 できます。式16-8に従ってADC変換クロックを75 nsに設定します。

16-8: 13.3 MIPS動作時のADC変換クロック

ADCモジュールを10ビット動作に設定するため、ADCの変換時間は式16-9から12 TADとな ります。

16-9: ADC変換時間

ADCチャンネルCH0とCH1を選択(CHPS<1:0> = 01)し、アナログ入力AN0またはAN3 (常にいずれか1つだけ)を逐次モード(SIMSAM = 0)で変換するように設定します。図 16-25 に、ADCモジュールの動作シーケンスを示します。

16-25: 1.1 Msps用サンプリング シーケンス

TAD = TCY × (ADCS<7:0> + 1) = (1/40M) × 3 = 75 ns (13.3 MHz)

TAD = TCY × (ADCS<7:0> + 1) = (1/13.3M) × 3 = 75 ns (13.3 MHz)

TCONV = 12 × TAD = 900 ns (1.1 MHz)

Sample 1 ANx

Sample 2 ANx CH0

CH1

Convert 1 ANx

Convert 2 ANx SOC

Sample 4 ANx Convert 3 ANx

Convert 4 ANx Sample 3 ANx Sample 5 ANx

16-8: 1.1 MspsADCコンフィグレーション コード void initAdc1(void)

{

AD1CON1bits.FORM = 3; // Data Output Format:Signed Fraction (Q15 format)

AD1CON1bits.SSRC = 7; // Internal Counter (SAMC) ends sampling and starts conversion AD1CON1bits.ASAM = 1; // ADC Sample Control:Sampling begins immediately after

// conversion

AD1CON1bits.AD12B = 0; // 10-bit ADC operation

AD1CON2bits.SIMSAM = 0; // Sequential sampling of channels AD1CON2bits.CHPS = 1; // Converts channels CH0/CH1

AD1CON3bits.ADRC = 0; // ADC Clock is derived from Systems Clock AD1CON3bits.SAMC = 0; // Auto Sample Time = 0 * TAD

AD1CON3bits.ADCS = 2; // ADC Conversion Clock TAD = TCY * (ADCS + 1) = (1/40M) * 3 = // 75 ns (13.3 MHz)

// ADC Conversion Time for 10-bit Tconv = 12 * TAD = 900 ns (1.1 MHz) AD1CON1bits.ADDMABM = 1; // DMA buffers are built in conversion order mode

AD1CON2bits.SMPI = 0; // SMPI must be 0 //AD1CHS0/AD1CHS123:A/D Input Select Register

AD1CHS0bits.CH0SA = 0; // MUXA +ve input selection (AIN0) for CH0 AD1CHS0bits.CH0NA = 0; // MUXA -ve input selection (VREF-) for CH0 AD1CHS123bits.CH123SA = 0;// MUXA +ve input selection (AIN0) for CH1 AD1CHS123bits.CH123NA = 0;// MUXA -ve input selection (VREF-) for CH1 //AD1PCFGH/AD1PCFGL:Port Configuration Register

AD1PCFGL = 0xFFFF;

AD1PCFGH = 0xFFFF;

AD1PCFGLbits.PCFG0 = 0; // AN0 as Analog Input

IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit IEC0bits.AD1IE = 0; // Do Not Enable A/D interrupt AD1CON1bits.ADON = 1; // Turn on the A/D converter void initDma0(void)

{

DMA0CONbits.AMODE = 0; // Configure DMA for Register indirect with post increment DMA0CONbits.MODE = 2; // Configure DMA for Continuous Ping-Pong mode

DMA0PAD = (int)&ADC1BUF0;

DMA0CNT = (NUMSAMP-1);

DMA0REQ = 13;

DMA0STA = __builtin_dmaoffset(BufferA);

DMA0STB = __builtin_dmaoffset(BufferB);

IFS0bits.DMA0IF = 0; //Clear the DMA interrupt flag bit IEC0bits.DMA0IE = 1; //Set the DMA interrupt enable bit DMA0CONbits.CHEN = 1;

}

アナログ / デジタル コンバータ (ADC)

16.10 DMA なしデバイスのサンプリング / 変換シーケンス例

以下のコンフィグレーション例では、各種のサンプリングおよびバッファリング設定でのA/D 動作を説明します。各例では、ASAMビットをセットする事により、自動的にサンプリングを 開始します。また、変換トリガがサンプリング終了/変換開始をトリガします。

16.10.1 1 チャンネルを複数回サンプリング / 変換する

図 16-26と表16-14に、ADCの基本的なコンフィグレーションを示します。この場合、1つの S&Hチャンネル(CH0)を使用して1つのADC入力(AN0)をサンプリング/変換します。結果 はADCバッファ(ADC1BUF0~ADC1BUFF)に保存されます。このプロセスを16回繰り返し てバッファがフルになると、ADCモジュールが割り込みを生成します。以上のプロセスを繰り 返し実行します。

CHPSビットでS&H CH0だけを有効にします。ALTSをクリアする事により、MUXA入力だ けを有効にします。CH0SAビットとCH0NAビットでCH0+入力に入力チャンネルAN0、 CH-入力にVREF-を選択します。その他の入力選択ビットは全て使用しません。

16-26: 1チャンネルを割り込み1回あたり16回変換する

ADC Clock

SAMP

ADC1BUF0

TSAMP

TCONV

ADC1BUF1 DONE

ADC1BUF2 ADC1BUFF

Input to CH0 AN0

TSAMP

TCONV

AN0

TSAMP

TCONV

AN0

TSAMP

TCONV

AN0

AD1IF ASAM Conversion Trigger

16-14: 1チャンネルをADC割り込み1回あたり16回変換する

制御ビット 動作シーケンス

シーケンス選択 MUXA入力をサンプリングする: AN0 → CH0

SMPI<3:0> =1111 CH0を変換してADC1BUF0に書き込む

サンプリング16回ごとに割り込む MUXA入力をサンプリングする: AN0 → CH0

CHPS<1:0> =00 CH0を変換してADC1BUF1に書き込む

チャンネル CH0 MUXA入力をサンプリングする: AN0 → CH0

SIMSAM = n/a CH0を変換してADC1BUF2に書き込む

1チャンネル サンプリングには適用せず MUXA入力をサンプリングする: AN0 → CH0

BUFM =0 CH0を変換してADC1BUF3に書き込む

16ワード単一結果バッファ MUXA入力をサンプリングする: AN0 → CH0

ALTS = 0 CH0を変換してADC1BUF4に書き込む

常にMUXA入力選択を使用する MUXA入力をサンプリングする: AN0 → CH0 MUXA入力選択 CH0を変換してADC1BUF5に書き込む

CH0SA<3:0> =0000 MUXA入力をサンプリングする: AN0 → CH0

CH0+入力にAN0を選択する CH0を変換してADC1BUF6に書き込む

CH0NA =0 MUXA入力をサンプリングする: AN0 → CH0

CH0-入力にVREF-を選択する CH0を変換してADC1BUF7に書き込む

CSCNA =0 MUXA入力をサンプリングする: AN0 → CH0

入力スキャンしない CH0を変換してADC1BUF8に書き込む

CSSL<15:0> = n/a MUXA入力をサンプリングする: AN0 → CH0

スキャン入力選択を使用しない CH0を変換してADC1BUF9に書き込む

CH123SA = n/a MUXA入力をサンプリングする: AN0 → CH0

チャンネルCH1/CH2/CH3+入力を使用しない CH0を変換してADC1BUFAに書き込む

CH123NA<1:0> = n/a MUXA入力をサンプリングする: AN0 → CH0

チャンネルCH1/CH2/CH3 -入力を使用しない CH0を変換してADC1BUFBに書き込む MUXB入力選択 MUXA入力をサンプリングする: AN0 → CH0

CH0SB<3:0> = n/a CH0を変換してADC1BUFCに書き込む

チャンネルCH0+入力を使用しない MUXA入力をサンプリングする: AN0 → CH0

CH0NB = n/a CH0を変換してADC1BUFDに書き込む

チャンネルCH0-入力を使用しない MUXA入力をサンプリングする: AN0 → CH0

CH123SB = n/a CH0を変換してADC1BUFEに書き込む

チャンネルCH1/CH2/CH3 +入力を使用しない MUXA入力をサンプリングする: AN0 → CH0

CH123NA<1:0> = n/a CH0を変換してADC1BUFFに書き込む

チャンネルCH1/CH2/CH3 -入力を使用しない ADC割り込み 以上を繰り返す 初回ADC割り込み時の

ADCバッファの状態

2回目ADC割り込み時の ADCバッファの状態

ADC1BUF0 AN0サンプル1 AN0サンプル17

ADC1BUF1 AN0サンプル2 AN0サンプル18

ADC1BUF2 AN0サンプル3 AN0サンプル19

ADC1BUF3 AN0サンプル4 AN0サンプル20

ADC1BUF4 AN0サンプル5 AN0サンプル21

ADC1BUF5 AN0サンプル6 AN0サンプル22

ADC1BUF6 AN0サンプル7 AN0サンプル23

ADC1BUF7 AN0サンプル8 AN0サンプル24

ADC1BUF8 AN0サンプル9 AN0サンプル25

ADC1BUF9 AN0サンプル10 AN0サンプル26

ADC1BUFA AN0サンプル11 AN0サンプル27

ADC1BUFB AN0サンプル12 AN0サンプル28

ADC1BUFC AN0サンプル13 AN0サンプル29

ADC1BUFD AN0サンプル14 AN0サンプル30

アナログ / デジタル コンバータ (ADC)

16.10.2 全アナログ入力をスキャンしながら A/D 変換する

図 16-27と表16-15に、利用可能な全アナログ入力チャンネルを1つのS&Hチャンネル(CH0) で サ ン プ リ ン グ / 変 換 す る 場 合 の セ ッ ト ア ッ プ 例 を 示 し ま す。ADC 制 御 レ ジ ス タ 2 (ADxCON2<10>)のスキャン入力選択ビット(CSCNA)をセットする事により、CH0正極性入 力へのADC入力をスキャンします。その他の条件は16.10.1「1チャンネルを複数回サンプリ ング/変換する」と同じです。

CH0 は最初にAN0入力をサンプリング/変換し、次にAN1入力をサンプリング/変換します。

この入力スキャンプロセスは、バッファがフルになるまで16回繰り返されます。結果はADC バッファ(ADC1BUFA~ADC1BUFF)に保存されます。その後ADCモジュールが割り込みを 生成します。以上のプロセスを繰り返し実行します。

16-27:割り込み1回あたり16入力をスキャンする

ADC Clock

SAMP

ADC1BUF0

TSAMP

TCONV

ADC1BUF1 DONE

ADC1BUF2 ADC1BUFF

Input to CH0 AN0

TSAMP

TCONV

AN1

TSAMP

TCONV

AN14

TSAMP

TCONV

AN15

AD1IF ASAM Conversion Trigger

16-15: ADC割り込み1回あたり16入力をスキャンする

制御ビット 動作シーケンス

シーケンス選択 MUXA入力をサンプリングする: AN0 → CH0

SMPI<3:0> =1111 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

MUXA入力選択 CH0を変換してADC1BUF5に書き込む

CH0SA<3:0> = n/a MUXA入力をサンプリングする: AN6 → CH0

CSCNAによるオーバーライド CH0を変換してADC1BUF6に書き込む

CH0NA =0 MUXA入力をサンプリングする: AN7 → CH0

CH0-入力にVREF-を選択する CH0を変換してADC1BUF7に書き込む

CSCNA =1 MUXA入力をサンプリングする: AN8 → CH0

CH0+入力をスキャンする CH0を変換してADC1BUF8に書き込む CSSL<15:0> =1111 1111 1111 1111 MUXA入力をサンプリングする: AN9 → CH0

AN0 ~AN15をスキャンする CH0を変換してADC1BUF9に書き込む

CH123SA = n/a MUXA入力をサンプリングする: AN10 → CH0

チャンネルCH1/CH2/CH3+入力を使用しない CH0を変換してADC1BUFAに書き込む

CH123NA<1:0> = n/a MUXA入力をサンプリングする: AN11 → CH0

チャンネルCH1/CH2/CH3-入力を使用しない CH0を変換してADC1BUFBに書き込む MUXB入力選択 MUXA入力をサンプリングする: AN12 → CH0

CH0SB<3:0> = n/a CH0を変換してADC1BUFCに書き込む

チャンネルCH0+入力を使用しない MUXA入力をサンプリングする: AN13 → CH0

CH0NB = n/a CH0を変換してADC1BUFDに書き込む

チャンネルCH0-入力を使用しない MUXA入力をサンプリングする: AN14 → CH0

CH123SB = n/a CH0を変換してADC1BUFEに書き込む

チャンネルCH1/CH2/CH3+入力を使用しない MUXA入力をサンプリングする: AN15 → CH0

CH123NB<1:0> = n/a CH0を変換してADC1BUFFに書き込む

チャンネルCH1/CH2/CH3-入力を使用しない ADC割り込み 以上を繰り返す 初回ADC割り込み時の

ADCバッファの状態

2回目ADC割り込み時の ADCバッファの状態

ADC1BUF0 AN0サンプル1 AN0サンプル17

ADC1BUF1 AN1サンプル2 AN1サンプル18

ADC1BUF2 AN2サンプル3 AN2サンプル19

ADC1BUF3 AN3サンプル4 AN3サンプル20

ADC1BUF4 AN4サンプル5 AN4サンプル21

ADC1BUF5 AN5サンプル6 AN5サンプル22

ADC1BUF6 AN6サンプル7 AN6サンプル23

ADC1BUF7 AN7サンプル8 AN7サンプル24

ADC1BUF8 AN8サンプル9 AN8サンプル25

ADC1BUF9 AN9サンプル10 AN9サンプル26

ADC1BUFA AN10サンプル11 AN10サンプル27

ADC1BUFB AN11サンプル12 AN11サンプル28

ADC1BUFC AN12サンプル13 AN12サンプル29

ADC1BUFD AN13サンプル14 AN13サンプル30