概要ATmega48/88/168には、10ビットの逐次変換A/Dコンバータ(ADC)が搭載されています。ADCには8チャンネルのアナログ・マルチプレクサが接続されており、8つのシングル・エンドのアナログ電圧をポートC端子から入力することができます。シングル・エンドの入力は、0V(GND)に対する電圧となります。ADCにはサンプル・ホールド回路が搭載されており、変換動作中のADCへの入力電圧が一定値となるように動作します。ADCのブロック図をFigure23-1(p.244)に示します。ADCには、専用の電源端子としてAVCCが用意されています。0.3V以内の範囲でなければなりません。この端子の接続については、「ADCのノイズ抑制」(p.249)を参照してください。1.1V出力の内蔵電圧リファレンス、またはAVCCが参照電圧として利用されます。AREF端子に外付けのデカップリング・コンデンサを接続することで、電圧リファレンスの耐ノイズ特性を改善することができます。ADCを使用する際には、「消費電力を最小にする」(p.40)に記載されている、ADC電力低減ビットPRADCに0を書き込んで節電機能を無効にしてください。ADCは、アナログ入力電圧を連続した近似動作によって10ビットのデジタル値に変換します。変換結果の最小値はGND電圧を表しており、最大値はAREF端子の電圧値から1LSB分差し引いた値を表します。ADMUXレジスタのREFSnビットを設定することによって、AVCC、あるいは内蔵電圧リファレンスの1.1VをAREF端子に接続することができます。したがって、AREF端子に外付けのデカップリング・コンデンサを接続して、内蔵電圧リファレンスのノイズ耐性を改善することができます。A/Dコンバータ回路の動作ブロック図ADMUXレジスタのMUXビットに値を書き込んで、アナログ入力チャンネルを選択できます。ADC入力端子のいずれか、GND、固定値のバンドギャップ電圧リファレンスのうち一つをADCのシングル・エンド入力とすることができます。ADCSRAレジスタのADC有効ビット、ADENをセットするとADCが有効になります。電圧リファレンスと入力チャンネルの選択は、ADENビットがセットされない限り、有効な選択となりません。ADENビットがクリアされている場合、ADCは電力を消費しません。したがって、消費電力を低くするためにスリープ・モードに入る際には、ADCへの電力供給をオフにしておくことが推奨されます。ADCの生成する10ビットの変換結果はADCデータ・レジスタ、ADCH、ADCLに出力されます。デフォルト設定では、変換結果はビットを右側へ詰め込んだ表現形式で保存されます。ADMUXレジスタのADLARビットをセットすることにより、ビットを左側に詰め込んだ表現形式とすることもできます。ビットを左側に配置した変換結果を使用する場合、8ビット以上の精度が必要でなければ、ADCHレジスタの値のみを読み取るだけで十分です。それ以外の場合は、ADCLレジスタを最初に、その次にADCHレジスタを読み取り、二つのデータ・レジスタの内容が同一の変換結果からのものとなるようにしなければなりません。ADCLレジスタを読み取ると、ADCによるデータ・レジスタへのアクセスが禁止されます。ADCLレジスタを読み取ってからADCHレジスタを読み取る前に新たに変換動作が完了した場合、データ・レジスタADCL、ADCHの更新は行われず、その変換結果は失われることになります。ADCHを読み取ると、ADCによるADCH、ADCLレジスタへのアクセスが再び有効になります。ADCには、変換完了時に発生させることができる割り込みが備わっています。ADCHとADCLレジスタの読み取りの間の、ADCがデータ・レジスタへのアクセスを禁止されている期間に変換動作が完了し、変換結果が失われる場合であっても、割り込みは発生します。「消費電力を最小にする」(p.40)にあるADC電力低減ビット、PRACに0を書きこんで無効にし、ADC変換開始ビット、ADSCに1を書きこむと、一回の変換動作が開始します。ADSCビットは、変換動作が進行中の間Highのままとなり、変換が完了するとハードウェアによりクリアされます。変換動作中に、入力チャンネルの選択を変更すると、ADCは進行中の変換を完了してから、チャンネルの変更を行います。別の方法として、様々な要因をトリガーとして自動的に変換動作をスタートさせることができます。この自動トリガー動作は、ADCSRAレジスタのADC自動トリガー有効ビット、ADATEをセットすると有効になります。トリガー要因の選択は、ADCSRBレジスタのADCトリガー選択ビット、ADTS(トリガー要因の一覧については、ADTSビットの説明を参照)によって行います。選択されたトリガー要因の立ち上がりエッジにより、ADCのプリスケーラがリセットされ、変換動作が開始されます。この機能により、一定の時間間隔で変換動作を開始することができます。変換完了時にトリガー要因の信号レベルがHighのままになっている場合、次の変換動作は開始されません。変換動作中に新たにトリガー要因に立ち上がりエッジが発生した場合、そのエッジは無視されます。各トリガーに対応する割り込みが無効になっている場合や、SREGのグローバル割り込み有効ビットがクリアされている場合であっても、割り込みフラグはセットされます。したがって、割り込みを発生させることなく、変換動作をトリガーにより開始することができます。割り込みフラグをクリアしないと、次の割り込みイベントによる変換動作を開始することはできません。自動トリガー回路ADC割り込みフラグをトリガー要因として使用することにより、変換動作が完了すると即座に次の変換を開始させることができます。これにより、ADCはフリーラン・モードで動作し、自動的にサンプリングを行って、ADCデータ・レジスタを更新しつづけます。最初の変換動作は、ADCSRAレジスタのADSCビットに1を書きこんで開始させなければなりません。このモードでは、ADC割り込みフラグ、ADIFがクリアされているかどうかに関係なく、ADCが連続して変換動作を行います。自動トリガーを有効にしている場合でも、ADCSRAレジスタのADSCビットに1を書き込むことにより、単一の変換動作を開始させることができます。ADSCビットは変換動作が進行中かどうかを判定するために使用することもできます。変換動作の開始要因に関係なく、変換動作中のADSCビットの読み取り値は1となります。最大精度を得る場合50kHzから200kHzのクロック入力を必要とします。必要な精度が10ビットよりも低い場合、ADCへの入力クロックの周波数を200kHZよりも高く設定して、より高いサンプリング・レートを実現することができます。ADCモジュールにはプリスケーラが備わっており、100kHzよりも高い周波数のCPUクロックからADCに適切なクロック周波数を生成することができます。プリスケーラの設定はADCSRAレジスタのADPSビットで行います。プリスケーラのカウント動作は、ADCSRAレジスタのADENビットをセットしてADCを有効にした時から始まります。ADENビットがセットされている間、プリスケーラはカウント動作を継続し、ADENビットがLowになった場合、ゼロ固定となります。ADCSRAレジスタのADSCビットをセットして単一の変換動作を開始する場合、その変換動作はADCクロックサイクルの次の立ち上がりエッジにより開始されます。通常の変換動作には、ADCクロック13サイクルの時間がかかります。25サイクルが必要です。バンドギャップ電圧リファレンスがADCの入力として使用されている場合、その電圧が安定するまでに一定の時間が必要です。安定していない状態で変換を行うと、最初に読み取る変換結果は正確な値とならない場合があります。通常の変換動作を開始後1.5ADCサイクル、および、最初の変換動作開始から13.5ADCサイクル後に、サンプル・ホールド動作が行われます。変換動作が完了すると、変換結果がADCデータ・レジスタに書きこまれ、ADIFビットがセットされます。単一変換モードでは、同時にADSCビットがクリアされます。その後、ソフトウェアによりADSCビットを再度セットすると、その後の最初のADCクロックの立ち上がりエッジで次の変換動作が開始されます。自動トリガー・モードでは、トリガー要因が発生したときにプリスケーラがリセットされます。これにより、トリガー要因から変換開始までの遅延時間を一定にすることができます。このモードでは、トリガー要因の立ち上がりエッジから、2ADCクロック後のにサンプル・ホールド回路が動作します。同期回路の動作に3CPUサイクルを消費します。フリーラン・モードでは、ADSCビットがHighになっている間、変換動作が完了すると即座に次の変換が開始されます。23-1(p.248)にまとめます。チャンネルやリファレンス電圧の選択を変更するADMUXレジスタのMUXnビット、およびREFS1:0ビットは、CPUからランダム・アクセスできる一時レジスタを介してシングル・バッファ接続されています。このしくみにより、A/D変換動作中の安全な時間帯でのみ、チャンネルやリファレンス電圧の選択動作が行われます。変換動作が開始するまでは、チャンネルやリファレンス電圧の選択は、変更があると、それに応じていつでも更新されます。変換動作が開始すると、チャンネルやリファレンス電圧の選択はロックされ、A/Dコンバータに必要なサンプリング時間を確保します。A/D変換完了(ADCSRAレジスタのADIFフラグがセットされるとき)の直前の最終ADCクロックにおいて、チャンネルやリファレンス電圧選択の更新動作が再開されます。ADSCレジスタに書き込みを行った次のADCクロックの立ち上がりで、変換動作が開始することにご注意ください。したがって、ユーザープログラム中では、ADSCレジスタへの書込み後、ADCクロック1サイクル経過するまでの時間帯に、チャンネル選択やリファレンス電圧選択を変更するような値をADMUXレジスタに書きこむべきではありません。自動トリガー・モードを使用している場合は、トリガー・イベントが発生する正確な時間が予測不能な場合があります。ADMUXレジスタの更新を行う場合は、設定変更によって変換動作が受ける影響を最小限にするために特別な配慮が必要となります。ADATEビットとADENビットの両方に1をセットしている場合、割り込みイベントがいつ発生するかを予測することは原理的に不可能です。ADMUXレジスタをこの状態で変更した場合、その次の変換動作がADMUXの変更前、変更後いずれの設定によるものかをユーザーが知るすべはありません。ADMUXレジスタの変更を安全に行うために、以下のような条件で実行してください。ADATEビット、ADENビットのいずれかがクリアされている場合。変換動作中の場合、トリガー・イベントから少なくともADCクロック1サイクルが経過した後。変換動作後の場合、トリガー要因として使用されている割り込みフラグがクリアされる前。ADMUXレジスタの更新を以上の条件のもとで行った場合、新しい設定値が次回のA/D変換動作に反映されます。ADC入力チャンネルチャンネルの選択を変更する際は、ユーザーは下記の原則に注意して正しいチャンネルが選択されるようにしなければなりません。単一変換モードでは、必ず変換動作を開始する前にチャンネル選択をしてください。ADSCビットに1を書き込んだ後、ADCクロック1サイクル経過後でもチャンネル選択の変更をすることができますが、最も簡単な方法は、変換動作が完了するのを待ち、その後、チャンネル選択の変更をすることです。フリーラン・モードでは、必ず最初の変換動作を始める前にチャンネル選択をしてください。ADSCビットに1を書き込んだ後、ADCクロック1サイクル経過後にチャンネル選択の変更をすることができますが、最も簡単な方法は、最初の変換動作が完了するのを待ち、その後、チャンネル選択の変更をすることです。このとき、次の変換動作が自動的に開始されているので、次回の変換結果は変更前のチャンネルを反映したものになります。それ以降の変換動作では、新しく選択したチャンネルが反映されます。電圧リファレンスA/D変換の電圧リファレンス(VREF)は、A/D変換の対象となる電圧の上限を示しています。シングル・エンドのチャンネルにおけるVREFを超える入力は全て同一の値0x3FFに変換されます。VREFには、AVCC、内蔵の1.1V電圧リファレンス、または、外部入力端子AREFのいずれかを選択できます。AVCCはパッシブ・スイッチを通してADCに接続されています。内蔵1.1V電圧リファレンスは、内蔵のバンドギャップ電圧リファレンスから内蔵アンプを通して生成されています。どの場合でも、AREF端子はADCに直接接続されており、AREF端子とグラウンドの間にコンデンサを接続することで、電圧リファレンスのノイズ耐性を高めることができます。VREFの電圧はAREF端子に高インピーダンスの電圧計を接続して測定することもできます。VREFは高インピーダンスの電圧源なので、回路全体としてVREFに容量性負荷以外のものを接続するべきではありません。ユーザーがAREF端子に固定値の外部電圧源を接続する場合、内部電圧リファレンスとの短絡を防止するため、そのアプリケーションで他の電圧リファレンスのオプションを選択してはいけません。外部からの電圧がAREF端子に供給されていない場合に限り、AVCCや1.1Vを選択肢として切り替え使用することができます。電圧リファレンスを切り替えた場合、その後の最初のAD変換動作の結果は不正確な場合があるので、ユーザーは最初の変換結果を破棄することが推奨されます。ADCノイズ抑制機能ADCにはスリープ・モード中に変換を行い、CPUコアや他の周辺I/Oから発生するノイズを低減するノイズ抑制機能が備わっています。ノイズ抑制機能はADCノイズ低減モードとアイドル・モードで使用できます。この機能の使用は、下記の手順でおこないます。ADCが有効になっており、変換動作中ではないことを確認します。単一変換モードを選択し、ADC変換完了割り込みを有効にします。ADCノイズ低減モード、あるいはアイドル・モードに入ります。CPUが停止すると同時にADCでの変換が開始されます。ADCの変換が完了する前に他の割り込みが発生しなければ、ADC割り込みによりCPUがウェークアップしてADC変換完了割り込みルーチンを実行します。他の割り込みによってADC変換が完了する前にCPUがウェークアップした場合、その割り込みが実行され、ADC変換完了割り込み要求がA/D変換完了時に発生します。CPUは、新たにsleep命令が実行されるまでアクティブ・モードのままとなります。アイドル・モード、ADCノイズ低減モード以外のスリープ・モードに入る場合、ADCは自動的にオフにならないことにご注意ください。その他のスリープモードに入る場合、ADENビットにゼロを書き込み、余計な電力を消費しないようにすることが推奨されます。アナログ入力回路シングル・エンド・チャンネルのアナログ入力回路をFigure23-8に示します。ADCn端子に供給されるアナログ電圧源には、ADCの入力チャンネルが選択されているかどうかに関係なく、端子の容量成分と漏れ電流の影響を受けます。(訳注:Figure23-8には「端子の容量成分」は記載がありません。チャンネルが選択されている場合は、電圧源は、直列抵抗(入力経路の抵抗成分の合成値)を通して、サンプル・ホールド回路のコンデンサを駆動しなければなりません。ADCは、出力インピーダンスが約10kω以下のアナログ信号を入力として受けるように最適化されています。その要件を満たした電圧源を使用する場合はサンプリング時間は無視できるほど小さくなります。高い出力インピーダンスをもつ電圧源を使用する場合、サンプリング時間の長さはサンプル・ホールド回路のコンデンサの充電時間に依存し、この時間は広範囲にわたって変化します。サンプル・ホールド回路のコンデンサの充電時間を最小限にするため、出力インピーダンスが低く、信号の変化がゆっくりとしている電圧源の使用が推奨されます。予測不可能な信号の重畳による歪みを防止するため、ナイキスト周波数(fADC/2)よりも高い信号成分が、どのチャンネルにも現れないようにする必要があります。ADCに信号が入力される前に、ロー・パス・フィルタによって高い周波数成分を取り除いておくことが推奨されます。アナログ・ノイズを抑制する手段デバイス内部、および外部のデジタル回路が発生するEMIにより、アナログ電圧の測定精度が悪化する場合があります。A/D変換の精度が最重要項目である場合には、下記のような手段によりノイズレベルを低減することができます。アナログ信号の通る経路を可能な限り短くします。アナログ信号の配線が、必ずアナログ・グラウンド面の上を通るようにし、高速でスイッチングしているデジタル信号の配線から十分に距離をとるようにします。23-9に示すLCフィルタ回路を通して接続します。ADCのノイズ抑制機能を使用して、CPUから発生するノイズを低減します。ACD[3..0]のポート端子のいずれかがデジタル出力として使用されている場合、変換動作中にその端子の状態を変化させないようにします。2線式インターフェースを使用している場合(ADC4およびADC5端子)は、ADC4およびADC5のA/D変換にのみ影響があり、他のADCチャンネルへの影響はありません。LSB)に直線的に変換します。小さなコードは0となり、最も大きなコードは2n-1となります。理想的な動作との相違点は、いくつかのパラメータにより表現されます。最初の変化点(0x000から0x001)と理想的な変化点(0.5LSBにおける値)とを比較した場合の相違。オフセット誤差の調整を行った後での、最終変化点(0x3FEから0x3FF)と理想的な変化点(最大値から1.5LSBだけ小さい点における値)とを比較した場合の相違をゲイン誤差と呼びます。オフセット誤差、ゲイン誤差を調整した後での、任意のコードにおける実際の変化点と理想的な変化点との相違をINLと呼びます。