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 変換完了割り込みフラグによって 変換開始するモードという意味になる。 |
スポンサーリンク
- twtter
- google+
- hatena