0.001s逆に、sからmsに変換するにはどうしたらよいでしょうか。先ほどと逆に1000で掛け算すればOKです。この関係は、msとμsでも同じです。単位変換の方法をまとめると、以下のようになります。それでは、先ほどのPWM制御のプログラムに戻ります。プログラムでは、0.0025s待ちがあります。2.5msとなります。この計算方法ですと、少数が出てきてしまいますので暗算しづらいですよね。そこで、普通は以下のように暗算します。200の「1s」を最初に「1000ms」に直しておきます。200」に直しておきます。200」を計算します。この結果の単位はmsですので、「5ms」ということがわかります。500」に直してから計算します。答えは「2ms」です。PWM制御プログラムということで、1秒間に200周期の繰り返し、デューティー比が50%の場合、プログラムは以下のようにすればOKそうです。__delay_ms(2.5);}残念ながらこのプログラムをビルドするとエラーになります。いうのは、「__delay_ms()」関数の引数は自然数である必要があります。少数は受け付けてくれません。すればいいかというと、実はこの関数のμs版がありますので、それを使用します。「__delay_us()」という関数です。「__delay_」のあとは、ローマ字の「u(ユー)」「s(エス)」です。本当は「__delay_μs()」というような関数があればもっとわかりやすいですが、「μ」という文字は1バイト文字セットの中にはないため、「μ」に近い1バイト文字のローマ字の「u」が使用されています。上のプログラムを「__delay_us()」関数を使用して正しく動作するように書き直すと以下のようになります。2.5msをμsに直すには1000をかければいいんでしたよね。__delay_us(2500);}それでは、実際に動作するプログラムを書きましょう。最初にPIC12F1822の新規プロジェクトを作成します。プロジェクト名は「PWMControl」にしましょう。新規プロジェクトの作り方は、基礎編第17回を参照してください。新規プロジェクトを作成したら、新規メインファイルを作成し、以下のプログラムをコピペします。return;}ファイルを保存したら、ビルド、PIC12F1822に書き込み、動作させてみてください。元の明るさを忘れてしまったので、果たして暗く光っているのかわからない、ということもあるかもしれません。それでは、デューティー比を10%にしてみましょう。1秒間に200周期の繰り返し、デューティー比が10%の場合は以下のような制御になりますよね。ご自分でも計算してみてください。このように制御流には、while文のところを以下のように書き換えればOKです。}このようにプログラムを変更して、再度、ビルド、書き込み、動作させてみてください。今度はかなりLEDが暗く光ったと思います。PWM制御は、周期とデューティー比、時間計算ができればかなり簡単ですよね。言いたいところですが、実はこのあと大変なことになります。大変になる前に、ここまでの知識を定着させるために、プチチャレンジ課題をやってみましょう。プチチャレンジ課題LEDをPWM制御すれば、LEDの明るさを調整できることがわかりましたが、上のプログラムですと、暗くなったのか、なんとなくわかりづらいですよね。いうことで、いくつかプチチャレンジ課題にトライしてみましょう。1秒ごとに明るさを変えてみる1秒ごとにLEDの明るさを変えてみましょう。PWM制御の周期は5ms(=1秒間に200周期)にします。動作としては、「1秒間デューティー比80%で点灯、1秒間デューティー比20%で点灯」という動作をずっと繰り返すプログラムを作成して、動作させてみてください。明るさを10段階制御するデューティー比が違うとどのくらい明るさが変わるのかを確認するために、デューティー比を10%から100%まで変えるプログラムを作ってみましょう。周期は5ms、動作としては、「1秒ごとにデューティー比を100%から10%まで、10%ずつ減らしていく」という動作をずっと繰り返すプログラムを作成して、動作させてみてください。いずれも今までの知識と基本的なC言語の知識があれば難しいところはないと思いますが、どうしてもわからない場合はコメント欄かお問い合わせフォームでご質問ください。