やっと、いろいろ思い出してきて、PWM制御まできました。
とりあえず、PD6(OC0A)にLEDを接続しました。
タイマー0をPWM用に使用して、以下のプログラムを動作させてみます。
#include <avr/io.h>
#define LED_SET DDRD |= 0b01000000
void wait( long t ) // 10ms単位での時間待ち
{
TCNT1 = 0;
while( t-- > 0 )
{
while( TCNT1 < 78 );
TCNT1 = 0;
}
}
int main( void )
{
LED_SET;
TCCR1B = 0x05; // プリスケーラ1024分周
TCNT0 = 0x00;
TCCR0A = 0b10000001;
TCCR0B = 0b00000001;
OCR0A = 0xff;
wait(100);
OCR0A = 0xA0;
wait(100);
OCR0A = 0x80;
wait(100);
OCR0A = 0x40;
wait(100);
OCR0A = 0x10;
wait(100);
OCR0A = 0x00;
}
最初は明るく光っていたLEDがだんだんと暗くなり、消えます。