アナログコンパレーター / 実際に使ってみる
アナログコンパレーターについては、本書も含めて手持ちの図書には詳しい説明がなく、データシートを読むしかない。
ここでは、ADCペリフェラル / 読み取るチャンネルを切り換える -と同じようなことをアナログコンパレーターで再現してみる。2値の比較だけなら、ADコンバーターを動かすよりも当然遙かに簡単である。
#define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> ISR(ANALOG_COMP_vect){ // コンパレーター出力がトグルしたら、 /* if(bit_is_set(ACSR, ACO)) PORTB = 0xF0; // それがHへの変化であれば何かをして、 else PORTB = 0x0F; // それがLへの変化であれば何かをする。 */ PORTB = ~PORTB; // そのたびに何かをする。 } int main(){ DDRB = 0xFF; PORTB = 0xF0; // コンパレーター割り込みを有効化。 // コンパレーター出力のトグル時に割り込む(これがデフォルトなので特に指定しない)。 ACSR |= (1 << ACIE); // コンパレーター端子のディジタル入力を無効化して省電力化。しなくてもよい。 // DIDRはDigital Input Disable Register。 DIDR1 |= (1 << AIN1D) | (1 << AIN0D); sei(); while(1); return 0; }