ここを参考にしてコード書いた。
http://forum.arduino.cc/index.php/topic,41964.0.html
Timer1が16bitなのでこれを使えば良いと言っている。
PWMはどれでも10bitモードが使えるのかな?
#define ledPin 9 void setup() { /**********************************************************************************/ // Set pwm clock divider /**********************************************************************************/ TCCR1B &= ~(1 << CS12); //CS12を0にする TCCR1B |= (1 << CS11); //CS11を1にする TCCR1B &= ~(1 << CS10); //CS10を0にする //CS10 CS11 CS12 = 0 1 0 => プリスケーラ8分周 /**********************************************************************************/ // Set pwm resolution to mode 7 (10 bit) /**********************************************************************************/ TCCR1B &= ~(1 << WGM13); // Timer B clear bit 4 TCCR1B |= (1 << WGM12); // set bit 3 TCCR1A |= (1 << WGM11); // Timer A set bit 1 TCCR1A |= (1 << WGM10); // set bit 0 // WGM 10 11 12 13 = 1 1 1 0 => 10 bit fast PWM pinMode(ledPin, OUTPUT); } void loop() { analogWrite(ledPin, 500); }
クロックのレジスタCS10 CS11 CS12が 0 1 0 だから
プリスケーラより8分周した値がクロックとなる。
また10bitのPWMだから、PWMの波形が一周するのに10bit=1024階調あるので
PWMの周期は
1 / 16MHz(Arduinoの外部発振器周波数) x 8 x 1024 = 約 0.5 ミリ秒
オシロスコープで波形を確認すると、そのようになっていた。