A/D変換機能

AVR2313

AVR ATmega88を使ったAD変換の方法


AD変換1ch(PC0) と  1ch(PC0)、2ch(PC1) を使用し、AD変換処理についての設定と説明

A/D変換

ATmega48/88では、10bit分解能、6ch(PDIP)のA/D変換です。
今までのTiny2313にはAD変換ないのでATmega48/88使用

 

2313でもコンデンサの充電をタイマで測るなどの方法で外部にAD変換らしきものを作る方法もあるみたいですが本来のADC機能を実験。

 

接続

pc0=VR1(10k)   pc1=VR2(10k)    ボリュームをつなぐ
AVcc=Vcc     VREF=Vcc      配線で接続

 

ボリュームは H8の A/D変換機能を使う など参照

 

ADlcd_test


 

	

	


#define AD_CH	1	// = PC0 = 1ch =の部分
			//コメントアウトすると * PC0,PC1 = 2ch *の部分

#include 
#include 
#include 
#include "lcd.h"
#include "myLCDdef.h"

int main(){

	unsigned short a,b;

    ADCSRA = 0b10000100; // AD許可:1 AD開始:0 AD自動起動:0 AD割込:0 AD完了割込:0 ck/16
    ADMUX = 0x00;       //AREF外部電圧、入力PC0

//LCD初期化
    lcd_init(LCD_DISP_ON);
    lcd_clrscr();
    lcd_puts("ADC Display");
	a=0; b=0; 


#if AD_CH


    while(1){
		ADCSRA |= _BV(ADSC); 	   //変換開始 要ループ内
    	loop_until_bit_is_set(ADCSRA,ADIF);  //変換終了時ADIFがセットされる
//		a = ADC;	//AD変換結果 10bit:0-1024
		a = ( ADC >> 4 );	//AD変換結果 4bitシフト= 6bit:0-64

    	//LCD右詰め 3桁マス 
 		LCD_LOCATE( 1,2 );
		LCD_dtoutRsgn(4,a);
	}


#else


  //2CHのAD変換 ADMUXを切り替える

    while(1){

	   ADMUX = 0;	//ADch0(PC0) select
		ADCSRA |= _BV(ADSC); 	   //変換開始
    	loop_until_bit_is_set(ADCSRA,ADIF);  //変換終了時ADIFがセットされる
//		a = ADC;	//AD変換結果 10bit:0-1024
		a = ( ADC >> 4 );	//AD変換結果 4bitシフト= 6bit:0-64
		//LCD右詰め 3桁マス 
 		LCD_LOCATE( 1,0 );
		LCD_dtoutRsgn(4,a);

	   ADMUX = 1;	//ADch1(PC1) select
		ADCSRA |= _BV(ADSC); 	   //変換開始
    	loop_until_bit_is_set(ADCSRA,ADIF);  //変換終了時ADIFがセットされる
		a = ( ADC >> 4 );	//AD変換結果 4bitシフト= 6bit:0-64

    	//LCD右詰め 3桁マス 
 		LCD_LOCATE( 1,6 );
		LCD_dtoutRsgn(4,a);
	}


#endif

}


       

 

#define AD_CH 1 // = PC0 = 1ch =の部分  : AD変換1ch用

 

この部分をコメントアウトすると 
 以下の部分になり  AD変換2ch用  : PC1と 2 につながった2つをAD変換し表示

 

A/D変換用レジスタ

 

ADMUX
7 6 5 4 3 2 1 0
REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0
00 以外を選ぶ場合、AREF ピンに
内部基準電圧が出力される。
AREF が例えば AVCC に
繋がっていないかどうか注意
結果を左そろえ:1
上位10bitに変換結果が入る
アナログ入力チャンネル選択
0~8 →PC0~7
その他、1110=基準電圧1.1V、1111=GNDが定義されている

 

基準電圧選択

 

ADCSRA AD状態レジスタ
7 6 5 4 3 2 1 0
ADEN ADSC ADATE ADIF ADIE  ADPS2 ADPS1 ADPS0
AD変換有効
1 : enable
0 : off
 ADC開始
1: 開始
ADCオートトリガ
連続/単独変換動作選択
1:オートトリガon 
ADCSRBで設定した
トリガモード
 AD変換完了割込要求フラグ
ADC完了合図フラグ
AD変換完了割込許可 AD変換クロック選択
0 0 0 : 1/2   0 0 0 : 1/2
0 1 0 : 1/4   0 1 1 : 1/8
1 0 0 : 1/16  1 0 1 : 1/32
1 1 0 : 1/64  1 1 1 : 1/128

 

ADCSRB AD変換自動起動選択レジスタ

7 6 5 4 3 2 1 0
- ACME -  -  -  ADTS2 ADTS1 ADTS0
アナログコンパレータ用

レジスタADCSRBのbit-ACMEをon
にしてADCを無効にすると
ADC用のマルチプレクサで
アナログコンパレータの入力を
8本の入力から切り替え
使用することが出来る。
mega48/88/168 や tiny13 などで新しくサポートされたモード。

0 0 0 連続変換動作
0 0 1 コンパレータ
0 1 0 外部割り込み 0
0 1 1 タイマ/カウンタ0 比較 A 一致
1 0 0 タイマ/カウンタ0 オーバーフロー
1 0 1 タイマ/カウンタ1 比較 B 一致
1 1 0 タイマ/カウンタ1 オーバーフロー
1 1 1 タイマ/カウンタ1 キャプチャ要求

従来の連続変換モードは自動起動モードの一種という扱いに。
連続変換動作とは、つまり ADC 変換完了割り込みフラグによって
変換開始するモードという意味になる。

 

 

 

スポンサーリンク
  • facebook
  • twtter
  • google+
  • hatena