Monthly FB NEWS 月刊FBニュース 月刊FBニュースはアマチュア無線の電子WEBマガジン。ベテランから入門まで、楽しく役立つ情報が満載です。

テクニカルコーナー

My Project/【最終回】ハードとソフト、両方を取り入れて作る回路

JP3DOI 正木潤一

せっかく面白いアイデアを思い付いても、それを実現させるための回路を考えるうちに興味が失せてしまったことは無いでしょうか?例えば、ここに3つのLEDを光らせるだけの回路があります。

この回路を改良して、LEDが時間を空けて順番に光る、『信号機』にするにはどうすればよいでしょうか?
これをアナログ回路で実現させるのは、なかなか難しそうです。


複雑な動作をディスクリートだけで実現させるのは難しい

マイコンは小さなコンピューターです。ロジック回路を組む代わりにプログラムを書き込むことで、複雑な動作をカンタンに実現できます。


マイコンを使えば複雑な動作を実現できる

今回は、マイコンの1つである“PIC12F675”を紹介します。このマイコンは、PIC(ピック)マイコンと呼ばれるもので、8ピンですがプログラム次第で高度な処理も可能です。サンプルプログラムを用意していますが、マイコンにプログラムを書き込むための機械(ライター)とアプリケーション(フリーソフト)が別途必要なので、敷居が高いと感じるかも知れません。ですが、PICマイコンを使えるようになれば、必ず電子工作の可能性が大きく拡がります。まずはマイコンの紹介をご覧いただき、これを機にぜひ試していただきたいと思います。

<参考:手軽に使えるマイコン『PIC12F675』>
「マイコン」と聞くと、大きくて端子が沢山付いたICを連想する方が多いと思います。PIC12F675は8ピンDIPタイプと小さく、低電圧・低消費電流で動作する、Microchip社製のワンチップマイコンです。今回は触れませんが、A/Dコンバーターやクロックも内蔵されていて、高度な処理が必要な用途にも使用できます。価格も200円程度なので高い機能の割に安価です。


この小さなICに多くの可能性が詰まっている

意外と単純なマイコンのはたらき:
PIC12F675には、“汎用入出力”(GPIO: General Purpose Input/Output)と呼ばれる、ロジック電圧(High/Low)を入出力できる『ポート』が6つあります(ただし3番ポートは入力専用)。ポートの入出力はプログラムで設定できます。例えば、0番ポートを出力ポートにして、1番ポートは入力ポートにするといったことができます。

・High/Lowを切り替えられる『出力ポート』
出力ポートの動作は、ロジック電圧のHighとLowを切り替えるだけです。冒頭の回路では、プログラムによってポートの出力切り替えることでLEDをON/OFFさせています。

PICが出力する電圧はPICに加えられている+/-電源です。というのも、PICの内部にはトグルスイッチがあって、それをプログラムで制御してPIC内部の+または-(GND)ラインに繋いでいるからです。

・High/Lowを読み取れる『入力ポート』
入力ポートは、加えられたロジック電圧「High」と「Low」を“1”と“0”で認識します。

上図の例では、右のスイッチがポートとGNDと繋いでいるので、ポートには0Vが入力されています。左のスイッチは抵抗を介して電源とポートを繋いでいるので、ポートには3V(*)が入力されています。後述しますが、PICはポートに電圧を加えていない状態を“0”、加えた状態は“1”と見なします。
*ポートの入力インピーダンスが極めて高いため、抵抗を介しても電圧降下はほとんどありません。

<参考:プルアップとプルダウン>
PICの入力ポートはインピーダンスが非常に高いため、抵抗で終端しないとノイズなどで電位が不安定になりがちで、電圧を加えていないのに電圧入力を検出してしまうことがあります。上の回路図にはスイッチと電源の間に抵抗器が入っています。ポートと電源ラインを抵抗で繋いでスイッチを押していない間は電源電圧を加えて電位をHighあるいは1に固定しておくことを「プルアップ」と言います。逆に、ポートとGNDを抵抗で繋いでスイッチを押していない間はGNDレベル(0)に電位を固定しておくことを「プルダウン」と言います。

プログラムを書き込む準備:
百聞は一見にしかず。とにかく、実際にPICを動かしてみましょう。2014年7月号の『デジタルを楽しもう』にもPICマイコン導入の記事がありますので参考にしてください。
http://fbnews.jp/201407/rensai/jh1nrr_digital_03_01.html

下記のツールを用意します。

・開発用アプリケーション(フリーソフト)
Microchip社のサイトから、インストーラーをダウンロードします。
http://www.microchip.com/ja/mplab/mplab-x-ide
・書き込み用アプリケーション(フリーソフト)
開発用アプリケーションのインストーラーに含まれていますので、同時にインストールできます。
・PICライター(プログラム書き込み機)
電子パーツショップで入手できます。

・PIC本体(PIC12F675)

・ICテストクリップ
PICにプログラムを書き込むときに、PICを挟んでライターと接続するためのツールです。

サンプルプログラムをPICに書き込む:
今回、2種類のサンプルプログラムを用意しました。ダウンロードしてPICに書き込んでください。
https://drive.google.com/open?id=0B_FIFCYEaSemS1U4TGhLWXlpRmc

サンプルプログラムの内容:
では、ブレッドボードにリード部品を挿入して回路を組み、PICマイコンの動作を見てみましょう。


ブレッドボード上に回路を組み込んだ例

・信号機
青→黄→赤→青→・・・というように、時間を空けて3つのLEDが順番に点灯します。「一定時間待ってから次の処理をさせる」というマイコンの機能を利用しています。マイコンに同じ処理を何度も繰り返させて、いわば時間稼ぎをさせているのです。


おもちゃの信号機に回路を組み込んだ例

PICのポートからは最大20mAが取り出せますので、ドライブ回路なしでLEDを点灯させることができます。

※電流制限抵抗の値は、使用するLEDによって変わります。My Project 7月号を参考にしてください。

・カップ麺タイマー
3分経過するとアラームが鳴る、カップラーメン用のタイマーです。LEDの点滅とアラームによって経過時間を表します。動作を開始するとLEDが点灯し、1分経つと点滅に変わります。さらに1分経つと点滅が速くなり、3分経った時点でアラームが鳴ります。


百円ショップで入手した密閉ケースに収めたところ

電源はトランジスタスイッチを介してPICへ供給しています。本タイマーを使っていない間はPICと電源が切り離されるため、待機電流がほぼゼロになります (手持ちのテスターでは“0.00mA”)。また、タイマーの起動にはプッシュスイッチを使わず、電極間を指で触れる『タッチスイッチ』を使いました。さらに、コーン紙がプラスチック製の防水スピーカーと気密性の高いプラスチックケースを使い、防水性を確保しています。

2本の電極を指で触れると、電極間に僅かな電流が流れてNPNトランジスタ(2SC1815)がONします。これによりPNPトランジスタ(2SA1015)のコレクタ-エミッタ間が導通してPICに電源が供給されます。PICが起動すると、直ちにGP5ポートをHighにしてスイッチONの状態を維持します。3分が経過してPICが動作を終えると、今度はGP5ポートをLowにしてトランジスタスイッチをOFFにします。こうしてPICが自分で自分の電源供給を断ちます。

スピーカーを鳴らすビープ音は、0.5ミリ秒間隔でポートのHigh/Low出力を切り替えて矩形波を生成しています。スピーカーはインピーダンスが低いため、PICのポートで直接駆動させると電源ラインの電圧降下が過渡的に生じます。そこで、電源ラインに22uFのコンデンサを入れて降下電圧を吸収させています。これが無いと、アラームが鳴ると同時に供給電圧がPICの動作電圧を下回り、動作が止まってしまいます。

<参考:無電源化へのアプローチ>
電池の代わりに、ペルチェ素子で回路を動作させられないか検討してみました。ペルチェ素子は、両面の温度差が大きいほど高い電圧が発生する発電素子です。しかし、お湯を注いだカップ麺のフタに乗せて起電圧を測ってみると1.1V程度でした。環境温度の低い冬でも、PICを動作させられる電圧(2V)を得るのは難しそうです。もし変換効率の良い昇圧回路を使えば、動作させられるかもしれません。

PICプログラミングは“レジスタ”操作がすべて:
では、PICのポートを制御するために、どのようにプログラミングしているのでしょうか?以下に基本的な仕組みを記載します。プログラミングの方法については下にある解説動画をご覧ください。

PICは内部に『レジスタ』と呼ばれる“箱”を持っています。そしてレジスタの中には『ビット』と呼ばれる8つの“仕切り”があります。

このビットの中に“1”か“0”を入れることがPICのプログラミングです。特定のビットに“0”を入れることをクリア“1”を入れることをセットと呼びます。

ポートの入出力設定には、『TRISIO』という名前のレジスタを使います。このレジスタのビットに“1”か“0”を入れる、つまりセット/クリアすることでポートの入出力を設定します


『TRISIO』レジスタのはたらき

『TRISIO』レジスタの各ビットはポート番号と連動していて、例えばレジスタの1番ビットをセット(“1”)すると1番ポートが入力ポートに設定され、2番ビットをクリア(“0”)すると2番ポートが出力ポートに設定されます。ただし、これはポートの入出力方向を設定しただけであって、実際に出力ポートからHighやLowのロジック電圧を出力するには、『GPIO』というレジスタのビットを操作します。


『GPIO』レジスタのはたらき(出力)

『GPIO』レジスタもビットとポートが連動しています。セット(“1”)したビットに対応するポートがHighになり、クリア(“0”)したビットに対応するポートがLowになります。

『GPIO』レジスタは入力ポートの状態を読み取るときにも使われます。ポートに加えられているロジック電圧がHighであれば対応するビットがセット(“1”)され、Lowであればクリア(“0”)されます。例えば1番ポートにHighが入力されると1番のビットがセット(“1”)され、3番ポートにLowが入力されると3番のビットがクリア(“0”)されます。「コンピューターは0と1だけで計算する」とおり、PICは入力ポートに加わるロジック電圧「High」と「Low」を“1”と“0”としてビットに取り込みます。


『GPIO』レジスタのはたらき(入力)

最後に:
SDRのように、ハードウエアで構成されていた回路はソフトウエアによる処理に置き換わりつつあります。ソフトウエアに部品は必要ありません。動作の変更や修正のためにハンダを付けたり外したりする必要がありません。実は、『信号機』と『カップ麺タイマー』のプログラムは全く同じソースファイルで、GP3ポートを電源に繋ぐかGNDに繋ぐかによって、実行するプログラムを切替えています。このように1つのソースファイルに複数のプログラムを記述して、実行させるプログラムをスイッチで選択するのも、1つのマイコン活用方法です。

一方で、今回のカップ麺タイマーのように、回路を工夫して便利で面白い動作を実現させることも出来ます。ハードウエアとソフトウエア、両方の楽しい要素を取り入れて遊ぶことが、電子工作の最高の楽しみ方だと思います。

いつも記事をご覧いただきありがとうございます。2016年の10月から1年間、毎月記事を担当させていただきましたが、今月で一旦終了となります。12月からリニューアルし、季刊になりますが、さらに充実した内容をお届けします。

My Project バックナンバー

2017年9月号トップへ戻る

次号「月刊FBニュース2017年11月号」は 11月1日(水)と15日(水)に公開予定

サイトのご利用について

©2017 月刊FBニュース編集部 All Rights Reserved. 発行元: 月刊FBニュース編集部