第24回 スイッチ回路を設計する

今回はスイッチ回路を追加します。最初は電子回路の設計です。

目次

今回の説明

回路を完成させるために以下の順序で説明しています。このエントリの説明は(4)「ベース回路にスイッチを追加する」の部分になります。

  1. LEDを電池と抵抗のみで光らせる回路を組み立てる
    PICマイコンの回路を組み立てる前に、まずはブレッドボードに慣れておくことにします。電池、抵抗、LEDのみを使って、ブレッドポード上に回路を組んでLEDを光らせてみます。ここでは電池、抵抗、発光ダイオードの回路記号と回路図の説明をして、回路図からブレッドボードに組む方法を説明します。まずはブレッドボードに慣れましょう!
  2. PICマイコンのベース回路を組む
    はじめの一歩の回路は、LEDを1秒に1回光らせるだけの回路です。この回路をブレッドボードに組み立てます。
  3. プログラムを作る
    LEDを1秒に1回光らせるプログラムを作成します。
  4. PICマイコンに書き込んで動作させる
    作成したプログラムをPICマイコンに書き込んで動作させてみます。
  5. ベース回路にスイッチを追加する
    LEDの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。これまではLEDを光らせる、という出力制御をしましたが、今度はPICマイコンで外部から信号を入力する方法を確認します。
  6. ベース回路にブザーを追加
    スタートスイッチ付きの、1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。

スイッチ追加

今までずっとPICマイコンのピンに接続したLEDの制御方法を説明してきました。つまり、PICマイコンのピンの出力電圧の制御をしてきたわけです。これだけの知識でもいろいろなものが作れそうですが、さらにできることを広げるために今まで作ってきた回路にスイッチを追加してみます。

今までの回路は、電源をつなげるといきなり点滅を開始してしまっていましたが、回路にスイッチを追加して以下のような動作をするようにしてみましょう。

  • 電源を入れると、RA5ピンのLEDが点灯する。
  • スイッチを押すと、RA5ピンのLEDが点滅を開始する。
  • 点滅は永遠繰り返す。

ということで、今回は回路にスイッチを追加する方法、また次回はスイッチの状態を検知するにはプログラムをどのように変更すればよいかを確認します。

PICマイコンへのスイッチ信号の入力方法

PICマイコンのピンを出力ピンに設定して、その出力制御する方法は簡単でしたよね。例えばRA5ピンを出力ピンに設定した場合、RA5ピンを0Vにしたければ プログラムで LATA5=0; と書けばよく、5V(=電源電圧)にしたければ LATA5=1; と書けば制御できました。

入力もこれに似ています。例えばRA4ピンをデジタル入力ピンに設定した場合、RA4ピンを0Vにするとプログラム上では変数(レジスタ)のRA4が0になり、RA4ピンを5V(=電源電圧)にするとRA4が1になります。

なお、デジタルで読み取る場合、0Vと5Vの中間の値にすると安定しませんので、なるべくどちらかの電圧に近くなるように電子回路を設計します。

正確には、PIC12F1822の場合、ピンの入力が0と認識する電圧は、0V〜1Vぐらい、と幅があります。幅がありますが、電子回路の設計はなるべく0V、5Vになるように設計したほうが安定した作品を作ることができます。

それではベースの回路図にスイッチを追加していきましょう。説明の都合上、RA4ピンにスイッチの回路を接続する例を説明しますが、あとで接続するピンを変更します。理由は説明の途中で説明します。

ベースの回路ではRA4ピン(3番ピン)がまだあいていますので、RA4ピンにスイッチを追加してみます。

Pic bacic 24 ra4

スイッチの動作ですが、スイッチをONにしたときにRA4が5V、スイッチをOFFにしたときRA4が0Vになるように設計したいと思います。先ほど説明したように、スイッチをONにしたとき、RA4が5Vになればよいので、以下のような回路が思いつきますよね。

Pic basic 24 pullup 1

これでよさそうですが、残念ながらこの回路ではダメなんです。確かにスイッチをONにしたときRA4ピンが電源のプラス側に接続されますので、5Vになりますよね。これはOKです。

問題はスイッチをOFFにしたときです。回路をよく見ると、スイッチをOFFにしたときはRA4ピンがどこにも接続されていませんよね。電子回路では「どこにも接続されていない」=「0V」ではありません。

PICマイコンに限らず一般的な電子回路の入力部分は、電気的な雑音などが原因で、どこにも接続されていないとその入力電圧は不安定になります。そのためこの回路ではスイッチをONにしたときはいいのですが、OFFにすると不安定となってしまいます。

ということは、スイッチがOFFのときは電源電圧のマイナス側(0V)につなげておけばよさそうですよね。ということで、以下の回路を考えてみました。

Pic basic 24 pullupdown 2

こうすればスイッチがOFFのときGP4ピンは0Vになりますね。ただ残念ながらこの回路もダメなんです。理由ですが、スイッチをONにすると、電源のプラス側とマイナス側が直接接続されることになります。つまり電源がショートしてしまいます。

Pic basic 24 pullupdown 3

なんだか解決策はなさそうですよね。では、どうすればよいかというと、スイッチを入れたときにショート状態にならないように抵抗を入れます。こんな感じです。

Pic basic 24 pullupdown 4

LEDを光らせるところで確認しましたが、抵抗は電気(電流)を通しにくくする電子部品です。先ほどの抵抗を接続しない回路では、ショートしてしまいましたが、このように抵抗を接続すると、スイッチをONにしても電流が流れにくくなり、ショート状態にはなりません。

でも、ちょっとあれっ?て思われる方もいらっしゃるかもしれません。

抵抗をつければスイッチONにしたときは先ほどのショートの問題は解決できますが、スイッチをOFFの状態のとき、RA4ピンは抵抗を通して電源のマイナス側(0V)に接続されています。抵抗を入れてしまうと、直接接続ではないので、GP4ピンは0Vにならないのではなか、と思われた方もいらっしゃるかもしれません。

これは今までの説明では出てこなかったオームの法則を説明していないので、正確な説明は難しいです。なるべく簡単に説明すると、抵抗は電流が流れていないときは抵抗の両端の電圧の差はゼロになります。

この回路は、RA4ピンは入力ピンにしていますので、GP4ピンから電流はほとんど流れません。そのため、抵抗に電流が流れず、抵抗の両端の電圧差はゼロになります。つまり、RA4ピンは0Vになります。

このように接続する抵抗のことを「プルダウン抵抗」と呼びます。

マイコンやCPUの入力ピンが接続されていな状態にならないように、マイナス側(下側)に引っ張っておく、という意味合いで「プルダウン」と呼んでいます。「ダウン」ということは「アップ」もありそうですよね。では次に「プルアップ抵抗」について説明します。

先ほどは、スイッチONのときにRA4ピンが5V、スイッチOFFのときにRA4ピンが0Vとなるようにしました。これと逆にすることもできます。つまりスイッチONのときはRA4ピンが0V、つまりプログラム上では変数RA4が0となります。またスイッチOFFのときはRA4ピンが5V、つまりプログラム上では変数RA4が1となります。

ちょっと脇道に逸れますが、なんだか、スイッチONの時が1、OFFの時が0、という方がわかりやすいですし、自然ですよね。この「0」がOFF、「1」がONというのは世界的に共通の感覚のようです。例えばPCに限らず、家電製品、その他いろいろな製品の電源スイッチを見ると、

Pic basic 24 mac power switch

これはMacBookの電源スイッチなんですが、こんな風なデザインが多いですよね。実はこれは、数字の「0」と「1」をデザインしたものなんだそうです。「0」と「1」を制御する、つまり「OFF」と「ON」を制御する、という表現なんですが、、、「0」と「1」がそれぞれ「OFF」、「ON」という感覚はいいにしても、このデザインが「0」「1」を表現していて、スイッチ、という連想にはなりづらいような気もします。

ということで、わかりづらい方の接続を考えましょう。

先ほどと逆にして、スイッチをONにするとRA4ピンが0Vになるようにします。さらにスイッチOFFの時にRA4ピンが非接続状態にならないように5Vに接続します。こちらもスイッチONのときに電源がショートしないように抵抗を入れます。プルダウン抵抗のときと同じように考えてみてください。

Pic basic 24 pullupdown 5

この回路図に出てくる抵抗を「プルアップ抵抗」と呼びます。こちらも先ほどと同様に、スイッチOFFのとき電源のプラス側(上側)に引っ張っておく、という意味合いで「プルアップ」と呼びます。

ところで、このプルダウン/プルアップ抵抗はどのくらいの値にしたらよいのでしょうか。実はこの値、と決まっているわけではありません。ある回路図では1kオームだったり、他の回路図では10kオームぐらいだったりします。

早速、ブレッドボードでスイッチ回路を作成、、、といきたいところですが、もうちょっと回路を考えてみます。

先ほどのプルアップ抵抗をつけたスイッチの回路ですが、

Pic basic 24 pullupdown 6

この図の赤色の接続の部分、つまりピンに抵抗が接続されて電源のプラス側に接続されている部分、今まで作った回路図で見かけましたよね。以下の図の赤色の部分です。

Pic basic 24 pullupdown 7

形は違いますが、電気的な接続は全く同じです。

この部分は、PICkit3を接続してプログラムを書き込む時に使用します。逆に、通常動作中はこの部分は使用されません。ということは、この抵抗をスイッチのプルアップとして考えて、以下のようにスイッチを接続することができます。

Pic basic 24 pullupdown 8

ん? って感じでしょうか。もう一度よく考えてみましょう。

まずこの回路でスイッチがOFFの場合は、最初に設計した回路図と同じです。この状態でPICkit3でプログラムを書き込むことができます。

次に、通常動作中は、このピン、つまりRA3(4番ピン)をデジタル入力ピンとして使用して、スイッチ状態を読み取る、ということができます。

なお、ほとんどのPICマイコンは、4番ピンがプログラム書き込み用のピン(MCLR/VPPピン)であると同時に、RA3ピンとしても定義されています。このRA3ピンは入力専用ピンとなっていますので、スイッチを接続して使用するケースが多いです。

ということで、最初はRA4ピン(3番ピン)でスイッチの接続回路を説明してきましたが、すでにRA3ピン(4番ピン)にプルアップとして使用できる抵抗が接続されていますので、スイッチはRA3ピン(4番ピン)を使用することにします。

なお、このように接続しますので、スイッチ状態は、RA3が0のときON、1のときOFFになります。ちょっとややこしいので注意しましょう。スイッチを接続した回路図は以下のようになります。

Pic basic 24 schematic switch added

タクトスイッチの内部接続

今回はタクトスイッチ、というものを使用します。実物はこのようなものです。

Switch

なんかドアップで撮影したら、今にも歩き出しそうな感じになりました。

ピンの付き方に注意してください。タクトスイッチを上からみるとこのようになっています。ピンは1辺に2つ、向かい合う2辺に合計4つ付いています。

Switch top view

タクトスイッチ内部の配線ですが、通常はスイッチはOFFの状態で以下のように配線されています。

Switch off

スイッチ部分を押すと、押している間だけ、以下のように配線が接続されます。

Switch on

ブレッドボードに差すときはスイッチの向きに十分注意してくださいね。

ブレッドポードにスイッチ回路追加

さて、いよいよブレッドボード上に先ほどの回路図を作成していきます。今までひとつひとつの部品について、回路図からブレッドボードに組み立てていく手順を説明してきましたが、今回は是非自力で挑戦してみてください。

以下に実装例を示しますが、この実装例が唯一の正解ではありません。他にもいろいろと実装方法があります。なお、あとで圧電ブザーも追加しますので、スイッチはなるべく端に配置するようにお願いします。

追加スイッチ回路部分

スイッチ回路で追加した部分はピンク色枠内です。PIC12F1822のRA3(4番ピン)からスイッチの片方のピンに黄色線で接続、スイッチのもう片方を青色線で電源のマイナス側に接続しました。

実際に実装した画像です。接続の参考にしてみてください。

スイッチ回路追加ブレッドボード

次回はスイッチを読み取って制御するプログラムを作成します。

更新履歴

日付 内容
日付 内容
2016.11.13 新規投稿
2018.11.24 ブレッドボードイラスト&画像差し替え
通知の設定
通知タイミング
guest
5 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
望
3 年 前

初めまして。いつも頭を抱えながら楽しく拝見しております。
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の設定でこんな現象が起こるのでしょうか。

画像が添付できず無茶な質問ですが、ここ数日あれこれいじって
全く分からず困っております。
よろしければお願いします。

管理者
管理者
返信 
3 年 前

プログラムはwhile文がずっと繰り返されますが、while文の中でLATB4は変更していませんので、LATB4の点灯状態が変わる、というのかなかなか原因がわからないです。

どのような回路を作成されているかわかりませんが、プログラムとしては、LATB4は点灯したまま、LATA1はRA5のスイッチが押されているときに点灯、離すと消灯、という動作になっています。

ただ、このプログラムで両方のLEDが制御できてしまっていのは接続の問題もあるのかもしれません。回路接続の画像があればある程度わかると思います。

初心者
初心者
返信  管理者
3 年 前

解決しましたか?初心者です。同じ経験をしております。
”16F 1827にプルアップでRA5に入力させて”
が実装できていないと思われます。
回路の電圧を測定すると、スイッチoffのとき、RA5 0V、onのとき5Vになります

同じ接続方法であるとして、16F 1827の場合もルアップできるのでしょうか?

初心者
初心者
返信  初心者
3 年 前

自己解決
#pragma config LVP = ON     // Low-Voltage Programming Enable (Low-voltage programming enabled)

教科書のプログラムに上記の差分があり、OFF にしたら設計とおりの動きになりました。

輝
7 年 前

初めまして。以前からマイコンに興味があったのですが、習得に何度も挫折していました。今回このサイトに出会い、再度挑戦との意気込みで買い物リストの部品も購入し取り組んでいます。
解らないところはコメント欄にて質問を受け付けていただけるとの記載がありまあしたので書かせて頂きます。
このページにある、「GP4ピン」とは「RA4ピン」のことなんでしょうか?
勘違いした的外れの疑問なのかもしれませんが、よろしくお願いします。

管理者
管理者
返信 
7 年 前

輝さま、
ご質問どうもありがとうございます。ぜんぜん的外れの質問ではないですよ! 自分も初めて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とは違った電子工作ができるようになりますので、ぜひ諦めずに一緒に頑張りましょう! 何か不明点がありましたらまたご質問いただければと思います。

輝
返信  管理者
7 年 前

早々のご教示、ありがとうございます。
理解することが出来ました。

昨夜、基礎編の第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.

等でした。

どうやってエラーを回避できたのが未だ謎ですが (^^ゞ
お言葉に甘え、これからも
よろしくお願いします。

目次