PICマイコンとスイッチを使用し、LEDの明るさを変更します。
次のようなステップになります。
- 必要なパーツを揃える
- ブレッドボードに回路を作成する
- C言語でプログラムを作成する
- MPLAB X IDEでプログラムをPICに書き込む
- PICをブレッドボードに取り付けてLEDを点灯させてスイッチを押す
1. 必要なパーツを揃える
必要なもの
- PICkit3 * 1 Amazon ANBE PIC プログラミングキット PICKIT3互換品 PIC マイコン ライター
- PIC16F84A * 1 秋月電子通商 PIC16F84A-20I/P
- LED * 1 秋月電子通商 5mm黄色LED OSYL5113A
- 抵抗 300Ω * 1 秋月電子通商 カーボン抵抗 1/4W 300Ω(100本入)
- 抵抗 10kΩ * 1 秋月電子通商 カーボン抵抗 1/4W 10kΩ(100本入)
- セラロック 20MHz * 1 秋月電子通商 セラミック発振子 (セラロック) コンデンサー内蔵タイプ 20MHz
- タクトスイッチ * 1 秋月電子通商 タクトスイッチ (黒色)
- ブレッドボード * 1 秋月電子通商 ブレッドボード EIC-801
- ジャンパワイヤー * n 秋月電子通商 ブレッドボード・ジャンパワイヤセット
- ブレッドボード・ジャンパーワイヤ * n 秋月電子通商 ブレッドボード・ジャンパーワイヤ 14種類 × 10本
- 電池ボックス * 1 秋月電子通商 電池ボックス 単3×3本
- クリップ付きコード * 2 秋月電子通商 小型クリップ付コード 5色 45cm 5本入
補足
- 参考資料 PIC16F84A Documents
2. ブレッドボードに回路を作成する
PIC16F84AのPORT Bは内部にプルアップ抵抗を持っていますが、今回はPORT Aを使用するため外部にプルアップ抵抗を配置します。
回路図を参考にブレッドボードに回路を作成します。
回路図
スイッチが押されていない状態ではRA0は電源とつながるになるため、RA0は1になります。
スイッチが押された状態ではRA0はグラウンドとつながるため、RA0は0になります。
2. MPLABのプロジェクトを作成する
前回と同様にプロジェクトを作成します
名前は、pic_0004_led_brightness
とします。
3. C言語でプログラムを作成する
軽く調べてみたところ、LEDの明るさを変更するには2つのやり方がありそうです。
- LEDに流す電流値を変える
流れる電流が大きいほど明るくなり、小さいほど暗くなります。
つまり、抵抗値を小さくすると明るくなり、大きくすると暗くなります。 - LEDを点灯している時間を変える
点灯・消灯を高速で切り替えた場合、人間の目は点滅しているかどうかがわかりません。これを利用します。
次に例を示します。- 点灯・消灯・点灯・消灯は半分の明るさになります。
- 点灯・消灯・消灯・消灯は4分の1の明るさになります。
今回は2を採用して明るさを変更ます。
点灯・消灯の切り替えが遅いと点滅していることがわかってしまいます。そこで、切り替えの間隔は2[ms]にします。
また、LEDの明るさを変更するにはスイッチを使い、スイッチが押されるたびに明るさを変更します。
Source code
1 |
|
解説
まずは明るさの表現方法について説明します。
ソースコード中のL8
は全灯、L4
は半分の明るさ、L0
は消灯です。
例えばL4
の0x55を2進数で表すと、0101 0101となります。これは点灯と消灯を交互に切り替えることを表します。
まずは、0ビットシフトし最下位ビットの1を読み込みます。1であるため点灯です。
続いて、1ビットシフトし最下位ビットの0を読み込みます。0であるため消灯です。
これを繰り返します。7ビットシフトしたあとは0ビットシフトに戻ります。
続いてスイッチが押されたときの処理についてです。
スイッチが押されるたびにindex
を1加算していき明るさデータの参照先を変更します。
データの最後まで進んだらindex
を0にして先頭を参照します。
4. MPLAB X IDEでプログラムをPICに書き込む
省略
5. PICをブレッドボードに取り付けてLEDを点灯させてスイッチを押す
省略