今回は、基礎編で製作したタイマープログラムにPWM機能を実装します。前回までに、PWM制御方法を二通り確認しました。一つは、__delay_us()を使用して時間制御を含めて全てプログラムで制御する方法、もう一つは、PICマイコンのPWM制御機能を使って制御する方法です。タイマープログラムにPWM機能を実装するのは、ちょっと無理矢理感がありますが、そこをなんとか実装してみようと思います。実装は「タイマーで時間が来たらブザーを鳴らすと同時にLEDをスムーズに点滅させる」という内容にします。基礎編で製作したタイマーは、時間が来るとブザーを鳴らし、LEDを点灯させる、という動作でした。この「LEDを点灯させる」という部分を「PWM機能を使ってスムーズに点滅させる」という動作に変更します。実装仕様せっかくPICマイコンのPWM制御方法を確認しましたので、その方法で実装します。実装仕様としては以下のように点滅制御させることにします。PWMの周期は1msLEDの明るさの制御は、デューティ比を5%〜100%の間で変えることにより行うデューティ比は1ms毎に0.1%ずつ変える。5%→100%まで1ms毎に0.1%ずつ大きくし、100%→5%まで1ms毎に0.1%ずつ小さくする、という動作を繰り返すなお、デューティー比は0%〜100%で変化させても良いと思います。5%から開始しているのは特に意味はありませんので、一度動作させてみてご自分の好きな点灯パターンで調整してみてください。プログラム前回、PWM制御方法を詳しく説明しましたので、この動作プログラムは特に詳しい説明は必要ないと思います。return;}動作確認プログラムをビルドしてPICマイコンに書き込んで動作確認しましょう。ところで、LEDの明るさの変化をよくみると、確かにLEDの発光がだんだん明るくなったり暗くなったりしていますが、なんとなく、すぐに明るくなって、しばらく明るい期間が続き、急に暗くなる、というような動作に見えるかもしれません。これは、例えばデューティー比が50%の場合、確かに明るさは半分になっているはずなのですが、人間の目にはLEDの明るさが半分になったようには見えないためです。人間の目は明るい方の変化はそれほど感じませんが、暗い方の変化は敏感に感じるようになっています(数学的に説明すると、対数的な感度を持っていて、これは視覚だけではなく、聴覚も同じです)。LEDのPWM制御は1次関数でデューティー比を制御していますが、人間の目の感度は対数関数であるため、ズレが生じています。動作確認するとは言っても、目視では正しくPWM制御できているかわかりません。そこで、今回もオシロスコープ(電圧の波形の測定装置)でRA5ピンの電圧を確認しました。