PB1から出力されるPWM波をサーボの信号端子に入力する。
#include <avr/io.h> #include <util/delay.h> int main(){ TCCR1A |= (1 << WGM11); TCCR1B |= (1 << WGM12) | (1 << WGM13); // 16ビット、Fast PWMモード TCCR1B |= (1 << CS11); // 8MHzを8分周してカウント ICR1 = 20000; // TOP値、20000usec TCCR1A |= (1 << COM1A1); // OC1Aピン(PB1)でPWM int incre = 20; // パルス幅の増分(または減分) OCR1A = 1500; // パルス幅の初期値 DDRB |= (1 << PB1); // 当該ピンのIOをOUTにしてPWMを出力 while(1){ // パルス幅をじりじりと振る。 if((OCR1A < 1000) || (2000 < OCR1A)){ // 設定した振り幅を超えたら向きを逆にする。 incre = -incre; } _delay_ms(20); OCR1A += incre; } return 0; }