C言語

A/Dコンバータで使用するレジスタの説明

A/Dコンバータは、アナログ入力をデジタル値に変換するコンバータです。変換する分解能は、10ビットと8ビットを選択できます。
今回は、A/Dコンバータで使用するレジスタの説明を行います。

周辺イネーブル・レジスタ(PER0)

各周辺ハードウェアへのクロック供給の許可/禁止を設定するレジスタです。このレジスタは、タイマ・アレイ・ユニット機能、リアルタイム・クロック機能、A/Dコンバータ機能、シリアル通信機能などの周辺ハードウェアの機能の許可/禁止を設定しますが、今回は、この中のA/Dコンバータ機能である、ADCENレジスタのみを有効にします。
このADCENレジスタは、PER0のbit5に割当たっています。
リセット時は、すべて 0 (入力クロックの供給停止)です。
タイマのみを使用する場合は、「PER0 = 0x20」もしくは、「ADCEN = 0x01」です。

A/Dコンバータ・モード・レジスタ0(ADM0)

A/D変換するアナログ入力の変換時間,変換動作の開始/停止を設定するレジスタです。
A/D変換動作の制御、A/D変換チャネル選択モード設定、A/D電圧コンパレータの動作制御、A/D変換時間の選択を設定します。

A/D変換動作の制御

A/D変換動作を行う場合に1を設定します。A/D変換終了時は、自動的にクリアされます。
ADM0のビット7(ADCSレジスタ)が、A/D変換動作の制御に該当します。
1:変換動作開始
0:変換動作停止
リセット時は、0 となります。
今回、設定時は、すぐにA/D変換を開始させないため、0を設定しておきます。

A/D変換チャネル選択モード設定

セレクト・モードか、スキャン・モードを選択します。
ADM0のビット6(ADMDレジスタ)が、A/D変換チャネル選択モード設定に該当します。
0:セレクト・モード(アナログ入力を1つ選択して、A/D変換します。)
1:スキャン・モード(アナログ入力を連続する4チャンネルを選択して、順番にA/D変換します。)
リセット時は、 0 となります。
今回は、特にスキャン・モードで行うことはないため、セレクト・モードを設定しておきます。

A/D電圧コンパレータの動作制御

A/D電圧コンパレータの動作許可と停止を設定します。
ADM0のビット0(ADCEレジスタ)が、A/D電圧コンパレータの動作制御に該当します。
1:動作許可
0:動作停止
リセット時は、0 となります。
A/D変換動作の制御の変換動作開始をしても、A/D電圧コンパレータの動作許可をしていなければ、A/D変換は開始されません。
ADCE:0、ADCS:0 は、A/D変換停止状態です。
ADCE:1、ADCS:0 は、A/D変換待機状態です。この状態のときに、ADCSを1にすることによりA/D変換を開始ましす。
ADCE:1、ADCS:1 は、A/D変換動作中です。
今回は、いつでもA/D変換が開始できるように、動作許可に設定しておきます。

ADCEを1(動作許可)にした後、ADCSを1(変換動作開始)にするまでに、内部回路安定するため、1μ秒必要です。

A/D変換時間の選択

A/D変換時間を選択します。
ADM0んのビット1~ビット5の組み合わせでA/D変換時間を選択できます。
最適な時間は理解不足のところがありますが、電気的特性の変換時間の範囲内ならどこでも問題ないと思いますので、リセット値のままとします。
このため、変換時間は、38μ秒です。
リセット時は、すべて0となります。

A/Dコンバータ・モード・レジスタ1(ADM1)

A/D変換トリガ・モードの選択、A/D変換動作モードの設定、ハードウエア・トリガ信号の選択を設定するレジスタです。

A/D変換トリガ・モードの選択

どのような操作でA/D変換を開始するかを選択します。
ADM1のビット6(ADTMD0レジスタ)、ビット7(ADTMD1レジスタ)の組み合わせにより選択します。
ADTMD1:0、ADTMD0:0 ソフトウェア・トリガ・モード(ソフトウェアでA/D変換動作を開始します。)
ADTMD1:1、ADTMD0:0 ハードウェア・トリガ・ノーウエイト・モード(ハードウエア・トリガを検出することによりA/D変換動作を開始します。)
ADTMD1:1、ADTMD0:1 ハードウェア・トリガ・ウエイト・モード(ハードウェア・トリガを検出し、A/D電源安定待ち時間経過後にA/D変換動作を開始します。)
※ADTMD1:0、ADTMD0:1 は、ソフトウェア・トリガ・モードになります。
リセット時は、すべて0となります。
今回、ソフトウェア上でA/D変換を開始するため、ソフトウェア・トリガ・モードを選択します。

A/D変換動作モードの設定

A/D変換動作を1回行うか、停止させるまで連続してA/D変換を行うかを選択します。
ADM1のビット5(ADSCMレジスタ)に設定します。
0:連続変換モード
1:ワンショット変換モード
リセット時は、0となります。
今回は、定期的に1回A/D変換を行うことを想定しているため、1を設定します。

ハードウエア・トリガ信号の選択

どの信号をハードウェア・トリガの信号とするかを選択します。
ADM1のビット1(ADTRS1レジスタ)とビット0(ADTRS0レジスタ)の組み合わせにより選択します。
ADTRS1:0、ADTRS0:0 タイマ・チャネル1のカウント完了またはキャプチャ完了割り込み信号
ADTRS1:0、ADTRS0:1 イベント・リンク・コントローラ(ELC)で選択されたイベント信号
ADTRS1:1、ADTRS0:0 リアルタイム・クロック割り込み信号(INTRTC)
ADTRS1:1、ADTRS0:1 12ビット・インターバル・タイマ割り込み信号(INTIT)
リセット時は、すべて0となります。
今回は、ソフトウェアでA/D変換を開始するため、初期値のままとします。

A/Dコンバータ・モード・レジスタ2(ADM2)

A/Dコンバータの + 側の基準電圧源の選択、A/Dコンバータの-側の基準電圧の選択、変換結果上限/下限値チェック、SNOOZEモードの設定、A/D変換分解能の選択の設定を行います。

A/Dコンバータの + 側の基準電圧源の選択

A/Dコンバータの+側の基準電圧源をVDDから供給するか、AVREFP(P20)から供給するか、内部基準電圧(1.45V)から供給するかを選択します。
ADM2のビット7(ADREFP1レジスタ)とビット6(ADREFP0レジスタ)の組み合わせにより選択します。
ADREFP1:0、ADREFP0:0 VDDから供給
ADREFP1:0、ADREFP0:1 AVREFPから供給
ADREFP1:1、ADREFP0:0 内部基準電圧(1.45V)から供給
リセット時は、すべて0となります。
今回は、VDDから供給を選択します。

A/Dコンバータの - 側の基準電圧源の選択

A/Dコンバータの - 側の基準電圧源をVSSから供給するか、AVREFM(P21)から供給するかを選択します。
ADM2のビット5(ADREFMレジスタ)に設定します。
0:VSSから供給
1:AVREFMから供給
リセット時は、0となります。
+側の設定の対で、VSSから供給を選択します。

変換結果上限/下限値チェック

A/D変換した値と上下限値を比べて、想定外のA/D変換した値になったときに割り込みを発生させる設定を行います。
ADM2のビット3(ADRCKレジスタ)に設定します。
0:下限値 ≦ A/D変換結果 ≦ 上限値 の時、割り込み信号(INTAD)が発生
1:A/D変換結果 < 下限値、上限値 < A/D変換結果 の時、割り込み信号(INTAD)が発生
リセット時は、0となります。
今回は、特に割り込みを使用しないので、初期値のままとします。

SNOOZEモードの設定

STOPモード(メインクロックを停止し、消費電力を低減するモード)中のハードウェア・トリガ信号によりSTOPモードを解除し、CPUを動作させることなくA/D変換を行うSNOONEモード機能を使用するか、しないかを選択します。
ADM2のビット2(AWCレジスタ)に設定します。
0:SNOOZEモード機能を使用しない
1:SNOOZEモード機能を使用する
リセット時は、0となります。
今回は、使用しないので、0を設定します。

A/D変換分解能の選択

10ビットか8ビットの分解能を選択します。
0:10ビット分解能
1:8ビット分解能
ADM2のビット0(ADTYPレジスタ)に設定します。
リセット時は、0となります。
今回は、精度の高い10ビット分解能を選択します。

10ビットA/D変換結果レジスタ(ADCR)

10ビット分解能のA/D変換結果が格納されるレジスタです。設定するレジスタではないため、リード専用となります。
16ビットのレジスタですが、下位6ビットは0固定です。

8ビットA/D変換結果レジスタ(ADCRH)

8ビット分解能のA/D変換結果が格納されるレジスタです。設定するレジスタではないため、リード専用となります。

アナログ入力チャネル指定レジスタ(ADS)

A/D変換するチャネルを指定するレジスタです。
ビット7(ADISSレジスタ)、ビット4(ADS4レジスタ)~ビット0(ADS0レジスタ)の組み合わせにより、アナログ入力チャネルを選択します。
リセット時は、すべて0のANI0が選択されます。
温度センサのアナログ入力はANI19に接続されているため、次のように設定します。
ADISS:0、ADS4:1、ADS3:0、ADS2:0、ADS1:1、ADS0:1

変換結果比較上限値設定レジスタ(ADUL)

A/D変換結果に対して、上限閾値を設定するレジスタです。
リセット時は、0xFFになります。
特に上限値チェックはしないので、0xFFのままにします。

変換結果比較下限値設定レジスタ(ADLL)

A/D変換結果に対して、下限閾値を設定するレジスタです。
リセット時は、0になります。
特に下限値チェックはしないので、0のままにします。

A/Dテスト・レジスタ(ADTES)

A/D変換対象に+ 側の基準電圧、-側の基準電圧、アナログ入力チャネル(ANIxx)、温度センサ出力電圧、内部基準電圧(1.45 V)を選択するレジスタです。
ADTESのビット1(ADTES1)、ビット0(ADTES0)の組み合わせにより、選択します。
ADTES1:0、ADTES0:0 アナログ入力チャネル指定レジスタ(ADS)で設定
ADTES1:1、ADTES0:0 ADM2レジスタのADREFMで選択
ADTES1:1、ADTES0:1 ADM2レジスタのADREFP1、ADREFP0で選択
今回は、アナログ入力チャネル指定レジスタで設定したANI19を使用するため、すべて0を設定します。

A/Dポート・コンフィギュレーション・レジスタ(ADPC)

P20/ANI0、P21/ANI1、 P22/ANI2、P23/ANI3、P24/ANI4~P27/ANI7端子を、A/D コンバータのアナログ機能/ポートのデジタル入出力に切り替えるレジスタです。
ADPCのビット3~ビット0のADPC3~ADPC0の組み合わせにより、アナログ入力とデジタル入出力の切り替えを行います。
このレジスタは、ANI0~ANI7のどの範囲をアナログ入力にするかを指定します。ANI1をアナログ入力として使用したい場合は、ANI0もアナログ入力にする必要があります。
このため、ANI7を使用したい場合、ANI0~ANI6もアナログ入力に使用しなければなりません。
リセット時は、すべて0のため、すべてアナログ入力になります。
今回は、ANI19のみを使用するため、このレジスタはすべてデジタル入出力を設定します。

A/Dコンバータで使用するレジスタの説明は以上です。

-C言語