アナログ部の出力を外部割り込みするんじゃなくてAD変換するのが正解っぽい。
ということでAtmega8でAD変換してみた。
- アナログ部出力をADC0に接続し、その結果をLEDに出力
- Atmega8のAD変換は10bitなのだが上8bitのみを使用(ADLAR)
- 連続AD変換と割り込みを利用してLED表示用バイト領域を更新
- 200kHzを超えると変換精度が下がるらしいのでAD変換用タイマーをck/8にする
- 基準電圧に内部2.56Vを使用
----
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
atmega8 16pu | |
ISP | |
PC6 RESET | |
PB5 SCK | |
PB4 MISO | |
PB3 MOSI | |
ADC PC0 ADC0 | |
*/ | |
#define F_CPU 1000000UL // Clock Speed | |
#include <avr/io.h> | |
#include <avr/interrupt.h> | |
#include <util/delay.h> | |
/* DDRC |= (1 << PC0); */ | |
#define DSET(p,n) (DDR##p|=(1<<P##p##n)) | |
/* PORTC |= (1 << PC0); */ | |
#define PSET(p,n,d) \ | |
if ((d)) { \ | |
(PORT##p|=(1<<P##p##n));\ | |
} else { \ | |
(PORT##p&=~(1<<P##p##n));\ | |
} | |
volatile unsigned char v; | |
int | |
main(void) | |
{ | |
unsigned char j; | |
// port c output setting | |
DSET(B,0); | |
DSET(B,1); | |
DSET(B,6); | |
DSET(B,7); | |
DSET(D,4); | |
DSET(D,5); | |
DSET(D,6); | |
DSET(D,7); | |
ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR); | |
// ck/8 | |
ADCSRA = (1<<ADEN) | (0<<ADSC) | (1<<ADFR) | (1<<ADIE) | | |
(1<<ADPS2)| (1<<ADPS1)| (1<<ADPS0); | |
ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADIE) | | |
(0<<ADPS2)| (1<<ADPS1)| (1<<ADPS0); | |
sei(); | |
v = 0; | |
while (1) { | |
j = 0; | |
PSET(B,0,(v&(1<<j))>>j);j++; | |
PSET(B,1,(v&(1<<j))>>j);j++; | |
PSET(B,6,(v&(1<<j))>>j);j++; | |
PSET(B,7,(v&(1<<j))>>j);j++; | |
PSET(D,4,(v&(1<<j))>>j);j++; | |
PSET(D,5,(v&(1<<j))>>j);j++; | |
PSET(D,6,(v&(1<<j))>>j);j++; | |
PSET(D,7,(v&(1<<j))>>j);j++; | |
_delay_ms(10); | |
} | |
return 0; | |
} | |
ISR(ADC_vect) | |
{ | |
v = ADCH; | |
} |
----
で、実験結果。
- PINフォトダイオードのアルミ遮蔽が不十分らしく太陽光があたると電圧低下する様子
- →簡易照度計完成(アレ!?)
- →AD変換はできてるっぽい
- やはり手を近づけるとLEDがチラチラする
- →静電気に弱し
- マントルを近づけるとチラチラするものの静電気のせいかどうか判別不能
ふーむ。PINフォトダイオードのアルミ遮蔽をしっかりやって再実験の必要がありそうだ。
0 件のコメント:
コメントを投稿