AD変換とPWM
使ったマイコンはATTiny85。
やったこと
- 可変抵抗にかかる分圧された電圧をAD変換して取得
- 電圧値に応じてデューティ比を変えたPWMを出力
中身
#include <avr/io.h> #include <avr/sfr_defs.h> // _BV()用 void init_adc(){ ADCSRA=0b10000100; ADMUX=0x00; } void init_pwm(){ TCCR0A=0x23; TCCR0B=0x0A; TCNT0=0; OCR0A=122; OCR0B=96; } int main(void) { unsigned short a; DDRB=0xff; init_adc(); init_pwm(); while(1) { ADCSRA|=_BV(ADSC);//AD変換開始 loop_until_bit_is_set(ADCSRA,ADIF);//変換終了まで待つ a=ADCL;//下位8bit a+=ADCH<<8;//上位2bit a=(a>>3);//7bitに切り詰め(0-128) if(a>122){ OCR0B=122; }else{ OCR0B=a; } } }
思ったよりは楽に書けた。