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;
		}
    }
}

思ったよりは楽に書けた。