| 36行目: | 36行目: | ||
<br> | <br> | ||
MSP430G2553の省電力機能と組み合わせることで、バッテリー駆動のセンサアプリケーションに最適な低消費電力システムを構築することができる。<br> | MSP430G2553の省電力機能と組み合わせることで、バッテリー駆動のセンサアプリケーションに最適な低消費電力システムを構築することができる。<br> | ||
<br><br> | |||
== ADC10モジュールの各レジスタ == | |||
MSP430G2553のADC10モジュールには、制御レジスタ、データ格納レジスタ、DTC (Data Transfer Controller) 関連のレジスタ等、7つの主要なレジスタが存在する。<br> | |||
<br> | |||
[[ファイル:MSP430G2553 ADC10 Registers.png|フレームなし|中央]] | |||
<br> | |||
==== ADC10CTL0 / ADC10CTL1 (制御レジスタ) ==== | |||
これらの16ビットレジスタは、ADC10モジュールの心臓部とも言える存在である。<br> | |||
ADC10CTL0レジスタは、リファレンス電圧の選択、サンプリング時間、内蔵リファレンスの制御、モジュールの有効化、割り込み制御を担当する。<br> | |||
ADC10CTL1レジスタは、入力チャンネルの選択、クロックソースと分周比の設定、変換モードの選択を行う。<br> | |||
<br> | |||
例えば、SREF2、SREF1、SREF0という3ビットのフィールドは、リファレンス電圧源を選択する役割を持つ。<br> | |||
<br> | |||
==== ADC10MEM (変換結果格納レジスタ) ==== | |||
この16ビットレジスタはデータ格納専用のレジスタであり、実際には10ビットの変換結果を格納する。<br> | |||
ADC10CTL1レジスタのADC10DFビットの設定により、変換結果を上位10ビット (ビット15~6) に格納、または、下位10ビット (ビット0~9) に格納するかを選択できる。<br> | |||
<br> | |||
上位10ビットモードは、変換結果を直接16ビット値として扱う場合に便利である。<br> | |||
例えば、変換結果を0~1023の範囲から0~65472の範囲にスケーリングする場合に活用する。<br> | |||
<br> | |||
下位10ビットモードは、0~1023の範囲でそのまま扱う場合に適している。<br> | |||
<br> | |||
多くのアプリケーションでは、計算の簡便性から下位10ビットモードが使用することが多い。<br> | |||
<br> | |||
==== ADC10AE0 (アナログ入力有効化レジスタ) ==== | |||
ADC10AE0レジスタは8ビットのレジスタであり、各ビットが対応するアナログ入力チャンネル (A0~A7) の有効化を制御する。<br> | |||
<u>このレジスタの設定を忘れた場合、ピンがデジタルI/Oモードのままになってしまい、アナログ信号を正常に読み取ることができない。</u><br> | |||
<br> | |||
例えば、チャンネルA0 (P1.0) と A1 (P1.1) をアナログ入力として使用する場合、<code>ADC10AE0 = BIT0 | BIT1;</code> というコードを記述する。<br> | |||
<br> | |||
実務では、このレジスタの設定は必須である。<br> | |||
ADC10CTL0 / ADC10CTL1レジスタを正しく設定していても、ADC10AE0レジスタの設定を忘れた場合、変換結果が常に0 あるいは 不定値を示す原因となる。<br> | |||
<br> | |||
==== ADC10SA (DTC開始アドレスレジスタ) ==== | |||
ADC10SAレジスタは16ビットのアドレスレジスタで、DTC (Data Transfer Controller) 機能を使用する場合に重要である。<br> | |||
<br> | |||
DTCは、CPUの介入なしに変換結果を自動的にメモリに転送する便利な機能である。<br> | |||
ADC10SAレジスタには、変換結果を格納するメモリ領域の開始アドレスを設定する。<br> | |||
<br> | |||
例えば、変換結果を配列 <code>unsigned int adc_results[10];</code> に格納する場合、<code>ADC10SA = (unsigned int)adc_results;</code> と指定する。<br> | |||
DTCは、このアドレスから順番に変換結果を書き込む。<br> | |||
この機能を使用することにより、複数チャンネルの連続変換や同じチャンネルの複数回サンプリングを、CPUの負荷をあまり掛けずに実行することができる。<br> | |||
<br> | |||
==== ADC10DTC0 / ADC10DTC1 (DTC制御レジスタ) ==== | |||
これら2つは8ビットレジスタであり、DTCの動作を詳細に制御する。<br> | |||
<br> | |||
ADC10DTC0は主にDTCのモード設定を行い、ADC10DTC1は転送回数を指定する。<br> | |||
<br> | |||
ADC10DTC0レジスタには2つの重要なビットがある。<br> | |||
* ADC10CT | |||
** ビット0 | |||
**: <u>連続転送モード</u> を制御する。 | |||
** ビット1 | |||
**: 指定した回数の転送が完了した後も、自動的に最初のアドレスから転送を再開する。 | |||
**: これは、センサデータを連続的に収集し続ける場合に便利である。 | |||
*: <br> | |||
* ADC10TB | |||
** ビット1 | |||
**: <u>2ブロック転送 (Ping-Pongモード)</u> を有効化する。 | |||
**: 2つのメモリブロックを交互に使用することにより、一方のブロックにデータを転送している間に、もう一方のブロックのデータをCPUが処理できるようになる。 | |||
**: これは、リアルタイム性が要求されるアプリケーションで有用である。 | |||
<br> | |||
ADC10DTC1レジスタは、転送回数を8ビット値で指定する。<br> | |||
1〜256回までの任意の転送回数を指定することができる。<br> | |||
* 0x00 | |||
*: 256回の転送 | |||
* 0x01 | |||
*: 1回の転送 | |||
* 0x02 | |||
*: 2回の転送 | |||
* 0xFF | |||
*: 255回の転送 | |||
<br><br> | <br><br> | ||