第17 章 10 ビット a/d コンバータ - microchip · 2012-11-07 · © 2007 microchip...

41
© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-1 10 ビット A/D コンバータ 17 17 10 ビット A/D コンバータ ハイライト 本章では次のトピックについて説明します。 17.1 はじめに ............................................................. 17-2 17.2 A/D 用語と変換シーケンス ............................................. 17-4 17.3 関連レジスタ ......................................................... 17-5 17.4 A/D モジュールの構成設定 ............................................ 17-11 17.5 初期化 .............................................................. 17-14 17.6 サンプリング プロセスの制御.......................................... 17-15 17.7 変換プロセスの制御 .................................................. 17-15 17.8 A/D 結果バッファ .................................................... 17-21 17.9 変換 シーケンス例.................................................... 17-23 17.10 A/D サンプリング要件 ................................................ 17-32 17.11 変換関数 ............................................................ 17-33 17.12 A/D 精度 / 誤差....................................................... 17-34 17.13 スリープとアイドル モード中の動作.................................... 17-34 17.14 リセットの影響 ...................................................... 17-35 17.15 レジスタ マップ...................................................... 17-36 17.16 電気的仕様 .......................................................... 17-37 17.17 設計の秘訣 .......................................................... 17-38 17.18 関連する アプリケーション ノート ..................................... 17-39 17.19 改版履歴 ............................................................ 17-40

Upload: others

Post on 19-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

第 17 章 10 ビット A/D コンバータ

10ビット

A/D

コンバータ

17

ハイライト

本章では次のトピックについて説明します。

17.1 はじめに ............................................................. 17-217.2 A/D 用語と変換シーケンス ............................................. 17-417.3 関連レジスタ ......................................................... 17-517.4 A/D モジュールの構成設定 ............................................ 17-1117.5 初期化 .............................................................. 17-1417.6 サンプリング プロセスの制御.......................................... 17-1517.7 変換プロセスの制御 .................................................. 17-1517.8 A/D 結果バッファ .................................................... 17-2117.9 変換 シーケンス例.................................................... 17-2317.10 A/D サンプリング要件 ................................................ 17-3217.11 変換関数 ............................................................ 17-3317.12 A/D 精度 / 誤差....................................................... 17-3417.13スリープとアイドル モード中の動作.................................... 17-3417.14リセットの影響 ...................................................... 17-3517.15レジスタ マップ...................................................... 17-3617.16電気的仕様 .......................................................... 17-3717.17設計の秘訣 .......................................................... 17-3817.18関連する アプリケーション ノート ..................................... 17-3917.19改版履歴 ............................................................ 17-40

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-1

PIC24F ファミリ リファレンス マニュアル

17.1 はじめに PIC24F 10 ビット A/D コンバータは次のような特徴を持っています。

• 逐次変換型 (SAR) コンバータ

• 高 500 ksps の変換速度 • 大 16 のアナログ入力チャネル

• 外部電圧リファレンス入力ピン

• 単極差動のサンプル ホールド (S/H) アンプ

• 自動チャネルスキャン モード

• 変換トリガ要因は選択可能

• 16 ワードの変換結果用バッファ

• バッファ格納モードを選択可能

• 4 種の結果形式オプション • CPU がスリープまたはアイドル モード中でも動作

図 17-1 は 10 ビット A/D のブロック図です。 この コンバータには多ピンのもので AN0 から AN15 と呼ばれる 大 16 までのアナログ入力チャネルを持っています。実際のアナログ入力ピンと外部電圧リファレンス入力ピンの数は個別の PIC24F デバイスに依存します。デバイス固有の詳細については個別の PIC24F データ シートを参照してください。

外部電圧リファレンス接続用に 2 つのアナログ入力ピン VREF+ と VREF- があります。これらの電圧リファレンス入力は他のアナログ入力ピンと共用になっています。A/D リファレンス電圧はソフトウェア制御により、デバイス供給電圧 (AVDD/AVSS) か、VREF+/VREF- ピンの電圧レベルのいずれかを選択できます。

アナログ入力は 2 つの独立したマルチプレクサ (MUX A と MUX B) 経由で S/H チャネルまたは CH0 と呼ばれる S/H 増幅器に接続されます。これは、コンバータに対して変換中 2セットのアナログ入力間を切り替えます。いずれの入力ピンを使用しても単極差動変換が可能です。オプションでアナログ入力スキャン モードとすると、選択されたチャネルの範囲を自動的にシーケンシャルにスキャンし変換できます。

10 ビット A/D はサンプルと変換プロセスを制御する多くの手段を持っています。サンプルと変換のトリガ要因は、さまざまなハードウェア要因から得られ、ソフトウェアで手動にて制御できます。自動サンプル モードと自動変換トリガを一緒に使うと、ソフトウェアの介在なしでエンドレスに自動変換を行うことが可能となります。

モジュール レベルの割り込みが毎回のサンプル /変換終了時か多重シーケンス後に生成されます。割り込みごとのシーケンス回数は 1 から 16 回のいずれかです。

コンバータは変換結果をデバイスのデータ空間にマップされた 16 ワードの内部データバッファに格納します。10 ビットの結果のそれぞれは 4 種類の 16 ビット出力フォーマットのうちの1つで格納されます。

DS39705A_JP - ページ 17-2 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

図 17-1: 10 ビット A/D コンバータのブロック図

コンパレータ

10 ビット SAR 変換ロジック

VREF+

DAC

AN12

AN13

AN14

AN15

AN8

AN9

AN10

AN11

AN4

AN5

AN6

AN7

AN0

AN1

AN2

AN3

VREF-

サンプル制御

S/H

AVSS

AVDD

ADC1BUF0:ADC1BUFF

AD1CON1AD1CON2AD1CON3AD1CHS

AD1PCFGAD1CSSL

制御ロジック

データ形式変換

入力 MUX 制御

変換制御

ピン構成制御

内部データ バス

16

VR+VR-

MU

X A

(1)

MU

X B

VINH

VINL

VINH

VINH

VINL

VINL

VR+

VR-VR 選

注 1: MUX A のみが入力スキャンをサポートしています。詳細は AD1CSSL ( レジスタ 17-6) を参照して下さい。

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-3

PIC24F ファミリ リファレンス マニュアル

17.2 A/D 用語と変換シーケンス

サンプル時間とは、A/D モジュールの S/H 増幅器がアナログ入力ピンに接続されている時間です。サンプル時間は、手動で、あるいは A/D コンバータ ハードウエアによる自動で開始し、そして終了します。S/H アンプが必要な A/D コンバータ精度を出すためには、小のサンプル時間を確保する必要があります。

変換時間とは A/D コンバータが、S/H 増幅器のもつ電圧を変換するのに要する時間です。変換トリガによりサンプリング時間を終了し、A/D 変換またはサンプル / 変換シーケンスが始まります。変換開始トリガは種々のハードウェア要因から得ることもできますし、ソフトウェアによる手動制御も可能です。A/D コンバータは、結果の 1 ビット分の変換に1A/D クロックサイクル (TAD) を必要とし、さらにもう 2 サイクル必要とします。従って 10ビットの変換を完了するには合わせて 12 TAD サイクルが必要です。変換時間が完了すると、結果は 16 A/D 結果バッファのいずれかにロードされます。 S/H は入力ピンに再接続され、さらに CPU 割り込みを発生します。サンプル時間と A/D 変換時間の総計が総変換時間になります。 図 17-2 に基本的な変換シーケンスとインターバル間の関係を示します。

変換開始トリガは種々のハードウェアから得ることもできますし、ソフトウェアによる手動制御も可能です。変換トリガの一つのオプションは自動変換で、カウンタと A/D クロックを使って自動変換間の時間を設定します。自動サンプル モードと自動変換トリガを一緒に使用すると、ソフトウェアの介在なしでエンドレスに自動変換を行うことが可能となります。

図 17-2: A/D サンプル / 変換シーケンス

サンプル時間 A/D 変換時間

A/D 合計変換時間

サンプリングのために S/H アンプ

がアナログ入力ピンに接続される

入力が CH0 から切り離され S/H アンプは信号を保持

変換トリガにより A\D 変換開始

変換完了、結果は A/D バッファ レジ

スタに格納される

割り込み発生 ( オプション )

DS39705A_JP - ページ 17-4 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.3 関連レジスタ

10 ビット A/D コンバータ モジュールの動作には、全部で 22 種のレジスタを使います。全てのレジスタがデータ メモリ空間にマップされています。

17.3.1 制御レジスタ

モジュールは 6 個の制御とステータスのレジスタがあります。

• AD1CON1: A/D 制御レジスタ 1• AD1CON2: A/D 制御レジスタ 2• AD1CON3: A/D 制御レジスタ 3• AD1CHS: A/D 入力チャネル選択レジスタ

• AD1PCFG: A/D ポート構成レジスタ

• AD1CSSL: A/D 入力スキャン選択レジスタ

AD1CON1、 AD1CON2、AD1CON3 レジスタ ( レジスタ 17-1、 レジスタ 17-2、レジスタ 17-3)が A/D モジュールの全体動作を制御します。これらには、モジュールの有効化、変換クロック、電圧リファレンス源の設定、サンプリングと変換トリガの選択、サンプル / 変換シーケンスの手動制御などを含んでいます。

AD1CHS レジスタ ( レジスタ 17-4) で S\H アンプに接続する入力チャネルを選択します。また入力マルチプレクサの選択と差動サンプルのリファレンス源の選択も行います。

AD1PCFG レジスタ ( レジスタ 17-5) で I/O ピンをアナログ入力にするか、デジタル I/O にするかを設定します。

AD1CSSL レジスタ ( レジスタ 17-6) でシーケンシャル スキャンに含めるチャネルを選択します。

17.3.2 A/D 結果バッファ

モジュールには A/D 結果を格納する ADC1BUF と呼ばれる 16 ワードのデュアル ポートRAM があります。各バッファごとにデータ メモリ空間にマップされていて、個々にアドレス指定できます。その 16 個 のバッファの位置は、ADC1BUF0 から ADC1BUFF として参照できます。A/D 結果バッファは読み出し専用です。

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-5

PIC24F ファミリ リファレンス マニュアル

レジスタ 17-1: AD1CON1: A/D 制御レジスタ 1

R/W-0 U-0 R/W-0 U-0 U-0 U-0 R/W-0 R/W-0

ADON — ADSIDL — — — FORM1 FORM0ビット 15 ビット 8

R/W-0 R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0, HCS R/C-0, HCS

SSRC2 SSRC1 SSRC0 — — ASAM SAMP DONE

ビット 7 ビット 0

Legend: U = 未実装、読むと「0」

R = 読み出し可 W = 書き込み可 HCS = ハードウェアでクリア / セット

-n = POR 後の値 ‘1’ = セット ‘0’ = クリア x = 不定

ビット 15 ADON: A/D 動作モード ビット

1 = A/D コンバータ モジュールは動作中0 = A/D コンバータは無効

ビット 14 未実装 : 読むと「0」ビット 13 ADSIDL: アイドル モード時停止ビット

1 = デバイスがアイドル モード中はモジュール動作停止0 = アイドル モード中もモジュール動作継続

ビット 12-10 未実装 : 読むと「0」ビット 9-8 FORM1:FORM0: データ出力形式ビット

11 = 符号付固定小数 (sddd dddd dd00 0000)10 = 固定小数 (dddd dddd dd00 0000)01 = 符号付整数 (ssss sssd dddd dddd)00 = 整数 (0000 00dd dddd dddd)

ビット 7-5 SSRC2:SSRC0: 変換トリガ要因選択ビット

111 = 内蔵カウンタでサンプリングを終了させ変換を開始する ( 自動変換 )110 = 予約10x = 予約100 = 予約011 = 予約010 = タイマ 3 の比較一致でサンプリングを終了し変換を開始する001 = INT0 ピンのアクティブな遷移でサンプリングを終了し変換を開始する000 = SAMP ビットのクリアでサンプリングを終了し変換を開始する

ビット 4-3 未実装 : 読むと「0」ビット 2 ASAM: A/D サンプル自動開始ビット

1 = 前の変換終了後直ぐサンプリングを開始する。 SAMP ビットは自動でセットされる0 = SAMP ビットのセットでサンプリングを開始する

ビット 1 SAMP: A/D サンプル有効化ビット

1 = 少なくとも 1 個の A/D サンプル ホールド アンプがサンプリングする0 = A/D サンプル ホールド アンプはホールド中ASAM = 0のとき、このビットに「1」を書くとサンプリングを開始する。 SSRC<2:0> = 000のとき、このビットに「0」を書くとサンプリングを終了し変換を開始する

ビット 0 DONE: A/D 変換ステータス ビット

1 = A/D 変換完了0 = A/D 変化が完了していないか、開始していないこのビットをクリアしても実行中の動作にたいしては影響を与えない。ソフトウェアか新たな変換開

始によりクリアされる

DS39705A_JP - ページ 17-6 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

レジスタ 17-2: AD1CON2: A/D 制御レジスタ 2

R/W-0 R/W-0 R/W-0 U-0 U-0 R/W-0 U-0 U-0

VCFG2 VCFG1 VCFG0 r — CSCNA — —ビット 15 ビット 8

R-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BUFS(1) — SMPI3 SMPI2 SMPI1 SMPI0 BUFM ALTSビット 7 ビット 0

凡例 : R = 読み出し可 W = 書き込み可 U = 未実装、読むと「0」-n = POR 後の値 ‘1’ = セット ‘0’ = クリア x = 不定

ビット 15-13 VCFG2:VCFG0: 電圧リファレンス構成ビット

ビット 12 予約 : 「0」のまま

ビット 11 未実装 : 読むと「0」ビット 10 CSCNA: MUX A 入力マルチプレクサ用 CH0+ S/H スキャン入力選択設定ビット

1 = スキャン入力とする0 = スキャン入力にしない

ビット 9-8 未実装 : 読むと「0」ビット 7 BUFS: バッファ格納ステータス ビット (1)

1 = A/Dは現在ADC1BUF8-ADC1BUFFを使用中、ADC1BUF0-ADC1BUF7側のデータ アクセスをして下さい

0 = A/Dは現在 ADC1BUF0-ADC1BUF7を使用中、ADC1BUF8-ADC1BUFF側のデータ アクセスをして下さい

ビット 6 未実装 : 読むと「0」ビット 5-2 SMPI3:SMPI0: 割り込みごとのサンプル/変換シーケンス選択ビット

1111 = 16 番目のサンプル / 変換シーケンスの完了ごとに割り込み1110 = 15 番目のサンプル / 変換シーケンスの完了ごとに割り込み.....0001 = 2 番目のサンプル / 変換シーケンスの完了ごとに割り込み0000 = サンプル / 変換シーケンスの完了ごとに割り込み

ビット 1 BUFM: バッファ モード選択ビット

1 = バッファを 2 組の 8 ワード バッファとして構成する(ADC1BUF0 ~ ADC1BUF7 と ADC1BUF8 ~ ADC1BUFF)

0 = バッファを 1 個の 16 ワード バッファとする (ADC1BUF0 ~ ADC1BUFF)ビット 0 ALTS: 交互入力サンプル モード選択ビット

1 = MUX A入力を 初のサンプルに使用し、 その後のすべてのサンプルにはMUX BとMUX A入力マルチプレクサ設定を交互に使用する

0 = 常に MUX A 入力マルチプレクサ設定を使用する

注 1: ADC1BUF が 2 組のバッファとして構成されたとき (BUFM = 1) だけ有効。

VCFG2:VCFG0 VR+ VR-

000 AVDD AVSS

001 外部 VREF+ ピン AVSS

010 AVDD 外部 VREF- ピン

011 外部 VREF+ ピン 外部 VREF- ピン

1xx AVDD AVSS

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-7

PIC24F ファミリ リファレンス マニュアル

レジスタ 17-3: AD1CON3: A/D 制御レジスタ 3

R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

ADRC — — SAMC4 SAMC3 SAMC2 SAMC1 SAMC0ビット 15 ビット 8

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

ADCS7 ADCS6 ADCS5 ADCS4 ADCS3 ADCS2 ADCS1 ADCS0ビット 7 ビット 0

凡例 : R = 読み出し可 W = 書き込み可 U = 未実装、読むと「0」-n = POR 後の値 ‘1’ = セット ‘0’ = クリア x = 不定

ビット 15 ADRC: A/D 変換クロック源ビット

1 = A/D 内蔵 RC クロックとする0 = システム クロックから派生したクロック

ビット 14-13 未実装 : 読むと「0」ビット 12-8 SAMC4:SAMC0: 自動サンプル時間ビット

11111 = 31 TAD·····00001 = 1 TAD

00000 = 0 TAD ( 推奨ではない )ビット 7-0 ADCS7:ADCS0: A/D 変換クロック選択ビット

11111111 = 128 Tcy11111110 = 127.5 Tcy·····00000010 = 1.5Tcy00000001 = Tcy00000000 = 0.5Tcy

DS39705A_JP - ページ 17-8 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

レジスタ 17-4: AD1CHS: A/D 入力チャネル選択レジスタ

R/W-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

CH0NB — — — CH0SB3 CH0SB2 CH0SB1 CH0SB0ビット 15 ビット 8

R/W-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

CH0NA — — — CH0SA3 CH0SA2 CH0SA1 CH0SA0ビット 7 ビット 0

凡例 : R = 読み出し可 W = 書き込み可 U = 未実装、読むと「0」-n = POR 後の値 ‘1’ = セット ‘0’ = クリア x = 不定

ビット 15 CH0NB: MUX B マルチプレクサ用チャネル 0 負側入力選択ビット

1 = チャネル 0 負側入力を AN1 とする0 = チャネル 0 負側入力を VR- とする

ビット 14-12 未実装 : 読むと「0」ビット 11-8 CH0SB3:CH0SB0: MUX B マルチプレクサ用チャネル 0 正側入力選択ビット

1111 = チャネル 0 正側入力を AN15 とする1110 = チャネル 0 正側入力を AN14 とする1101 = チャネル 0 正側入力を AN13 とする·····0001 = チャネル 0 正側入力を AN1 とする0000 = チャネル 0 正側入力を AN0 とする

ビット 7 CH0NA: MUX A マルチプレクサ用チャネル 0 負側入力選択ビット

1 = チャネル 0 負側入力を AN1 とする0 = チャネル 0 負側入力を VR- とする

ビット 6-4 未実装 : 読むと「0」ビット 3-0 CH0SA3:CH0SA0: MUX A マルチプレクサ用チャネル 0 正側入力選択ビット

1111 = チャネル 0 正側入力を AN15 とする1110 = チャネル 0 正側入力を AN14 とする1101 = チャネル 0 正側入力を AN13 とする·····0001 = チャネル 0 正側入力を AN1 とする0000 = チャネル 0 正側入力を AN0 とする

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-9

PIC24F ファミリ リファレンス マニュアル

レジスタ 17-5: AD1PCFG: A/D ポート構成レジスタ

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

PCFG15 PCFG14 PCFG13 PCFG12 PCFG11 PCFG10 PCFG9 PCFG8ビット 15 ビット 8

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

PCFG7 PCFG6 PCFG5 PCFG4 PCFG3 PCFG2 PCFG1 PCFG0ビット 7 ビット 0

凡例 : R = 読み出し可 W = 書き込み可 U = 未実装、読むと「0」-n = POR 後の値 ‘1’ = セット ‘0’ = クリア x = 不定

ビット 15-0 PCFG15:PCFG0: アナログ入力ピン構成制御ビット

1 = アナログ入力用ピンをデジタル モードにする。ポート読み出し可能。A/D 入力マルチプレクサの入力は AVss に接続される

0 = アナログ入力用ピンをアナログ モードとする。ポート読み出しは無効。A/D モジュールはピンの電圧をサンプルする

レジスタ 17-6: AD1CSSL: MUX A 用入 A/D 力スキャン選択レジスタ (1)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CSSL15 CSSL14 CSSL13 CSSL12 CSSL11 CSSL10 CSSL9 CSSL8ビット 15 ビット 8

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CSSL7 CSSL6 CSSL5 CSSL4 CSSL3 CSSL2 CSSL1 CSSL0ビット 7 ビット 0

凡例 : R = 読み出し可 W = 書き込み可 U = 未実装、読むと「0」-n = POR 後の値 ‘1’ = セット ‘0’ = クリア x = 不定

ビット 15-0 CSSL15:CSSL0: A/D 入力チャネル スキャン 選択ビット

1 = 対応するアナログ チャネル ANxx を MUX A のシーケンシャル スキャンとして選択する0 = 対応するアナログ チャネルはシーケンシャル スキャンでは無視する

注 1: MUX A のみスキャンがサポートされています。

DS39705A_JP - ページ 17-10 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.4 A/D モジュールの構成設定

A/D 変換を差動させるには次のような手順を実行して下さい。

1. A/D モジュールを構成設定する

• アナログ入力として期待する範囲に合う電圧リファレンス源を選択する

• プロセッサ クロックで望むデータ レートとなるアナログ変換クロックを選択

• どうサンプリングを起動するかを決める

• S/H チャネルにどの入力を接続するかを決める

• 望ましいサンプル / 変換シーケンスを選択する

• バッファ内の変換結果の格納方法を選択する

• 割り込みレートを選択する

• A/D モジュールをオンする

2. A/D 割り込みを設定する ( 必要な場合 )• AD1IF ビットをクリア

• A/D 割り込み優先レベルを選択

各設定ステップのオプションについては次の各項で説明しています。

17.4.1 電圧リファレンス源の選択

A/D 変換のための電圧リファレンスは、VCFG2:VCFG0 制御ビット (ADCON2<15:13>) を使用して選択されます。上位側電圧リファレンス (VR+) および下位側電圧リファレンス(VR-) は、内部 AVDD および AVSS 電圧範囲か、VREF+ および VREF- 入力ピンになります。

外部電圧リファレンス ピンは、少ピン デバイスの場合には AN0 入力と AN1 入力と共用される場合があります。A/D コンバータは、VREF+ および VREF- 入力ピンで共有される場合でも、このピンの電圧の変換を実行します。

外部リファレンス ピンに適用される電圧は、そのデバイスの仕様に合わせる必要があります。詳しくはデバイス データ シートの 17.16 項 「電気的仕様」を参照してください。

17.4.2 A/D 変換クロックの選択

A/D 変換には変換が完了できる 大変換レートがあります。アナログ モジュール クロック TAD は、変換のタイミングを制御します。A/D 変換には 12 クロック周期 (12TAD) が必要です。A/D クロックは、デバイス命令クロックから得られます。

A/D 変換クロックの周期は、8 ビットカウンタを使用してソフトウェアで選択できます。TAD には 64 のオプションが可能であり、ADCS7:ADCS0 ビット (AD1CON3<7:0>) により指定されます。式 17-1 から、ADCS 制御ビット、およびデバイス命令クロック周期 TCY の関数として TAD 値が求められます。正しい A/D 変換のために、A/D 変換クロック (TAD) には 75 ns という 小の TAD 時間を確保して選択して下さい。

式 17-1: A/D 変換クロック周期

注 : SSRC、 ASAM、 BUFS SMPI、 BUFM、 ALTS ビットは、AD1CON3、 AD1CSSL レジスタ同様、ADON = 1 の時には書き込まないで下さい。不定の変換結果データとなることがあります。

TCY (ADCS + 1)

ADCS = – 12 TADTCY

2

注: TCY = FOSC/2 で、ダズ モードと PLL は無効とします。

TAD =

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-11

PIC24F ファミリ リファレンス マニュアル

A/D コンバータには、変換に使用できる専用の内蔵 RC クロック源があります。A/D RC クロック源は、デバイスがスリープ モードの間に A/D 変換を実行する場合に使用します。RC オシレータは ADRC ビット (ADCON3<7>) の設定により選択されます。ADRC ビットがセットされると、ADCS ビットは A/D 動作に無関係となります。

17.4.3 アナログ ポート ピンの構成

AD1PCFG レジスタは、アナログ入力として使用するデバイス ピンの入力条件を指定します。そのアナログ チャネルに対応する PCFGn ビット (AD1PCFG<n>) がクリアされると、対応するピンがアナログ入力として構成されます。AD1PCFG レジスタはリセット時にはクリアされるため、デフォルトでは A/D 入力ピンはアナログ入力として構成されます。アナログ入力に構成された場合、対応するポートの I/O デジタル入力バッファが無効になるため、電流を消費しません。

AD1PCFG レジスタと対応する TRIS レジスタの両方が、A/D ポート ピンの動作を制御します。アナログ入力とするポート ピンは、対応する TRIS ビットをセットして入力とする必要があります。デバイス リセット後、すべての TRIS ビットはセットされます。

A/D 入力に関連する I/O ピンをデジタル出力として構成 (TRIS ビットをクリアして ) して、さらにこのピンをアナログ モード (AD1PCFG<n> = 0) とすると、このポートのデジタル出力レベル (VOH または VOL) が変換されます。

PCFGn ビットがセットされた場合、対応するピンはデジタル I/O として構成されます。この構成の場合、アナログ マルチプレクサへの入力は AVSS に接続されます。

17.4.4 CH0 入力選択

A/D コンバータには、2 つの独立した入力マルチプレクサが実装されていて、どちらのアナログ チャネルをサンプルするかユーザーが選択できます。それらはマルチプレクサ A(MUX A) とマルチプレクサ B(MUX B) として良く知られています。CH0SA3:CH0SA0 とCH0NA で指定される入力はまとめて MUX A 入力と呼ばれます。CH0SB3:CH0SB0 とCH0NB で指定される入力はまとめて MUX B 入力と呼ばれます。

MUX A と MUX B の機能は互いに良く似ています。両マルチプレクサとも、個々のサンプル用として任意のアナログ入力チャネルを選択でき、また、差動サンプリングの負側のリファレンス源としていくつかの選択肢から選択できます。さらに、MUX A はシーケンシャルなアナログ チャネルのスキャンを構成できますし、MUX B はより幅広いリファレンス源から選択できます。これらについては、 17.4.4.1 項 「MUX A と MUX B 入力の構成」と 17.4.4.3 項 「複数入力のスキャニング」で詳細を説明します。

17.4.4.1 MUX A と MUX B 入力の構成

ユーザーは CH0 の正側の入力には、16 アナログ入力の任意のひとつを選択して接続できます。MUX A は、通常 CH0SA3:CH0SA0 ビット (AD1CHS<3:0>) で正側入力のアナログチャネルを選択します。MUX B の正側チャネルは、CH0SB3:CH0SB0 ビット(AD1CHS<11:8>) で選択されます。

CH0 の負側 ( 反転 ) の入力には、ユーザーは 2 つの選択肢を持ち、CH0NA および CH0NBビット ( それぞれ AD1CHS<7,15>) で選択できます。いずれかをセットすると AN1 がマルチプレクサの負側入力として選択され、クリアするとそのときの VR- 源が選択されます。

注 1: PORT レジスタを読み出すと、アナログ入力として構成されているいずれのピンも「0」として読み出されます。

2: デジタル入力として定義されたピン (AN15:、AN0 ピンを含む ) へのアナログ レベルは、入力バッファにデバイス仕様以上の電流を消費させることがあります。

注 : PIC24F デバイスごとにアナログ入力の数は異なっています。利用可能なアナログ入力については、その特定デバイスのデータ シートを参照して下さい。

DS39705A_JP - ページ 17-12 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.4.4.2 MUX A と MUX B の交互入力選択

デフォルトでは、A/D コンバータは MUX A 側で選択された入力をサンプルし変換します。ALTS ビット (AD1CON2<0>) によりモジュールが連続するサンプルの間 MUX A と MUXB で選択される 2 つの入力の交互入力を有効化します。

ALTS ビットが「0」の場合、CH0SA と CH0NA ビットで指定されている入力だけがサンプルされます。ALTS ビットが「1」の場合、モジュールはまず MUX A 側の入力をサンプルし、続いて MUX B をサンプルし、これを交互に繰り返します。

チャネル 0 の 初のサンプル / 変換で ALTS ビットが「1」の場合、CH0SA<3:0> と CH0NAで選択された入力がサンプルされます。次のサンプル / 変換シーケンスでは、 CH0SB<3:0>と CH0NB で選択された入力が選択されサンプリングされます。 このパターンが続くサンプル変換シーケンスでも繰り返されます。

17.4.4.3 複数入力のスキャニング

MUX A がアナログ入力として選択されると、A/D モジュールは複数 アナログ入力チャネルのスキャンの能力を持ちます。CSCNA ビット (AD1CON2<10>) が CH0 チャネル入力の選択した複数のアナログ入力スキャンを有効化します。CSCNA がセットされると CH0SAビットは無視され、 AD1CSSL レジスタで指定されたチャネルがシーケンシャルにサンプルされます。

AD1CSSL レジスタの各ビットは、アナログ チャネルの 1 つに対応します。AD1CSSL レジスタのビットがセットされると、対応するアナログ入力チャネルがスキャン シーケンスに含まれます。入力は常に下位入力から上位入力に向かってスキャンされ、各割り込みが発生した後は、 初の選択チャネルから再開します。

AD1CSSL は、チャネルの正側の入力だけを指定します。CH0NA ビットは、スキャンの間もチャネルの負側の入力を選択します。

スキャンは MUX A 入力選択にのみに有効です。CH0SB<3:0> ビットの指定により MUX Bの入力を選択した場合には、代替チャネル入力が選択されます。MUX A と MUX B の交互サンプリングが選択された場合 (ALTS = 1) には、入力は、AD1CSSL レジスタで指定されるスキャン入力と、CH0SB ビットで指定される固定入力を交互に切り替えます。

17.4.5 モジュールの有効化

ADON ビット (ADCON1<15>) がセットされた時、モジュールはフルパワーで動作します。ADON が「0」の場合、モジュールは無効化されます。回路のデジタルおよびアナログ部とも省電力 大化のためにオフにされます。

ADON ビットをセットしてモジュールを有効化する場合には、ユーザーはアナログ段が安定するまで待って下さい。安定化時間については、 17.16 項 「電気的仕様」を参照して下さい。

注 : スキャン対象の入力に選択した数が、各割り込み毎に採取されるサンプル数よりも大きい場合、高位の番号の入力はサンプリングされません。

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-13

PIC24F ファミリ リファレンス マニュアル

17.5 初期化

例 17-1 に A/D モジュールの簡単な初期化コード例を示します。この典型的な構成では、16の全アナログ入力をアナログ入力として設定しています。アイドル モード中の動作は無効とし、出力データは符号なし固定小数形式で、AVDD と AVSS を VR+ と VR- として使います。サンプルの開始と変換の開始 ( 変換トリガ ) はいずれもソフトウェアによる手動とします。入力スキャンは無効で、毎回のサンプル / 変換の後に割り込み (1 変換結果 ) とし、1チャネル (AN0) のみ変換とします。A/D 変換クロックは TCY/2 です。

この例は、サンプル / 変換シーケンスを手動設定と SAMP ビット (AD1CON1<1>) をクリアする方法で行うひとつの方法を示しています。この方法は、他の方法も含めて 17.6 項

「サンプリング プロセスの制御」と 17.7 項 「変換プロセスの制御」でさらに説明します。

例 17-1: A/D 初期化コード例

AD1PCFG = 0; // Configure A/D port// all input pins are analog

AD1CON1 = 0x2208; // Configure sample clock source// and conversion trigger mode.// Unsigned Fraction format (FORM<1:0>=10),// Manual conversion trigger (SSRC<3:0>=000),// Manual start of sampling (ASAM=0),// No operation in Idle mode (ADSIDL=1).

AD1CON2 = 0; // Configure A/D voltage reference// and buffer fill modes.// Vr+ and Vr- from AVdd and AVss (VCFG<2:0>=000),// Inputs are not scanned,// Interrupt after every sample

AD1CON3 = 0; // Configure A/D conversion clock as Tcy/2AD1CHS = 0; // Configure input channels,

// CH0+ input is AN0,// CH0- input is Vr- (AVss).

AD1CSSL = 0; // No inputs are scanned.IFS0bits.AD1IF= 0; // Clear A/D conversion interrupt.

// Configure A/D interrupt priority bits (AD1IP<2:0>) here, if// required. Default priority level is 4.

IEC0bits.AD1IE= 1; // Enable A/D conversion interruptAD1CON1bits.ADON= 1;// Turn on A/DAD1CON1bits.SAMP= 1;// Start sampling the inputDelay(); // Ensure the correct sampling time has elapsed

// before starting conversion.AD1CON1bits.SAMP= 0;// End A/D sampling and start conversion

// Example code for A/D ISR:void __attribute__ ((__interrupt__)) _ADC1Interrupt(void){IFS0bits.AD1IF= 0;}

DS39705A_JP - ページ 17-14 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.6 サンプリング プロセスの制御

17.6.1 手動サンプリング

ASAM ビット (AD1CON1<2>) がクリアされているとき、SAMP ビット (ADCON1<1>) をセットすると、A/D のサンプリングが開始されます。複数のオプションのいずかを使用すると、サンプリングを終了して変換を完了できます。SAMP ビットが再度設定されるまで、サンプリングは再開しません。例として、図 17-3 を参照してください。

17.6.2 自動サンプリング

ASAM ビットをセットすると、変換完了後に自動的にサンプリングが開始されます。サンプリングを終了し、変換を実行する場合は、複数のオプションのいずかを使用します。チャネルの変換の終了後に、そのチャネルでサンプリングが再開されます。例として、図 17-4を参照してください。

17.6.3 サンプリング状態のモニタ

SAMP ビットは A/D のサンプリング状態を表しています。通常、SAMP ビットがクリアならサンプリングは終了状態を 示しており、DONE ビットが自動的にクリアされて変換の開始を表します。DONE が「1」で SAMP ビットが「0」のときは、A/D は停止状態です。

17.6.4 サンプリングの停止

手動サンプリング モードのときは、SAMP ビットをクリアするとサンプリングを終了します。SSRC2:SSRC0 = 000なら、変換を自動的に開始します。

自動サンプリング モード中に ASAM ビットをクリアしても、進行中のサンプリング / 変換シーケンスは終了できません。しかし、その変換終了後の自動サンプリング開始は行われません。

17.7 変換プロセスの制御

変換トリガ要因によりサンプリングが終了し、選択した変換シーケンスが開始されます。SSRC2:SSRC0 ビット (AD1CON1<7:5>) により変換要因を選択します。

17.7.1 手動制御

SSRC2:SSRC0 = 000 の時、変換トリガはソフトウェア制御となります。SAMP ビット(ADCON1<1>) をクリアすると変換シーケンスが開始されます。

図 17-3 の例では、SAMP ビットのセットによりサンプリングが開始され、SAMP ビットのクリアにより、サンプリングが終了して変換が開始されます。ユーザー ソフトウェアで、入力信号の十分なサンプリング時間を確保するようSAMPビットのセットとクリアの時間を調整する必要があります。

図 17-4 の例は、ASAM ビットをセットで自動サンプリングが開始され、SAMP ビットをクリアしてサンプリングを終了させ、変換を開始する例です。変換完了後、モジュールは自動的にサンプリング状態に戻ります。サンプル間隔の始めに SAMP ビットが自動的にセットされます。ユーザー ソフトウェアで、入力信号の十分なサンプリング時間を確保するように、SAMP ビットをクリアする間の時間にサンプリング時間の他に変換時間も含まれることを考慮して調整する必要があります。

注 1: 利用可能な変換トリガ要因は PIC24F デバイスの種類により異なります。利用可能な変換トリガ要因に関しては特定デバイスのデータ シートを参照してください。

2: A/D モジュールが有効に設定されている場合、SSRC 選択ビットは変更できません。変換トリガ要因を変更する場合、まず ADON ビット (ADCON1<15>) をクリアして A/D モジュールを無効にして下さい。

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-15

PIC24F ファミリ リファレンス マニュアル

図 17-3: 1 つのチャネルの変換、手動サンプル開始、手動変換開始の場合

例 17-2: 1 つのチャネルの変換で手動サンプル開始、手動変換開始の場合のコード例

図 17-4: 1つのチャネルの変換で自動サンプル開始、 手動変換開始の場合

A/D CLK

SAMP

ADC1BUF0

TSAMP TCONV

BCF AD1CON1, SAMPBSF AD1CON1, SAMP命令実行

DONE

int ADCValue;

AD1PCFG = 0xFFFB; // AN2 as analog, all other pins are digitalAD1CON1 = 0x0000; // SAMP bit = 0 ends sampling

// and starts convertingAD1CHS = 0x0002; // Connect AN2 as CH0 input

// in this example AN2 is the inputAD1CSSL = 0;AD1CON3 = 0x0002; // Manual Sample, Tad = 2 TcyAD1CON2 = 0;AD1CON1bits.ADON= 1; // turn ADC ON

while (1) // repeat continuously{AD1CON1bits.SAMP= 1; // start sampling...Delay(); // Ensure the correct sampling time has elapsed

// before starting conversion.AD1CON1bits.SAMP= 0; // start Convertingwhile (!AD1CON1bits.DONE); // conversion done?ADCValue= ADC1BUF0; // yes then get ADC value}

A/D CLK

SAMP

ADC1BUF0

TSAMP TCONV

BCF AD1CON1, SAMP

TCONV

BSF AD1CON1, ASAM BCF AD1CON1, SAMP

TSAMPTAD0 TAD0

命令実行

DS39705A_JP - ページ 17-16 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.7.2 クロックによる変換トリガ

SSRC2:SSRC0 = 111の時、変換トリガは A/D クロック制御下に置かれます。SAMC ビット (ADCON3<12:8>) により、サンプリング開始から変換開始までのクロック サイクル TAD

の数が選択されます。サンプリング開始後、モジュールは SAMC ビットで指定された数の TAD クロックをカウントします。サンプリングに必要な時間を確保するため、SAMCビットには常に少なくとも 1 クロックサイクル以上をプログラムして下さい。

式 17-2: クロックによる変換トリガ時間

図 17-5 はユーザー ソフトウェアでクロックによる変換トリガをサンプリングを開始したあとどのように使うかを示しています。

図 17-5: 1 つのチャネルの変換で、手動サンプリング開始、 TAD ベースの変換開始の場合

例 17-3: 1 つのチャネルの変換で、手動サンプリング開始、TAD ベースの変換開始の場合のコード例

TSMP = SAMC<4:0> * TAD

A/D CLK

SAMP

ADC1BUF0

TSAMP TCONV

BSF AD1CON1, SAMP命令実行

DONE

int ADCValue;

AD1PCFG = 0xEFFF; // all PORTB = Digital; RB12 = analogAD1CON1 = 0x00E0; // SSRC<3:0> = 111 implies internal

// counter ends sampling and starts// converting.

AD1CHS = 0x000C; // Connect AN12 as CH0 input.// in this example AN12 is the input

AD1CSSL = 0;AD1CON3 = 0x1F02; // Sample time = 31Tad,

// Tad = 2 TcyAD1CON2 = 0;AD1CON1bits.ADON= 1; // turn ADC ONwhile (1) // repeat continuously{AD1CON1bits.SAMP= 1; // start sampling then...

// after 31Tad go to conversionwhile (!AD1CON1bits.DONE); // conversion done?ADCValue= ADC1BUF0; // yes then get ADC value} // repeat

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-17

PIC24F ファミリ リファレンス マニュアル

17.7.2.1 フリーランのサンプリング、変換シーケンス

自動変換トリガ モード (SSRC2:SSRC0 = 111) を自動サンプリング モード (ASAM = 1) と一緒に使うと、A/D モジュールをユーザーやデバイスのリソースの介在なく、スケジュールされたサンプル / 変換シーケンスにできます。「クロックによる」モードを図 17-6 に示しますが、モジュール初期化後は連続的にデータの収集を実行します。

図 17-6: 1 つのチャネルの変換で、 自動サンプル開始、TAD ベースの変換開始の場合

例 17-4: 1 つのチャネルの変換で、自動サンプリング開始、TAD ベースの変換開始のコード例

17.7.2.2 クロックによる変換トリガと自動サンプリングを使用した場合のサンプル時間の考慮

ユーザーはサンプリング時間が 17.10 項 「A/D サンプリング要件」で述べたサンプリング要件を上回っていることを確認して下さい。モジュールが自動サンプリングで、かつクロックによる変換トリガに設定されている場合は、サンプリング間隔は SAMC ビットで指定されます。

A/D CLK

SAMP

ADC1BUF1

TSAMP TCONV

DONE

TSAMP TCONV

ADC1BUF0

BSF AD1CON1, ASAM命令実行

ソフトウェアでリセット

int ADCValue, count;int *ADC16Ptr;

AD1PCFG = 0xFFFB; // AN2 as analog,// all other pins are digital

AD1CON1 = 0x00E0; // SSRC bit = 111 implies internal// counter ends sampling// and starts converting.

AD1CHS = 0x0002; // Connect RB2/AN2 as CH0 input..// in this example RB2/AN2 is// the input

AD1CSSL = 0;AD1CON3 = 0x0F00; // Sample time = 15Tad,

// Tad = Tcy/2AD1CON2 = 0x0004; // Set AD1IF after every 2 samplesAD1CON1bits.ADON= 1; // turn ADC ONwhile (1) // repeat continuously{ADCValue= 0; // clear variableADC16Ptr= &ADC1BUF0; // initialize ADC1BUF pointerIFS0bits.AD1IF= 0; // clear ADC interrupt flagAD1CON1bits.ASAM= 1; // auto start sampling

// for 31Tad then go to conversionwhile (!IFS0bits.AD1IF); // conversion done?AD1CON1bits.ASAM= 0; // yes then stop sample/convertfor (count = 0; count < 2; count++)// average the 2 ADC valueADCValue= ADCValue + *ADC16Ptr++;ADCValue= ADCValue >> 1;} // repeat}

DS39705A_JP - ページ 17-18 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.7.3 イベント トリガによる変換開始

サンプリングの終了と変換開始を、他のタイム イベントと同期させるのが望ましい場合があります。A/D モジュールは、変換トリガ イベントとして、3 つの要因のいずれかを使用できます

17.7.3.1 外部 INT0 ピン トリガ

SSRC2:SSRC0 = 001 の時、A/D 変換は INT0 ピンのアクティブな遷移でトリガされます。ピンは、入力の立ち上がりエッジまたは立下りエッジのいずれかでプログラムされます。

17.7.3.2 汎用タイマ比較トリガ

A/D は SSRC<2:0> = 010設定によりこのトリガ モードに構成されます。32 ビットタイマTMR3/TMR2 と 32 ビットの結合周期レジスタ PR3/PR2 との間で比較一致が発生すると、特別な ADC トリガ イベント信号がタイマ 3 により生成されます。TMR5/TMR4 タイマ ペアにはこの機能はありません。詳しくは第 14 章 「タイマ」 を参照してください。

17.7.3.3 内部、外部イベントと A/D 変換動作の同期化

外部イベント トリガ パルスによりサンプリングを終了し変換を開始するモード(SSRC2:SSRC0 = 001、 010、011) を、自動サンプリング (ASAM = 1) と併用することで、A/D のサンプル変換イベントをトリガ パルス要因に同期させられます。例えば、図 17-8 では、SSRC2:SSRC0 = 010 かつ ASAM = 1ですので、A/D は常にサンプリングを終了させて、タイマ比較トリガ イベントに同期して変換を開始します。A/D のサンプル変換レートは、タイマ比較イベント レートに依存することになります。

図 17-7: 手動サンプル開始、 トリガ ベースの変換開始の場合

図 17-8: 自動サンプル開始、変換トリガ ベースの変換開始の場合

変換トリガ

A/D CLK

SAMP

ADC1BUF0

TSAMP TCONV

BSF AD1CON1, SAMP命令実行

変換トリガ

A/D CLK

SAMP

ADC1BUF0

TSAMP TCONV

BSF AD1CON1, ASAM

TCONVTSAMP

ADC1BUF1

DONEソフトウェアでリセット

命令実行

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-19

PIC24F ファミリ リファレンス マニュアル

例 17-5: 1 チャネルの変換で、 自動サンプリング開始、変換トリガ ベースの変換開始の場合のコード例

17.7.3.4 自動サンプリング / 変換シーケンスの場合のサンプル時間の考慮

サンプル / 変換シーケンスが異なると、S/H チャネルがアナログ信号を獲得するために利用できるサンプル時間が異なります。サンプリング時間が 17.10 項 「A/D サンプリング要件」で概説しているサンプリング要件を上回るようにして下さい。

モジュールが自動サンプリング用に設定され、外部トリガ パルスが変換トリガとして使用されている場合、サンプリング間隔はトリガ パルス インターバルの一部となります。サンプル時間はトリガ パルス周期となりますから、変換を完了するのに要する時間はこれより短くなります。

式 17-3: シーケンシャル サンプリングの場合の有効サンプリング時間の計算

17.7.4 サンプリング / 変換状態のモニタ

DONE ビット (AD1CON1<0>) は、A/D のサンプリング状態を表します。一般的に、サンプリングが終了したことを表す SAMP ビットがクリアされると、DONE ビットが自動的にクリアされて変換開始を示します。SAMP が 「0」で DONE が「1」の場合、A/D は非アクティブ状態です。

一部の動作モードでは、SAMP ビットでサンプリングの開始および終了を行うこともできます。これらのモードでは、DONE ビットを進行中の変換終了には使用できません。

17.7.5 A/D 割り込みの発生

SMPI3:SMPI0 ビット (AD1CON2<5:2>) で AD1IF 割り込みフラグの発生の制御をします。A/D 割り込みフラグは、サンプリング開始後 SMPI ビットで指定されたサンプル / 変換シーケンス回数後にセットされ、以降同じサンプル回数ごとに繰り返されます。SMPI ビットで指定される値は、バッファの中のデータ サンプル数に対応し、 大 16 です。割り込みを有効にするには、A/D 割り込み有効化ビット AD1IE をセットする必要があります。

TSMP = トリガ パルス間隔 (TSEQ) – 変換時間 (TCONV) = TSEQ – TCONV

int ADCValue;

AD1PCFG = 0xFFFB; // AN2 analog, all other pins digitalAD1CON1 = 0x0040; // SSRC bit = 010 implies GP TMR3

// compare ends sampling and starts// converting.

AD1CHS = 0x0002; // Connect AN2 as CH0 input...// in this example AN2 is the input

AD1CSSL = 0;AD1CON3 = 0x0000; // Sample time is TMR3, Tad = Tcy/2AD1CON2 = 0x0004; // Set AD1IF after 2 conversions

// set TMR3 to time out every 125 msTMR3 = 0x0000;PR3 = 0x3FFF;T3CON = 0x8010;AD1CON1bits.ADON= 1; // turn ADC ONAD1CON1bits.ASAM= 1; // start auto sampling every 125 mswhile (1) // repeat continuously{while (!IFS0bits.AD1IF);// conversion done?ADCValue= ADC1BUF0; // yes then get first ADC valueIFS0bits.AD1IF= 0; // clear AD1IF}

DS39705A_JP - ページ 17-20 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.7.6 変換の中断

変換中に ADON ビットをクリアすることにより現在の変換が中断されます。A/D 結果バッファは、部分的な A/D 変換サンプル完了では更新されません。つまり、対応しているADC1BUF バッファ位置には、 後に完了した変換の値 ( またはバッファに 後に書き込まれた値 ) が引き続き格納されています。

17.8 A/D 結果バッファ

変換が完了すると、モジュールにより A/D 結果バッファに変換の結果が書き込まれます。このバッファは、16 ワードの RAM アレイで、SFR 空間経由でアクセスされます。

ユーザー ソフトウェアは、A/D 変換結果が生成されるたびに、これを読み込むこともできますが、この方法では CPU 時間が大量に消費されます。一般的に、コードを簡単にするために、モジュールがバッファに結果を格納し、バッファが一杯になったときに割り込みを生成するようにします。

17.8.1 割り込みごとの変換回数

SMPI3:SMPI0 で CPU の割り込みが起こる前に実行する A/D 変換の回数を選択します。割り込みあたり 1 サンプルから 16 サンプルまで指定できます。各割り込みの後に、A/D 変換モジュールは常にバッファの先頭から変換結果の書き込みを開始します。例えば、SMPI3:SMPI0 = 0000 ならば、変換結果は常に ADC1BUF0 に書き込まれます。この例では、他のバッファ位置は使用されません。

17.8.2 バッファ フィル モード

BUFM ビット (AD1CON2<1>) が「1」の時、16 ワードの結果バッファは 2 つの 8 ワードのグループ、下位グループ (ADC1BUF0 ~ ADC1BUF7) と上位グループ (ADC1BUF8 ~ADC1BUFF) に分けられます。各割り込みイベントの後に、8 ワード バッファは交互に変換結果を受け取ります。BUFM のセット後に使用される 初の 8 ワード バッファは下位グループです。BUFM が「0」の時、すべての変換シーケンスで 16 ワードの完全なバッファが使用されます。

分割バッファ機能を使用するかどうかの決定は、 割り込み後にバッファ内容を移動するのに利用できる時間により異なり、アプリケーションにより決定されます。1 つのチャネルをサンプルし変換するのにかかる時間内に、プロセッサが素早くすべてのバッファをアンロードできる場合、BUFM ビットは「0」にでき、割り込みごとに 大 16 変換が実行できます。アプリケーションは、 初のバッファ位置が上書きされる前に 1 回分のサンプリング / 変換時間だけが与えられます。

1 回のサンプルと変換の時間内にプロセッサがバッファをアンロードできない場合、BUFM ビットを「1」にします。例えば、SMPI3:SMPI0 = 0111 ならば、8 つの変換がバッファの下位半分にロードされ、その後割り込みが発生します。次の 8 つの変換はバッファの残りの上位半分にロードされます。したがって、プロセッサは割り込み間の全ての時間を使って、バッファから 8 つの変換を取り出すことができます。

17.8.3 バッファ フィル ステータス

変換結果バッファが BUFM 制御ビットを使って分割される場合、BUFS ステータ スビット (ADCON2<7>) により、どちらの半分が A/D コンバータにより書き込み中であるかが示されます。BUFS = 0 ならば、A/D コンバータは下位グループに格納中であり、ユーザーソフトウェアは上位グループから変換値を読み出します。BUFS = 1 ならば、状況は逆になり、ユーザー ソフトウェアは下位グループから変換値を読み出します。

注 : BUFM ビット (AD1CON2<1>) がセットされた場合、ユーザーは割り込みごとに 8 変換以上の値を SMPI ビットにプログラムしないようにして下さい。

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-21

PIC24F ファミリ リファレンス マニュアル

17.8.4 バッファのデータ フォーマット

各 A/D 変換結果は 10 ビット幅です。データ フォーマットの互換性を保つため、各変換結果は自動的に 4 種の選択可能な 16 ビット フォーマットの内のひとつに変換されます。FORM1:FORM0 ビット (AD1CON1<9:8>) でフォーマットを選択します。 図 17-9 に選択可能なデータ出力フォーマットを示します。

図 17-9: A/D 出力データ フォーマット

表 17-1: 各種結果コードの数値表現 : 整数フォーマットの場合

RAM 内容 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00

バス読み出し

整数 0 0 0 0 0 0 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00

符号付整数 d09 d09 d09 d09 d09 d09 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00

固定小数 (1.15) d09 d08 d07 d06 d05 d04 d03 d02 d01 d00 0 0 0 0 0 0

符号付固定小数 (1.15) d09 d08 d07 d06 d05 d04 d03 d02 d01 d00 0 0 0 0 0 0

VIN/VREF 10 ビット

出力コード

16 ビット整数フォーマット /10 進数表記

16 ビット符号付整数フォーマット /10 進数表記

1023/1024 11 1111 1111 0000 0011 1111 1111 1023 0000 0001 1111 1111 511

1022/1024 11 1111 1110 0000 0011 1111 1110 1022 0000 0001 1111 1110 510

²²²

513/1024 10 0000 0001 0000 0010 0000 0001 513 0000 0000 0000 0001 1

512/1024 10 0000 0000 0000 0010 0000 0000 512 0000 0000 0000 0000 0

511/1024 01 1111 1111 0000 0001 1111 1111 511 1111 1111 1111 1111 -1

²²²

1/1024 00 0000 0001 0000 0000 0000 0001 1 1111 1110 0000 0001 -511

0/1024 00 0000 0000 0000 0000 0000 0000 0 1111 1110 0000 0000 -512

DS39705A_JP - ページ 17-22 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

表 17-2: 各種結果コードの数値表現 : 固定小数フォーマットの場合

17.9 変換 シーケンス例

以下の構成例には、サンプリングおよびバッファ構成の異なる A/D 動作が示されています。各例では、 ASAM ビットの設定により自動サンプリングが開始されます。変換トリガによりサンプリングが終了し、変換が開始されます。

17.9.1 単一チャネルの複数回のサンプリングと変換

図 17-10 と例 17-6 では A/D の基本構成を説明しています。この場合、1 つの A/D 入力である AN0 がサンプリングされ変換されます。結果は ADC1BUF バッファに格納されます。このプロセスは、バッファが一杯になってモジュールが割り込みを生成するまで 16 回繰り返されます。そして全プロセスが繰り返されます。

ALTS をクリアすることで、MUX A 入力のみがアクティブになります。CH0SA ビットとCH0NA ビット (AN0-VR-) が、サンプル / ホールド チャネルへの入力を指定します。他の入力選択ビットはすべて使用されません。

図 17-10: 割り込み当たり単一チャネルで 16 回の 変換の場合

VIN/VREF 10 ビット

出力コード

16 ビット固定小数フォーマット /10 進数表記

16 ビット符号付固定小数フォーマット /10 進数表記

1023/1024 11 1111 1111 1111 1111 1100 0000 0.999 0111 1111 1100 0000 0.499

1022/1024 11 1111 1110 1111 1111 1000 0000 0.998 0111 1111 1000 0000 0.498

•••

513/1024 10 0000 0001 1000 0000 0100 0000 0.501 0000 0000 0100 0000 0.001

512/1024 10 0000 0000 1000 0000 0000 0000 0.500 0000 0000 0000 0000 0.000

511/1024 01 1111 1111 0111 1111 1100 0000 0.499 1111 1111 1100 0000 -0.001

•••

1/1024 00 0000 0001 0000 0000 0100 0000 0.001 1000 0000 0100 0000 -0.499

0/1024 00 0000 0000 0000 0000 0000 0000 0.000 1000 0000 0000 0000 -0.500

変換

A/D CLK

SAMP

ADC1BUF0

TSAMP

TCONV

BSF AD1CON1, ASAM

ADC1BUF1

DONE

ADC1BUFE

ADC1BUFF

CH0 への入力 AN0

TSAMP

TCONV

AN0

TSAMP

TCONV

AN0

TSAMP

TCONV

AN0

AD1IF

ASAM

トリガ

命令実行

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-23

PIC24F ファミリ リファレンス マニュアル

例 17-6: 単一チャネルの 複数回のサンプルと変換の場合int ADCValue, count;int *ADC16Ptr;

AD1PCFG = 0xFFFB; // Only AN2 as analog inputAD1CON1 = 0x00E0; // Internal counter triggers conversionAD1CHS = 0x0002; // Connect AN2 as CH0 positive inputAD1CSSL = 0;AD1CON3 = 0x0F00; // Sample time = 15Tad, Tad = Tcy/2AD1CON2 = 0x003C; // Set AD1IF after every 16 samplesAD1CON1bits.ADON= 1; // turn ADC ONwhile (1) // repeat continuously{ADCValue= 0; // clear valueADC16Ptr= &ADC1BUF0; // initialize ADC1BUF pointerIFS0bits.AD1IF= 0; // clear ADC interrupt flagAD1CON1bits.ASAM= 1; // auto start sampling for 31Tad

// then go to conversionwhile (!IFS0bits.AD1IF); // conversion done?AD1CON1bits.ASAM= 0; // yes then stop sample/convertfor (count = 0; count < 16; count++)// average the 16 ADC valueADCValue= ADCValue + *ADC16Ptr++;ADCValue= ADCValue >> 4;} // repeat

DS39705A_JP - ページ 17-24 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

例 17-7: 割り込み当たり単一チャネルで 16 回の変換の場合

A/D の構成

• AN0 を CH0+ 入力として選択 (CH0SA3:CH0SA0 = 0000)• VR- を CH0- 入力として選択 (CH0NA = 0) • 入力スキャンなしに構成 (CSCNA = 0)• MUX A のみサンプリングに使用する (ALTS = 0)• AD1IF を 16 回目のサンプリングごととセットする (SMPI3:SMPI0 = 1111)• バッファを 16 ワード結果の単一構成とする (BUFM = 0)

動作シーケンス

1. MUX A の入力 AN0 をサンプル ; 変換しバッファ 0h に書き込む

2. MUX A の入力 AN0 をサンプル ; 変換しバッファ 1h に書き込む

3. MUX A の入力 AN0 をサンプル ; 変換しバッファ 2h に書き込む

4. MUX A の入力 AN0 をサンプル ; 変換しバッファ 3h に書き込む

5. MUX A の入力 AN0 をサンプル ; 変換しバッファ 4h に書き込む

6. MUX A の入力 AN0 をサンプル ; 変換しバッファ 5h に書き込む

7. MUX A の入力 AN0 をサンプル ; 変換しバッファ 6h に書き込む

8. MUX A の入力 AN0 をサンプル ; 変換しバッファ 7h に書き込む

9. MUX A の入力 AN0 をサンプル ; 変換しバッファ 8h に書き込む

10. MUX A の入力 AN0 をサンプル ; 変換しバッファ 9h に書き込む

11. MUX A の入力 AN0 をサンプル ; 変換しバッファ Ah に書き込む

12. MUX A の入力 AN0 をサンプル ; 変換しバッファ Bh に書き込む

13. MUX A の入力 AN0 をサンプル ; 変換しバッファ Ch に書き込む

14. MUX A の入力 AN0 をサンプル ; 変換しバッファ Dh に書き込む

15. MUX A の入力 AN0 をサンプル ; 変換しバッファ Eh に書き込む

16. MUX A の入力 AN0 をサンプル ; 変換しバッファ Fh に書き込む

17. AD1IF フラグをセット ( さらに有効なら割り込み発生 )18. 割り込みから戻って (1-16) を繰り返す

バッファに格納される結果 (2 サイクル後 ) バッファ

アドレス

バッファ内容

初の AD1IF イベント時

バッファ内容 2 回目の AD1IF イベント時

ADC1BUF0 AN0、 サンプル 1 AN0、 サンプル 17ADC1BUF1 AN0、 サンプル 2 AN0、 サンプル 18ADC1BUF2 AN0、 サンプル 3 AN0、 サンプル 19ADC1BUF3 AN0、 サンプル 4 AN0、 サンプル 20ADC1BUF4 AN0、 サンプル 5 AN0、 サンプル 21ADC1BUF5 AN0、 サンプル 6 AN0、 サンプル 22ADC1BUF6 AN0、 サンプル 7 AN0、 サンプル 23ADC1BUF7 AN0、 サンプル 8 AN0、 サンプル 24ADC1BUF8 AN0、 サンプル 9 AN0、 サンプル 25ADC1BUF9 AN0、 サンプル 10 AN0、 サンプル 26ADC1BUFA AN0、 サンプル 11 AN0、 サンプル 27ADC1BUFB AN0、 サンプル 12 AN0、 サンプル 28ADC1BUFC AN0、 サンプル 13 AN0、 サンプル 29ADC1BUFD AN0、 サンプル 14 AN0、 サンプル 30ADC1BUFE AN0、 サンプル 15 AN0、 サンプル 31ADC1BUFF AN0、サンプル 16 AN0、サンプル 32

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-25

PIC24F ファミリ リファレンス マニュアル

17.9.2 全アナログ入力をスキャンする A/D 変換の場合

図 17-11 と例 17-9 に、すべての利用可能なアナログ入力チャネルをサンプルし変換する典型的なセット アップ例を示しています。CSCNA ビットをセットすると、CH0 の 正入力への A/D 入力のスキャンを指定します。他の条件は 17.9.1 項 「単一チャネルの複数回のサンプリングと変換」と同じです。

初に、AN0 入力が CH0 によりサンプリングされ変換されます。結果は ADC1BUF バッファに格納されます。次に AN1 入力がサンプリングされ変換されます。この入力のスキャン プロセスは、バッファが一杯になってモジュールが割り込みを生成するまで 16 回繰り返されます。次に全プロセスが繰り返されます。

図 17-11: 1 回の割り込みごとに 16 入力全てをスキャンする場合

例 17-8: 全チャネルのサンプリングと変換

変換

A/D CLK

SAMP

ADC1BUF0

TSAMP

TCONV

BSET AD1CON1, #ASAM

ADC1BUF1

DONE

ADC1BUFE

ADC1BUFF

CH0 への入力 AN0

TSAMP

TCONV

AN1

TSAMP

TCONV

AN14

TSAMP

TCONV

AN15

AD1IF

ASAM

トリガ

命令実行

int ADCValue, count;int *ADC16Ptr;

AD1PCFG = 0x0000; // Configure all pins as analog inputsAD1CSSL = 0xFFFF; // Include all channels in scanAD1CON1 = 0x00E0; // Internal counter triggers conversionAD1CON3 = 0x0F00; // Sample time = 15Tad, Tad = Tcy/2AD1CON2 = 0x023C; // Set AD1IF after every 16 samples,

// enable scanningAD1CON1bits.ADON= 1; // turn ADC ONwhile (1) // repeat continuously{ADCValue= 0; // clear valueADC16Ptr= &ADC1BUF0; // initialize ADC1BUF pointerIFS0bits.AD1IF= 0; // clear ADC interrupt flagAD1CON1bits.ASAM= 1; // auto start sampling for 31Tad

// then go to conversionwhile (!IFS0bits.AD1IF); // conversion done?AD1CON1bits.ASAM= 0; // yes then stop sample/convertfor (count = 0; count < 16; count++) // average the 16 ADC valueADCValue= ADCValue + *ADC16Ptr++;ADCValue= ADCValue >> 4;} // repeat

DS39705A_JP - ページ 17-26 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

例 17-9: 1 回の割り込みごとに 16 チャネルすべてをスキャンし変換する例

A/D の構成

• CH0+ 入力へのチャネルを選択する (CH0SA3:CH0SA0 = xxxx)• VR- を CH0- 入力として選択する (CH0NA = 0) • MUX A のみサンプリングに使用する (ALTS = 0)• MUX A を入力スキャンと構成する (CSCNA = 1)• 全アナログチャネルをスキャン対象とする (AD1CSSL = 1111 1111 1111 1111)• AD1IF を 16 回目のサンプリングごととしてセットする (SMPI3:SMPI0 = 1111)• バッファを 16 ワード結果の単一構成とする (BUFM = 0)

動作シーケンス

1. MUX A の入力 AN0 をサンプル ; 変換しバッファ 0h に書き込む

2. MUX A の入力 AN1 をサンプル ; 変換しバッファ 1h に書き込む

3. MUX A の入力 AN2 をサンプル ; 変換しバッファ 2h に書き込む

4. MUX A の入力 AN3 をサンプル ; 変換しバッファ 3h に書き込む

5. MUX A の入力 AN4 をサンプル ; 変換しバッファ 4h に書き込む

6. MUX A の入力 AN5 をサンプル ; 変換しバッファ 5h に書き込む

7. MUX A の入力 AN6 をサンプル ; 変換しバッファ 6h に書き込む

8. MUX A の入力 AN7 をサンプル ; 変換しバッファ 7h に書き込む

9. MUX A の入力 AN8 をサンプル ; 変換しバッファ 8h に書き込む

10. MUX A の入力 AN9 をサンプル ; 変換しバッファ 9h に書き込む

11. MUX A の入力 AN10 をサンプル ; 変換しバッファ Ah に書き込む

12. MUX A の入力 AN11 をサンプル ; 変換しバッファ Bh に書き込む

13. MUX A の入力 AN12 をサンプル ; 変換しバッファ Ch に書き込む

14. MUX A の入力 AN13 をサンプル ; 変換しバッファ Dh に書き込む

15. MUX A の入力 AN14 をサンプル ; 変換しバッファ Eh に書き込む

16. MUX A の入力 AN15 をサンプル ; 変換しバッファ Fh に書き込む

17. AD1IF フラグをセット ( 有効であれば割り込み発生 )18. 割り込みから戻って (1-16) を繰り返す

バッファに格納される結果 (2 サイクル後 ) バッファ

アドレス

バッファ内容 初の AD1IF イベント時

バッファ内容

2 回目の AD1IF イベント時

ADC1BUF0 サンプル 1 (AN0、 サンプル 1) サンプル 17 (AN0、 サンプル 2)ADC1BUF1 サンプル 2 (AN1、 サンプル 1) サンプル 18 (AN1、 サンプル 2)ADC1BUF2 サンプル 3 (AN2、 サンプル 1) サンプル 19 (AN2、 サンプル 2)ADC1BUF3 サンプル 4 (AN3、 サンプル 1) サンプル 20 (AN3、 サンプル 2)ADC1BUF4 サンプル 5 (AN4、 サンプル 1) サンプル 21 (AN4、 サンプル 2)ADC1BUF5 サンプル 6 (AN5、 サンプル 1) サンプル 22 (AN5、 サンプル 2)ADC1BUF6 サンプル 7 (AN6、 サンプル 1) サンプル 23 (AN6、 サンプル 2)ADC1BUF7 サンプル 8 (AN7、 サンプル 1) サンプル 24 (AN7、 サンプル 2)ADC1BUF8 サンプル 9 (AN8、 サンプル 1) サンプル 25 (AN8、 サンプル 2)ADC1BUF9 サンプル 10 (AN9、 サンプル 1) サンプル 26 (AN9、 サンプル 2)ADC1BUFA サンプル 11 (AN10、 サンプル 1) サンプル 27 (AN10、 サンプル 2)ADC1BUFB サンプル 12 (AN11、 サンプル 1) サンプル 28 (AN11、 サンプル 2)ADC1BUFC サンプル 13 (AN12、 サンプル 1) サンプル 29 (AN12、 サンプル 2)ADC1BUFD サンプル 14 (AN13、 サンプル 1) サンプル 30 (AN13、 サンプル 2)ADC1BUFE サンプル 15 (AN14、 サンプル 1) サンプル 31 (AN14、 サンプル 2)ADC1BUFF サンプル 16 (AN15、 サンプル 1) サンプル 32 (AN15、 サンプル 2)

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-27

PIC24F ファミリ リファレンス マニュアル

17.9.3 ダブル 8 ワード バッファの使い方

図 17-12 および例 17-10 は 2 つの 8 ワード バッファを使った交互バッファに格納する例です。BUFM ビットをセットすると 2 つの 8 ワード バッファが有効化されます。この例ではサンプル後ごとに割り込みを発生します。BUFM の設定は他の動作パラメータには影響を与えません。まず、変換シーケンスはバッファ ADC1BUF0 への格納から開始します。初の割り込み発生後、バッファは ADCBUF8 から書き込みを開始します。BUFS ステー

タス ビットは割り込み毎に交互にセットとクリアが繰り返されます。

図 17-12: 2 つの 8 ワード バッファを使って割り込みごとに 1 回、1 チャネルを変換する場合

A/D CLK

SAMP

ADC1BUF0

BSET AD1CON1, #ASAM 命令実行

CH0 への入力 AN3

TSAMP

AD1IF

ADC1BUF8

AN3

TSAMP

AN3

TSAMP

BUFS

変換トリガ

TCONVTCONVTCONV TCONVTCONVTCONVTCONV TCONVTCONVTCONV

BCLR IFS0, #AD1IF BCLR IFS0, #AD1IF

TCONVTCONV

DS39705A_JP - ページ 17-28 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

例 17-10: ダブル バッファ モードで割り込みごとに 1 チャネルを変換する例

A/D の構成

• AN3 を CH0+ 入力として選択する (CH0SA3:CH0SA0 = 0011)• VR- を CH0- 入力として選択する (CH0NA = 0) • 入力スキャンなしと設定 (CSCNA = 0)• MUX A のみをサンプリングに使用する (ALTS = 0)• AD1IF を毎回サンプリングごとにセットとする (SMPI3:SMPI0 = 0000)• バッファを 2 つの 8 ワード セグメントに構成する (BUFM = 1)

動作シーケンス

1. MUX A の入力 AN3 をサンプル ; 変換しバッファ 0h に書き込む

2. AD1IF フラグをセット ( 有効であれば割り込み発生 ); 書き込みアクセスが自動的に別のバッファに切り替わる

3. MUX A の入力 AN3 をサンプル ; 変換しバッファ 8h に書き込む

4. AD1IF フラグをセット ( 有効であれば割り込み発生 ); 書き込みアクセスが自動的に別のバッファに切り替わる

5. (1-4) を繰り返す

バッファに格納される結果 ( 2 サイクル後 ) バッファ

アドレス

バッファ内容

初の AD1IF イベント時

バッファ内容 2 回目の AD1IF イベント時

ADC1BUF0 サンプル 1 (AN3、 サンプル 1) ( 使用しない )ADC1BUF1 ( 使用しない ) ( 使用しない )ADC1BUF2 ( 使用しない ) ( 使用しない )ADC1BUF3 ( 使用しない ) ( 使用しない )ADC1BUF4 ( 使用しない ) ( 使用しない )ADC1BUF5 ( 使用しない ) ( 使用しない )ADC1BUF6 ( 使用しない ) ( 使用しない )ADC1BUF7 ( 使用しない ) ( 使用しない )ADC1BUF8 ( 使用しない ) サンプル 2 (AN3、 サンプル 2)ADC1BUF9 ( 使用しない ) ( 使用しない )ADC1BUFA ( 使用しない ) ( 使用しない )ADC1BUFB ( 使用しない ) ( 使用しない )ADC1BUFC ( 使用しない ) ( 使用しない )ADC1BUFD ( 使用しない ) ( 使用しない )ADC1BUFE ( 使用しない ) ( 使用しない )ADC1BUFF ( 使用しない ) ( 使用しない )

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-29

PIC24F ファミリ リファレンス マニュアル

17.9.4 MUX A と MUX B の交互入力選択の使い方

図 17-13 および例 17-11 は MUX A および MUX B に割り当てられた入力の交互サンプリングの例です。ALTS ビットをセットすると、交互入力選択が有効化されます。 初のサンプルでは、CH0SA、CH0NA ビットで指定された MUX A 入力を使用します。次のサンプルでは、CH0SB、CH0NB ビットで指定された MUX B 入力を使用します。

この例では、2 つの 8 ワードバッファの例も示しています。8 回目のサンプルごとに割り込みが発生し、割り込みごとに 8 ワードがバッファに格納されていることになります。

図 17-13: 交互入力選択を使って 2 つの入力を変換する場合

A/D CLK

SAMP

ADC1BUF0

ADC1BUF1

DONE

ADC1BUF2

ADC1BUF3

CH0 への入力 AN1

TSAMP

AD1IF

TCONV

ADC1BUF4

ADC1BUF5

ADC1BUF6

ADC1BUF7

AN15

TSAMP

TCONV

ASAM

BUFS

AN1

TSAMP

TCONV

AN15

TSAMP

TCONV

ADC1BUF8

ADC1BUF9

ADC1BUFA

ADC1BUFB

TCONV

TSAMP

AN15

変換トリガ

ソフトウェアでクリア

ソフトウェアでクリア

TCONV TCONV TCONV TCONV TCONV

DS39705A_JP - ページ 17-30 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

例 17-11: MUX A と MUX B を交互で 2 つの入力を変換する例

A/D の構成

• AN1 を MUX A CH0+ の入力として選択 (CH0SA3:CH0SA0 = 0001)• VR- を MUX A CH0- の入力として選択 (CH0NA = 0) • 入力スキャンなしに構成 (CSCNA = 0)• AN15 を MUX B CH0+ の入力として選択 (CH0SB3:CH0SB0 = 1111)• VR- を MUX B CH0- の入力として選択 (CH0NB = 0) • MUX A と MUX B の交互サンプリングとする (ALTS = 1)• AD1IF を 8 回目のサンプルごとにセットする (SMPI3:SMPI0 = 0111)• バッファを 2 つの 8 ワード セグメントとする (BUFM = 1)

動作シーケンス

1. MUX A 入力の AN1 をサンプル ; 変換しバッファ 0h に書き込む

2. MUX B 入力の AN15 をサンプル ; 変換しバッファ 1h に書き込む

3. MUX A 入力の AN1 をサンプル ; 変換しバッファ 2h に書き込む

4. MUX B 入力の AN15 をサンプル ; 変換しバッファ 3h に書き込む

5. MUX A 入力の AN1 をサンプル ; 変換しバッファ 4h に書き込む

6. MUX B 入力の AN15 をサンプル ; 変換しバッファ 5h に書き込む

7. MUX A 入力の AN1 をサンプル ; 変換しバッファ 6h に書き込む

8. MUX B 入力の AN15 をサンプル ; 変換しバッファ 7h に書き込む

9. AD1I フラグをセット ( 有効ならば割り込み発生 ); 書き込みアクセスが自動的に別のバッファに切り替わる

10. (1-9) を繰り返す ; バッファ書き込みはバッファ8h から再開 ( 別のバッファの 初のアドレス )

バッファに格納される結果 (2 サイクル後 ) バッファ

アドレス

バッファ内容 初の AD1IF イベント時

バッファ内容 2 回目の AD1IF イベント時

ADC1BUF0 サンプル 1 (AN1、 サンプル 1) ( 使用しない )ADC1BUF1 サンプル 2 (AN15、 サンプル 1) ( 使用しない )ADC1BUF2 サンプル 3 (AN1、 サンプル 2) ( 使用しない )ADC1BUF3 サンプル 4 (AN15、 サンプル 2) ( 使用しない )ADC1BUF4 サンプル 5 (AN1、 サンプル 3) ( 使用しない )ADC1BUF5 サンプル 6 (AN15、 サンプル 3) ( 使用しない )ADC1BUF6 サンプル 7 (AN1、 サンプル 4) ( 使用しない )ADC1BUF7 サンプル 8 (AN15、 サンプル 4) ( 使用しない )ADC1BUF8 ( 使用しない ) サンプル 9 (AN1、 サンプル 5)ADC1BUF9 ( 使用しない ) サンプル 10 (AN15、 サンプル 5)ADC1BUFA ( 使用しない ) サンプル 11 (AN1、 サンプル 6)ADC1BUFB ( 使用しない ) サンプル 12 (AN15、 サンプル 6)ADC1BUFC ( 使用しない ) サンプル 13 (AN1、 サンプル 7)ADC1BUFD ( 使用しない ) サンプル 14 (AN15、 サンプル 7)ADC1BUFE ( 使用しない ) サンプル 15 (AN1、 サンプル 8)ADC1BUFF ( 使用しない ) サンプル 16 (AN15、 サンプル 8)

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-31

PIC24F ファミリ リファレンス マニュアル

17.10 A/D サンプリング要件 10 ビット A/D コンバータのアナログ入力モデルは図 17-14 に示されています。A/D の合計サンプリング時間はホールド キャパシタの充電時間の関数となります。

A/D コンバータの仕様精度を満たすためには、充電ホールド キャパシタ (CHOLD) をアナログ入力ピンの電圧レベルまで十分充電する必要があります。ソースのインピーダンス(RS)、内部接続インピーダンス (RIC) 、内部サンプリング スイッチのインピーダンス (RSS) の合計が、CHOLD の充電にかかる時間に直接影響を及ぼします。したがって、アナログ源の結合インピーダンスは、選択されたサンプル時間内にホールド キャパシタを完全に充電できるよう十分小さいものである必要があります。A/D コンバータの精度に対するピンの電流漏れの影響を 小にするための、 大の推奨ソース インピーダンス RS は 2.5 kΩです。アナログ入力チャネルが選択 ( 変更 ) されたあと、このサンプリング機能は、変換開始に先立って完了している必要があります。内部ホールド キャパシタは各サンプル動作に先立ち放電された状態になります。

小 1 TAD 時間が変換と変換の間のサンプル時間として必要です。詳細は 17.16 項 「電気的仕様」を参照して下さい。

図 17-14: 10 ビット A/D コンバータのアナログ入力モデル

CPINVA

Rs ANx

ILEAKAGE

RIC ≤ 250Ω サンプリングスイッチ

RSS

CHOLD

VSS

= 4.4 pF±500 nA

凡例 : CPINVTILEAKAGERICRSSCHOLD

= 入力容量= スレッショルド電圧= 種々の結合によるピンの漏れ電流

= 内部接続抵抗= サンプリング スイッチの抵抗= サンプル / ホールドキャパシタ

注: CPIN の値はデバイス パッケージに依存し、かつ未テストです。Rs ≤ 5 kΩならCPINによる影響は無視できます。

RSS ≤ 3 kΩ

 (DAC から )

DS39705A_JP - ページ 17-32 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.11 変換関数 A/D コンバータの変換関数を図 17-15 に示します。入力電圧の差分 (VINH – VINL) がリファレンス ((VR+) – (VR-)) と比較されます。

• 入力電圧が ((VR+) – (VR-))/1024 または 1.0 LSb のとき、 初のコード遷移がおきる

• 00 0000 0001のコードは VR- + (1.5 * ((VR+) – (VR-))/1024) の中心とする

• 10 0000 0000のコードは VREFL + (512.5 * ((VR+) – (VR-))/1024) の中心とする

• VR- + (((VR-) – (VR-))/1024) 未満の入力は 00 0000 0000として変換される

• (VR-) + (1023((VR+) – (VR-))/1024) を超える入力は 11 1111 1111として変換される

図 17-15: A/D 変換関数

10 0000 0001 (513)

10 0000 0010 (514)10 0000 0011 (515)

01 1111 1101 (509)

01 1111 1110 (510)01 1111 1111 (511)

11 1111 1110 (1022)11 1111 1111 (1023)

00 0000 0000 (0)00 0000 0001 (1)

出力コード

10 0000 0000 (512)

(VIN

H –

VIN

L)

VR

-

V R+

– V

R-

1024

512

* (V

R+

– V

R-)

1024

VR

+

VR

- +

V R-+

1023

* (V

R+

– V

R-)

1024

VR

- +

0

(2 進数 (10 進数 ))

電圧レベル

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-33

PIC24F ファミリ リファレンス マニュアル

17.12 A/D 精度 / 誤差

A/D の精度に関する説明資料のリストは 17.18 項 「関連する アプリケーション ノート」 を参照して下さい。

17.13 スリープとアイドル モード中の動作 CPU、バス、周辺モジュールのデジタル アクティビティが 小化されるので、スリープとアイドル モードは変換ノイズを 小化するために有効です。

17.13.1 RC A/D クロックなしの CPU スリープ モード

デバイスがスリープ モードに入った場合、モジュールへのすべてのクロック源が停止し、論理「0」となります。

変換の途中でスリープ が発生すると、A/D は内蔵 RC クロック ジェネレータからクロック供給されることなく変換が中断されます。スリープ モードから抜けたとき、一部完了済変換が継続開始されることはありません。

レジスタ内容は、スリープ モードに入ったり出たりするデバイスの影響を受けません。

17.13.2 RC A/D クロックありの CPU スリープ モード

A/D クロック源が内蔵 A/D RC オシレータに設定 (ADRC = 1) されると、A/D モジュールはスリープ モード中にも動作可能です。この場合には、変換の際のデジタル スイッチノイズを除去します。変換が完了すると、DONE ビットがセットされ、変換結果は A/D 結果バッファである ADC1BUF に格納されます。

A/D 割り込みが有効 (AD1IE = 1) ならば、A/D 割り込み発生時にデバイスはスリープ からウェイク アップします。その後のプログラム実行は、そのときの A/D 割り込みが現行 CPU優先順位より高い場合、A/D 割り込みサービス ルーチンから再開されます。そうでなければ、 デバイスをスリープ モードにした PWRSAV 命令の次の命令から実行が続行されます。

A/D 割り込みが有効でなければ、ADON ビットがセットのままになっていても、この時A/D モジュールはオフになります。

A/D モジュール動作におけるデジタル ノイズの影響を 小にするために、ユーザーは A/D変換がスリープ モードでも実行できる変換トリガ源を選ぶ必要があります。自動変換トリガ オプション (SSRC2:SSRC0 = 111) は、スリープ中のサンプリングおよび変換に使用できます。自動変換オプションを使用するときには、 ADON ビットのセットは PWRSAV命令より前に実行して下さい。

17.13.3 CPU アイドル モード中の A/D 動作

A/D では、ADSIDL ビット (AD1CON1<13>) により、モジュールをアイドル中に動作停止するかアイドル 中も動作継続するかが選択できます。 ADSIDL = 0ならば、デバイスがアイドル モードに入ってもモジュールの通常動作が継続されます。A/D 割り込みが有効(AD1IE = 1) ならば、A/D 割り込み発生時にデバイスはアイドル モードからウェイク アップします。A/D 割り込みが現行 CPU 優先順位より高い場合には、プログラム実行は A/D割り込みサービス ルーチンから再開されます。そうでない場合には、 デバイスをアイドルモードにした PWRSAV 命令の次の命令から実行が続行されます。

ADSIDL = 1ならば、モジュールはアイドル 中は動作を停止します。変換中にデバイスがアイドル モードに入ると変換は中断されます。アイドル モードからウェイク アップしても、一部完了済みの変換動作が継続開始されることはありません。

注 : A/D モジュールをスリープ中も動作させるには、A/D クロック源を RC にセット(ADRC = 1) して下さい。

DS39705A_JP - ページ 17-34 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.13.4 周辺モジュール無効化 (PMD) レジスタ

周辺モジュール無効化 (PMD) レジスタは、A/D コンバータへのクロック供給源を全て停止させることで無効化する手段を提供します。適切な PMD 制御ビットで周辺モジュールが無効化されると、周辺モジュールは 小消費電力の状態となります。その周辺モジュールに関連する制御とステータス レジスタも無効化されるため、それらのレジスタへの書き込みは何の影響も与えず、読み出した値も無効です。周辺モジュールは PMDx レジスタ内の ADC1MD ビットをクリアすることでのみ有効化されます。

17.14 リセットの影響

デバイス リセットによりすべてのレジスタが強制的にリセット状態にされます。これにより A/D モジュールは強制的にオフになり、進行中のすべての変換は中断されます。アナログ入力と複合されたすべてのピンは、アナログ入力として構成されます。対応する TRISビットがセットされます。

ADC1BUF レジスタの値はパワーオン リセットの間には初期化されませんので、それらは不定のデータが含まれます。

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-35

第17

章 

10ビ

ット

A/D

コン

バー

© 2007 M

icrochip Technology Inc.A

dvance Information

DS

39705A_JP

-ペ

ージ

17-36

17

フ ット 3 ビット 2 ビット 1 ビット 0 リセット

後の値

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD xxxx

AD — ASAM SAMP DONE 0000

AD MPI1 SMPI0 BUFM ALTS 0000

AD DCS3 ADCS2 ADCS1 ADCS0 0000

AD 0SA3 CH0SA2 CH0SA1 CH0SA0 0000

AD CFG3 PCFG2 PCFG1 PCFG0 0000

AD SSL3 CSSL2 CSSL1 CSSL0 0000

10ビット A/Dコンバータ 17

.15 レジスタ マップ

PIC24F 10 ビット A/D コンバータに関連するレジスタのまとめを表 17-3 に示します。

17-3: ADC レジスタ マップ

ァイル名 ビット 15 ビット 14 ビット 13 ビット 12 ビット 11 ビット 10 ビット 9 ビット 8 ビット 7 ビット 6 ビット 5 ビット 4 ビ

C1BUF0 ADC データ バッファ 0C1BUF1 ADC データ バッファ 1C1BUF2 ADC データ バッファ 2C1BUF3 ADC データ バッファ 3C1BUF4 ADC データ バッファ 4C1BUF5 ADC データ バッファ 5C1BUF6 ADC データ バッファ 6C1BUF7 ADC データ バッファ 7C1BUF8 ADC データ バッファ 8C1BUF9 ADC データ バッファ 9C1BUFA ADC データ バッファ 10C1BUFB ADC データ バッファ 11C1BUFC ADC データ バッファ 12C1BUFD ADC データ バッファ 13C1BUFE ADC データ バッファ 14C1BUFF ADC データ バッファ 151CON1 ADON — ADSIDL — — — FORM1 FORM0 SSRC2 SSRC1 SSRC0 —

1CON2 VCFG2 VCFG1 VCFG0 OFFCAL — CSCNA — — BUFS — SMPI3 SMPI2 S

1CON3 ADRC — — SAMC4 SAMC3 SAMC2 SAMC1 SAMC0 ADCS7 ADCS6 ADCS5 ADCS4 A

1CHS CH0NB — — — CH0SB3 CH0SB2 CH0SB1 CH0SB0 CH0NA — — — CH

1PCFG PCFG15 PCFG14 PCFG13 PCFG12 PCFG11 PCFG10 PCFG9 PCFG8 PCFG7 PCFG6 PCFG5 PCFG4 P

1CSSL CSSL15 CSSL14 CSSL13 CSSL12 CSSL11 CSSL10 CSSL9 CSSL8 CSSL7 CSSL6 CSSL5 CSSL4 C

例 : x = リセット後は不定、 — = 未実装、読むと「0」。リセット後の値は 16 進数で表しています。

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.16 電気的仕様

図 17-16: A/D 変換のタイミング

表 17-4: A/D 変換要件 パラ

メータ No.

記号 特性 Min Typ Max 単位 条件

AD130 Tad A/D クロック周期 75 — — ns TOSC に基づく

— 250 — ns A/D RC モード

AD131 Tcnv 変換時間 ( アクイジション時間は含まない )

11 — 12 TAD ( 注 1)

AD132 Tacq アクイジション時間 750 — — ns ( 注 2)AD135 Tswc 変換からサンプリングへの切替時間 — — ( 注 3)AD137 Tdis 放電時間 0.5 — — TAD

注 1: ADC1BUF レジスタは次の TCY サイクルで読み出し可能。

2: この時間は、ホールド キャパシタが新しい入力電圧になるまでの時間で、このときの入力電圧は変換後のフルスケールの

変化とします (VDD から VSS または VSS から VDD)。3: デバイス クロックの次のサイクルで。

131

130132

BCLR AD1CON1, SAMP

Q3/Q4

A/D CLK(1)

A/D DATA

ADC1BUF

AD1IF

SAMP

古いデータ

サンプリング停止

新しいデータ

( 注 2)

9 8 7 2 1 0

注 1: A/D クロック源に RC が選択されると、A/D クロック開始前に 1 TCY が追加される。これでスリープ命令が実行できる

ようになる。

2: これは 小の RC 遅延 ( 標準 100 ns) で、この後アナログ入力がホールド キャパシタにまた接続される。

. . . . . .

TCY

BSET AD1CON1, SAMP

135

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-37

PIC24F ファミリ リファレンス マニュアル

17.17 設計の秘訣

質問 1: A/D コンバータのシステム パフォーマンスはどうすれば最適化できますか ?回答 : A/D のパフォーマンスを 適化するには主に 3 つの主要検討項目があります。

1. タイミング仕様をすべて満たしていることをご確認ください。モジュールのオフからオン切り替え時には、サンプルを取得する前に待機する必要のある 低限の遅延があります。入力チャネル変更時にも、同じく待機が必要な 小限の遅延があり、そして

後に各ビット変換のために選択される時間である TAD があります。この遅延はAD1CON3 で選択しますが、 17.16 項 「電気的仕様」の仕様範囲内の値である必要があります。TAD が短か過ぎる場合、その結果は変換終了前に十分に変換されない可能性があり、TAD が長過ぎる場合、サンプリングコンデンサの電圧は変換が完了される前に放電する可能性があります。このタイミング仕様はデバイス データ シートの「電気的仕様」の項で説明されています。

2. しばしば、アナログ信号のソース インピーダンスが高く (2.5 kΩ を超える )、そのためソースからの漏れ電流や、サンプルコンデンサを十分充電できないなど、精度に影響を及ぼします。入力信号がそれほど高速に切り替わらない場合は、0.1 μF のコンデンサをアナログ入力に接続してみてください。このコンデンサがサンプルするアナログ電圧で充電され、4.4 pF 内蔵ホールド キャパシタを充電するために十分な瞬時電流を供給します。

3. A/D 変換を開始する前にデバイスをスリープ モードにしてください。RC クロック源の選択がスリープ モードでの変換に必要です。このテクニックにより CPU 及びその他の周辺モジュールからのデジタル ノイズが 小化されるので精度が向上します。

質問 2: A/D 変換に関する良い参考文献をご存知ですか ?回答 : A/D 変換を理解するのに良い参考文献は Prentice Hall 発行の『Analog-Digital ConversionHandbook』第 3 版です (ISBN 0-13-03-2848-0)。

質問 3: チャネル /サンプルとサンプル /割り込みの組み合わせがバッファ サイズを超えています。バッファに何が起きますか ?

回答 : この構成は推奨できません。バッファには不定の結果が格納されます。

DS39705A_JP - ページ 17-38 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

17.18 関連する アプリケーション ノート

この項では、マニュアルのこの章に関連するアプリケーションノートをリストアップします。これらのアプリケーションノートは、特に PIC24F デバイス ファミリー用に書かれているわけではありませんが、その概念は適切であり、変更、あるいは制限事項を考慮に入れて使用可能です。現在、10 ビット A/D コンバータに関連するアプリケーションノートは次の通りです。

タイトル アプリケーション ノート #Using the Analog-to-Digital (A/D) Converter AN546Four-Channel Digital Voltmeter with Display and Keyboard AN557Understanding A/D Converter Performance Specifications AN693

注 : PIC24F ファミリ デバイスに関するその他のアプリケーション ノートやコード例についてはマイクロチップ ウェブ サイト (www.microchip.com) をご覧下さい。

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-39

PIC24F ファミリ リファレンス マニュアル

17.19 改版履歴

リビジョン A (2006 年 4 月 )本文書の初版リリース。

DS39705A_JP - ページ 17-40 Advance Information © 2007 Microchip Technology Inc.

第 17 章 10 ビット A/D コンバータ10

ビット

A/D

コンバータ

17

ノート :

© 2007 Microchip Technology Inc. Advance Information DS39705A_JP - ページ 17-41