出力はOC0A(PD6ピン)を使います。
まず、DDRDレジスタでPD6は出力にしておきます。
TCCR0A、TCCR0Bの両レジスタで、Fast PWMモード(mode3)、Non-inverting出力、クロック(CLKIO/8)を選択します。OCR0Aには閾値、TIMSK0で割り込みは禁止しています。
この場合、タイマ値(TCNT0)は0~0xFFの間をカウントアップし、値がOCR0Aを以下だとOC0Aは1、OCR0Aを超えると0になります。
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
void pwm(void)
{
int i;
// OC0A = PD6
DDRD=0xff;
TCCR0A = 0b10000011; // Non inverting, Fast PWM (mode=3)
TCCR0B = 0b00000010; // Fast PWM, clk = CLKIO/8
OCR0A = 0x0;
TIMSK0 = 0x0;
for(;;) {
for(i=0; i<0x80; i++) {
OCR0A = i;
_delay_ms(20);
}
}
}
int main()
{
pwm();
}
0 件のコメント:
コメントを投稿