2月 112006
ついでに。atmega8というよく使うマイコンでのa/d converterのコードを張っておく。avr-gcc用。でもそろそろmega88に移行かな
sbi()cbi()マクロ使ってます。
この関数2つを適当にコピペして
/* ADコンバータ設定 */
void adc_init(void){
ADCSR =_BV(ADEN)|_BV(ADSC)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0)|(0<<ADFR);
// A/D変換許可、1回目変換開始(調整)、分周率2、連続変換しない
}
/* ピンを指定してAD変換 return 0-1023 */
int adc_convert(char pin){
int ad;
ADMUX = pin; // AD変換入力ピン
cbi(ADCSR,ADIF);
sbi(ADCSR,ADSC);
loop_until_bit_is_set(ADCSR,ADIF);
ad = ADCL;
return ad += (ADCH<<8); // 上位2bit取得
}
main()ではこんな感じで。
int main(void){
adc_init();
int ad;
ad = adc_convert(0); // ADC0でAD変換
}
ちなみに、adc_init()でAD変換の速度を最速にしてます。ADPS2,1,0のa/d変換分周率指定で変えれる。分周率が大きいほど遅い。
HERO’S Download データシートより