サーボの駆動 / じりじりと左右に振ってみる

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