今回はスイッチ回路を追加します。今回は回路を検討します。
今回の説明
PICマイコン電子工作入門の基礎編は、次のステップで説明しています。
この記事の説明は「❹ ベース回路にスイッチを追加」のうち、「スイッチ回路の検討」を説明します。
- LEDを電池と抵抗のみで光らせる回路を組み立てる
PICマイコンの回路を組み立てる前に、ブレッドボードの取り扱いに慣れておくことにします。電池、抵抗、LEDのみを使って、ブレッドボード上に回路を組み立ててLEDを光らせてみます。ここでは電池、抵抗、発光ダイオードの回路記号と回路図の説明をして、回路図からブレッドボードに組む方法を説明します。まずはブレッドボードに慣れましょう! - PICマイコンのベース回路を組む
PICマイコンのはじめの一歩の回路は、LEDを1秒に1回光らせるだけの回路です。
この回路をブレッドボードに組み立てます。 - プログラムを作る
LEDを1秒に1回光らせるプログラムを作成します。 - PICマイコンに書き込んで動作させる
作成したプログラムをPICマイコンに書き込んで動作させてみます。 - ベース回路にスイッチを追加 ⬅︎ 今回
LEDの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。
これまではLEDを光らせる、という出力制御をしましたが、今度はPICマイコンで外部からスイッチの信号を入力する方法を習得します。 - ベース回路にブザーを追加
スタートスイッチ付きの、1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。
スイッチ追加
今までの記事では、PICマイコンのピンに接続したLEDの制御方法を説明してきました。
つまり、PICマイコンのピンの出力電圧の制御をしてきたわけです。
これだけの知識でもいろいろなものが作れそうですよね。
これから、さらにできることを広げるためにスイッチを追加します。
今までの回路では、電源をつなげるといきなり点滅を開始してしまっていました。
これからスイッチを追加して、次のような動作をするようにしてみます。
- 電源を入れると、LEDが点灯する
- スイッチを押すと、LEDが点滅を開始する
- 点滅は永遠繰り返す
今回の記事では、回路にスイッチを追加する方法を検討して、ブレッドボードにスイッチ回路を追加します。
次回の記事では、スイッチの状態を検知してLEDの点滅を開始するプログラムを作成します。
PICマイコンへのスイッチ信号の入力方法
PICマイコンの入力制御のプログラムのイメージ
PICマイコンのピンを出力ピンに設定して、その出力制御する方法は簡単でしたよね。
例えばRA5ピンを出力ピンに設定した場合、RA5ピンを0Vにしたければ プログラムでLATA5=0;
と書きました。また、5V(=電源電圧)にしたければLATA5=1;
と書けば制御できました。
入力もこれに似ているんです。
例えば、RA4ピンをデジタル入力ピンに設定した場合、RA4ピンが0Vの状態のときはプログラム上では変数のRA4
が0になり、RA4ピンを5V(=電源電圧)にするとRA4
が1になります。
なお、デジタルで読み取る場合、0Vと5Vの中間の値にすると安定してピンの状態を読み取ることができません。
そこで、なるべくどちらかの電圧に近くなるように電子回路を設計します。
スイッチの接続回路の検討
それでは現在の回路にスイッチを追加していきましょう!
説明の都合上、RA4ピンにスイッチの回路を接続する例を説明しますが、あとで接続するピンを変更します。(理由は説明の途中で説明します)
それでは、RA4ピンの電圧をスイッチで制御できるように回路を検討していきましょう!
うまくいかない接続方法
(最初から怪しいタイトルですみません…)
スイッチを接続した回路で、スイッチをONにしたときにRA4ピンが5V、スイッチをOFFにしたとき0Vになるように設計すればOKです。
スイッチをONにしたとき、RA4が5Vになればよいので、以下のような回路が思いつきますよね。
簡単ですし、これでよさそうな気がしますが、残念ながらこの回路ではうまく動作しないんです。
確かに、スイッチをONにしたときRA4ピンが電源のプラス側に接続されますので、5Vになります。これはOKです。まったく問題ありません。
問題はスイッチをOFFにしたときです。
回路をよく見ると、スイッチをOFFにしたときはRA4ピンがどこにも接続されていませんよね。
電子回路では「どこにも接続されていない」=「0V」ではありません。
この回路に限らず、この性質はすべての電子回路に当てはまるので注意が必要です。
どこにも接続されていないピンの電圧が0Vにならないのは、外部の電気的な雑音などが原因で、どこにも接続されていない金属の電圧は不安定になるためです。
上の回路でスイッチがOFFのとき、RA4ピンはどこにも接続されていない状態になりますので、RA4ピンの電圧は不安定になります。
ということは、スイッチがOFFのときは電源電圧のマイナス側(0V)に接続しておけばよさそうですよね。
そこで、次の回路を考えてみました。
こうすればスイッチがOFFのときRA4ピンは0Vになります。
でも、残念ながらこの回路も問題があります。
この回路でスイッチをONにすると、電源のプラス側とマイナス側が直接接続されることになります。
つまり、次のように電源がショートしてしまうんです。
「どこにも接続されていない状態を作らない」かつ「スイッチONのとき5V、OFFのとき0V」かつ「電源がショートしない」という課題を同時に解決する必要があります。
なんだか解決策はなさそうな気もしますが、この問題を解決するいい方法があるんです。
プルダウン抵抗
その方法とは、次のようにスイッチをONにしたときに、ショート状態にならないように抵抗を入れる、というものです。
この回路で、なぜ先ほどの問題が解決できるのか確認していきます。
抵抗は電気(電流)を通しにくくする電子部品です。
先ほどの抵抗を接続しない回路では、ショートしてしまいましたが、このように抵抗を接続すると、スイッチをONにしても電流が流れにくくなり、ショート状態にはなりません。
でも、ちょっとあれっ?て思われる方もいらっしゃるかもしれません。
抵抗をつければスイッチONにしたときは先ほどのショートの問題は解決できますが、スイッチをOFFの状態のとき、RA4ピンは抵抗を通して電源のマイナス側(0V)に接続されています。
抵抗を入れてしまうと、直接接続ではないので、GP4ピンは0Vにならないのではないか?、と思われた方もいらっしゃるかもしれません。
このシリーズ記事ではオームの法則を説明していないので、数式による正確な説明は難しいのですが、簡単に説明すると、抵抗は電流が流れていないときは抵抗の両端の電圧の差はゼロになるためです。
言葉ではわかりづらいので、回路図で確認していきましょう!
スイッチがOFFのとき、抵抗の両端の電圧差はゼロですので、抵抗の片側が電源のマイナス側(0V)に接続されていて、抵抗のもう片側も同じ電圧になるので0Vになり、結果としてRA4ピンも0Vになります。

スイッチがONの場合、RA4ピンは電源のプラス側(5V)に直接接続されますので、RA4ピンの電圧は5Vになります。(このとき、抵抗には電流は流れ、抵抗の両端の電圧差は5Vになります)

ここで、とても重要な用語があります。
このように接続する抵抗のことを「プルダウン抵抗」と呼びます。(電子回路界隈では非常に重要な考え方ですので、ぜひここで覚えておいていただければと思います!)
入力のピンが接続されていないという状態にならないように、ピンをマイナス側(下側)に引っ張っておく、という意味合いで「プルダウン」と呼んでいます。(プルは引っ張る、ダウンは下という意味です)
スイッチを接続する回路はこれでOKですが、もう少し深掘りします。
プルアップ抵抗
今まで「プルダウン抵抗」の説明をしてきましたが、「ダウン」ということは「アップ」もありそうですよね。
実は「プルダウン抵抗」と対になる形で、「プルアップ抵抗」という考え方もあります。
そこで、「プルアップ抵抗」はどのようなものか見ていきましょう!
最初に回路図を確認します。比較のために先ほどのプルダウン抵抗の回路を並べて確認してみましょう。

右側の「プルダウン抵抗」を接続した回路では、スイッチONのときにRA4ピンが5V、スイッチOFFのときにRA4ピンが0Vになりました。
「プルアップ抵抗」の回路では、この電圧の値が逆になります。
つまり、スイッチONのときはRA4ピンが0V、スイッチOFFのときはRA4ピンが5Vになります。(先ほどと同じような考え方になりますので、スイッチがONとOFFのときで電圧がどのようになるか確認していただければと思います)
実際のプログラムは次回の記事で詳しく説明しますが、RA4ピンの値をプログラムで読み取ると、0Vのとき変数RA4
の値は0、5Vのときは1になります。
つまり「プルアップ抵抗」の回路では、スイッチONのときRA4ピンは0Vになるので変数RA4
は0、スイッチOFFの時1になります。
スイッチONが0、スイッチOFFが1というのは逆なような気もしますよね。
ちょっと脇道に逸れますが、スイッチONの時が1、OFFの時が0、という方が自然ですよね。
この「0」がOFF、「1」がONというのは世界的に共通の感覚のようです。
例えばPCに限らず、家電製品、その他いろいろな製品の電源スイッチを見ると、次のようなデザインのものが多いです。

これはノートPCの電源スイッチなんですが、このように円と棒が書かれているスイッチを見かけることがあると思います。
実はこれ、数字の「0」と「1」をデザインしたものなんです。
このデザインでは、「0」が「OFF」、「1」が「ON」をイメージしているそうです。
このように、感覚的には「0」が「OFF」、「1」が「ON」って感じですよね。
そのため、プルアップ抵抗を接続した回路では逆になるのでプルダウン抵抗を接続した回路の方がわかりやすい気もします。
でも、実際には「プルアップ抵抗」を接続したケースの方が多くみられます。
そこで、「プルダウン抵抗」「プルアップ抵抗」両方とも動作が理解できるようにしていただければと思います。
プルアップ抵抗・プルダウン抵抗の抵抗値
このプルダウン抵抗やプルアップ抵抗はどのくらいの値にしたらよいのでしょうか?
実はピッタリこの値、と決まっているわけではないんです。
よく使われるのは10kΩの抵抗です。
実際には5kΩ〜数十kΩの抵抗も使われるのですが、これより小さい値や大きい値でも動作します。
でもこの程度の抵抗が使われるのには理由があります。
抵抗の値が小さいと、スイッチをONにしたときに電流が多く流れてしまいます。つまり電力を多く使ってしまう、というデメリットがあります。
抵抗の値を大きくすると電流は少なくできますが、今度は電気的なノイズにに弱くなる、というデメリットが出てきてしまいます。
抵抗の値を大きくするとノイズに弱くなる、というのはなかなかイメージが難しいと思います。
ちょっと乱暴な考え方ですが、このように考えてみてください。
RA4ピンに何も接続していない、というのは仮想的には「値が無限大の抵抗を接続している」ということになります。
つまり「抵抗の値をどんどん大きくしていく」ということは「抵抗を接続していない状態に近づいていく」ということになります。
何も接続しない状態では、ノイズの影響を受けて電圧が不安定になるため、「抵抗の値をどんどん大きくしていく」と「どんどんノイズの影響を受けやすくなる」というイメージです。
スイッチ接続回路を作成
これから、スイッチの回路を作成していきますが、「プルアップ抵抗」の回路で進めます。(なんで?という気がしますが、後半でその理由が判明します)
RA4ピンにプルアップ抵抗をつけたスイッチの回路は次のようになります。
この回路の赤色の接続の部分は、今まで作った回路図に存在するのですが、お気づきでしょうか?
実は、次の回路の赤色の部分と同じなんです。形は違いますが、電気的な接続は全く同じです。
この部分は、プログラムを書き込むときのためのPICkit接続回路の一部です。
「プログラムを書き込むときのための」ということは、通常動作中はこの部分は使用されていません。
そこで通常の動作中は、この抵抗をスイッチのプルアップ抵抗として考えて、次のようにスイッチを接続することができます。
ちょっとわかりづらいですが、この赤い部分の回路は次のように動作します。
スイッチがOFFの場合は、プログラムを書き込むためのPICkit接続回路になっています。つまり、スイッチOFFのとき、プログラムを書き込むことができます。
次に、通常動作中(プログラム動作中)は、RA3ピンをデジタル入力ピンとして使用して、スイッチ状態を読み取る、ということができます。
なお、ほとんどのPICマイコンは、4番ピンがプログラム書き込み用のピン(MCLR/VPPピン)であると同時に、入力ピンとしても利用できるようになっています。このピンは入力専用ピンとなっていますので、スイッチを接続して使用するケースが多いです。
ということで、最初はRA4ピンでスイッチの接続回路を説明してきましたが、すでにRA3ピンにプルアップとして使用できる抵抗が接続されていますので、スイッチはRA3ピンを使用することにします。
繰り返しになりますが、RA3ピンはプルアップ抵抗を接続したスイッチ回路になりますので、RA3ピンの電圧は、スイッがOFFのときに5V、ONにときに0Vになります。ちょっとややこしいので注意しましょう。
スイッチを接続した完成回路図は以下のようになります。
それでは、この回路図の接続になるようにブレッドボードにスイッチを追加しましょう!
タクトスイッチの内部接続
今回はタクトスイッチ、というものを使用します。実物はこのようなものです。
なんかドアップで撮影したら、今にも歩き出しそうな感じになりました。
このスイッチは内部でどのような接続になっているのかわかりづらいです。
見分け方は「ピンの配置」がポイントになります。
タクトスイッチを上からみるとこのようになっています。ピンは1辺に2つ、向かい合う2辺に合計4つ付いています。
タクトスイッチ内部の配線は、スイッチOFFの状態では次のような接続になっています。
スイッチ部分を押すと、押している間だけ、以下のように配線が接続されます。
ブレッドボードに差すときはスイッチの向きに十分注意してくださいね。
どのスイッチがOFFの状態でも接続されているピンがありますので注意します。
ブレッドポードにスイッチ回路追加
さて、いよいよブレッドボード上に先ほどの回路図を作成していきます。
以下に実装例を示しますが、この実装例が唯一の正解ではありません。他にもいろいろと実装方法があります。
ただ、あとで圧電ブザーも追加しますので、スイッチはなるべくブレッドボードの端に配置しておきましょう。
スイッチ回路で追加した部分はピンク色枠内です。PIC12F1822のRA3(4番ピン)からスイッチの片方のピンに黄色線で接続、スイッチのもう片方を青色線で電源のマイナス側に接続しました。
実際に実装した画像です。接続の参考にしてみてください。
次回はスイッチの状態(PICマイコンのピンの状態)を読み取って制御するプログラムを作成します。
更新履歴
日付 | 内容 |
---|---|
2016.11.13 | 新規投稿 |
2018.11.24 | ブレッドボードイラスト&画像差し替え |
2025.4.13 | 説明順序変更&プルダウン抵抗・プルアップ抵抗の説明補足 |
初めまして。いつも頭を抱えながら楽しく拝見しております。
LEDを電池でつなぐ程度でしたが、このサイトを読むうちに、
私にもできそうな妄想にかられて一式揃えてしまいました。
ブログを参考に何とかタイマー割り込みでLED点滅までできました。
ありがとうございます。
よろしければ教えていただきたく、長文ですが質問させてください。
16F 1827にプルアップでRA5に入力させて
—main()前略
LATA1 = 0;
LATB4 = 1;
while(1){
if(RA5==0){
LATA1=1;
}
else{
LATA1=0;
}
}
で、スイッチを押している間だけ、LATA1のLEDが点灯するつもりだったのですが
起動すると両方のLEDがついてしまい(RA5判断できていない?)、
さらにスイッチを押すと両方のLEDが消灯(汗
離すとまた両方が点灯するというとんでもない状態です。
ただ、RA5に関係せずタクトスイッチにもマイナスでしか繋がっていないLATB4が
一緒に消えたり点いたりすることが不思議なのです。
プログラムは簡単なつくりですし、初歩的なミスだと思うのですが
回路の組み方やPICの設定でこんな現象が起こるのでしょうか。
画像が添付できず無茶な質問ですが、ここ数日あれこれいじって
全く分からず困っております。
よろしければお願いします。
プログラムはwhile文がずっと繰り返されますが、while文の中でLATB4は変更していませんので、LATB4の点灯状態が変わる、というのかなかなか原因がわからないです。
どのような回路を作成されているかわかりませんが、プログラムとしては、LATB4は点灯したまま、LATA1はRA5のスイッチが押されているときに点灯、離すと消灯、という動作になっています。
ただ、このプログラムで両方のLEDが制御できてしまっていのは接続の問題もあるのかもしれません。回路接続の画像があればある程度わかると思います。
解決しましたか?初心者です。同じ経験をしております。
”16F 1827にプルアップでRA5に入力させて”
が実装できていないと思われます。
回路の電圧を測定すると、スイッチoffのとき、RA5 0V、onのとき5Vになります
同じ接続方法であるとして、16F 1827の場合もルアップできるのでしょうか?
自己解決
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
教科書のプログラムに上記の差分があり、OFF にしたら設計とおりの動きになりました。
情報どうもありがとうございました。
LVP=OFFにしたら動作した、ということで、LVPが関係しているようですね。
このシリーズの記事のMPLABX IDEがかなり古いバージョンですのでいずれ全面的に書き換える予定です。その時はこの件も確認いたします。
初めまして。以前からマイコンに興味があったのですが、習得に何度も挫折していました。今回このサイトに出会い、再度挑戦との意気込みで買い物リストの部品も購入し取り組んでいます。
解らないところはコメント欄にて質問を受け付けていただけるとの記載がありまあしたので書かせて頂きます。
このページにある、「GP4ピン」とは「RA4ピン」のことなんでしょうか?
勘違いした的外れの疑問なのかもしれませんが、よろしくお願いします。
輝さま、
ご質問どうもありがとうございます。ぜんぜん的外れの質問ではないですよ! 自分も初めてPICマイコンを知った時は混乱してました。
結論としては、GP4もRA4も同じです。この背景と補足情報をご説明します。
PICマイコンに限らず、一般的なマイコンはプログラムで設定することにより、同じピンでもいろいろな機能にすることができます。
例えばPIC12F1822の4番ピンは、デジタル入出力以外に、アナログ入力、タッチセンサ、シリアル通信のデータ送信ピンなど、プログラムで指定するといろいろな機能にすることができます。
例えば、PIC12F1822の4番ピンをデジタル入出力ピンに設定した場合、このピンを「RA4」と呼んでいます。また、タッチセンサに設定した場合は「CPS3」(CPS4ではありません)と呼んでいます。
このようにマイコンのピンを指定する方法として、物理的位置の「4番ピン」と呼ぶ以外に、「RA4ピン」「CPS3ピン」と言う別名で呼ぶ場合もあります。この記事では、物理的位置や別名(機能名)で呼んだりしています。そのため、同じ4番ピンのことを「GP4」と呼んだり「RA4」と呼んだりしています。
ご参考に、PIC12F1822の場合、各機能に対してそれぞれのピンはどのように呼ばれているかデータシートを以下のURLにアップしました。
http://tool-lab.com/pic12f1822-datasheet-pin-name/
なお「GP4」と言う呼び名はこの表には出てきませんが、「RA4」と同じ意味で使用しています。「GP」は、General Purpose I/O(汎用I/O)の意味です。
PICマイコンが使えるようになると、ArudinoやRaspberry Piとは違った電子工作ができるようになりますので、ぜひ諦めずに一緒に頑張りましょう! 何か不明点がありましたらまたご質問いただければと思います。
早々のご教示、ありがとうございます。
理解することが出来ました。
昨夜、基礎編の第27回までトレース出来ました。
PICkit3の書き込みで手間取りましたが、ネット検索で色々試しているうちに書き込めるようになり意図したように走っています。書き込み時のエラーは
Target Device ID (0x0) is an Invalid Device ID. Please check your connections to the Target Device
Target device was not found (could not detect target voltage VDD). You must connect to a target device to use PICkit 3.
等でした。
どうやってエラーを回避できたのが未だ謎ですが (^^ゞ
お言葉に甘え、これからも
よろしくお願いします。