Atmel Studio入門:ADC

Atmel Studioで、AVRマイコンのADC(ADコンバータ)制御プログラムを開発する方法について解説します。

ADCのサンプル・コード

ADCの使い方を、下記の簡単なサンプル・コードを例に説明していきます。

//Example: ADC
//Target Device: ATmega328
//Author: easy labo
//Created: 2014.11.02

#include 

void InitAdc(void){
   
   //Clear or AREF Internal Vref turned off,
   ADMUX &= ~(0b11000000);
   //AVCC with external capacitor at AREF pin,
   ADMUX |= 0b01000000;
   //Internal 1.1V Voltage Reference with external capacitor at AREF pin
   //ADMUX |= 0b11000000;
   
   //set ADLAR 1 to left adjust the result
   //ADMUX |= 0b00100000;

   //ADCSRA Settings
   //ADEN(ADC Enable) = 1,
   //ADSC(ADC Start Conversion) = 1
   //ADATE(ADC Auto Trigger Enable) = 0
   //ADIF(ADC Interrupt Flag) = 0
   //ADIE(ADC Interrupt Enable) = 0
   //ADPS[2:0](ADC Prescaler Select Bits) = {0,0,0}
   ADCSRA = (1<<aden); didr0="" settings,="" digital="" input="" disable="" register="" 0="" }="" unsigned="" int="" convadc(unsigned="" char="" chad){="" dataadc;="" admux="(ADMUX" &="" 0xf0)="" |="" chad;="" adcsra="" adsc="1:" adc="" start="" conversion="" while(adcsra="" (1<<adsc));="" if="" adlar="0," dataadc="ADCL;" +="(ADCH<<8);">>6);
   //dataADC += (ADCH<<2);
   return dataADC;
}

以下、サンプル・コードの内容を順に見ていく事にします。

8行-32行
ADC関連レジスタの設定を行う関数の例になります。

10行-15行目
ADMUXの設定を行っています。この例では、AVCCをAREFとして使用していますが、他にも内部の1.1V基準を使用する事等も可能です。

17行-18行
2byte(16bit)データ領域のどちら側にデータを寄せるか設定する事も可能です。この例ではデフォルトのままで変えていません。

20行-27行
ADCSRAの設定を行っています。このレジスタでは様々な設定が行えますが、
この例では、最低限必要なADENのみを有効化しています。

29行-30行
Digital Inputの入力抵抗を無効にして、消費電流を減らる事も可能です。

34行-46行
AD変換をする関数の例になります。引数でADCのチャンネルを指定します。
関数の戻り値がADCの測定値になります。

36行
引数で指定したADCのチャンネルをADMUXレジスタのチャンネル指定部に書き込んでいます。ADCのチャンネル以上の数値が入力された場合は無視される様に0xFOでマスクしています。

37行
ADCSCRAのADSCビットを有効にして、AD変換を開始しています。

38行
ADCSRAのADSCビットが”1″の場合は、AD変換中なので、Waitしています。

39行-44行
2byteのデータをシフト演算整理しています。ADMUXレジスタのADLAR設定次第で、データ整理方法を変える必要があります。

45行
整理したADコンバータの測定値を返しています。

まとめ

以上がADCの基本的な使用方法になります。なお、この例では使用していませんが、割り込み等を利用した、より高度な使い方も可能です。また、ATmega328のADC分解能は10bitなので、それ以上の精度が必要な場合は、SPI等のインターフェースを介して外部の高精度ADCを利用する事になります。

→その他のAtmelマイコン関連情報

Sponsored Link