はじめに
このページでは、ビギナー向けに、マイコンボードPIColoの開発方法を説明します。開発環境の用意や無償のCコンパイラのインストールについてはこちら、プロジェクト/プログラム作成についてはこちらを参照願います。
※以下の情報は2010年7月現在のものです。ご注意ください。
PIColoについてはこちらを参照願います。
パーツリスト
パーツ |
型名 |
購入先 |
LED |
NSPW−500CS |
マルツの通販 |
抵抗1 |
47〜51Ω 1/4〜1/10Wのもの |
電子部品店 |
抵抗2 |
10KΩ 1/4〜1/10Wのもの |
電子部品店 |
ケーブル |
センサーケーブル |
浅草ギ研及び販売店 |
スイッチ |
プッシュスイッチ(てきとうなもの) |
電子部品店 |
LEDを点灯させる回路
LED(発行ダイオード)は、アノードからカソードに電流を流すと光る素子です。
ここで重要なのは、LEDにかかる電圧VFと、電流IFをどれだけ流せばLEDが光るかの2点です。よって、LEDの回路を作るには最低でもこの2点がわからないと設計できませんので、これらの仕様がわかるものを購入してください。
今回は秋葉や電子部品通販で購入できる、超高輝度LEDの NSPW500CS を使ってみます。VFが3.6V、IFは最大30mAとなっています。このLEDはかなり輝度が高く、懐中電灯のかわりになるぐらい明るいので、私は趣味の電子工作でよく使っています。一般的に販売されているLEDの多くはVFがだいたい2VぐらいでIF最大が20mAぐらいです。どうしても仕様がわからなかったらそのあたりの数値で計算するとよいでしょう。
ここでもうひとつ重要なポイントですが、マイコンのIOは、最大で流せる電流が決まっており、それ以上流すと壊れる可能性があります。PIC16F1936の場合はデータシートの28章にその部分が書いてあります。、
IOピンごとの最大が25mAということで、このLEDを1個だけ使うなら、25mAまで流せるということになります。各ポートは140mAなので、たとえばBポートだけなら5本までしか接続できないことになります。
よゆうを見て、今回は1つのLEDだけをつないで、電流は20mA流すとします。VFはLEDの仕様から3.6Vなのがわかっています。電源は乾電池3本で4.5VとしますとVRは4.5−3.6=0.9Vという計算になります。
ということで、電流制限用抵抗は45Ωにすると20mA流れるということになります。45Ωという抵抗は入手しづらいので47Ωか51Ωがよいでしょう。今回は手元にあった51Ωの抵抗をつないでみました。
PIColoとの接続ですが、アクセサリの2mmピッチピンヘッダを付けると、浅草ギ研で販売しているセンサーケーブルがささります。今回はこれらの材料で簡単に回路を作ってみました。
ほとんどのLEDの場合はアノードの方が長いです。但し、ごくまれに、長い方がカソードのLEDも存在しますので、LEDの方向はよく確認してから使ってください。但し、間違って逆につけても壊れることはあまりなく、付け替えれば点灯するものです。
今回はLEDをB0端子に付けました。これで回路的には次のようになります。
B0端子をHighにするとLEDが点灯し、Lowにすると消灯します。
LED点灯のプログラム
次はプログラムの作成です。前回、プロジェクトの作成からやりました。
1)プロジェクト用に適当なフォルダを作る
2)Project Wizardでプロジェクトを作る
3)必要なファイルをコピーしてプロジェクトに加える
4)NewFileで新しいファイルを作り、main.cを記述する
という流れでした。今回は3)が不要です。プロジェクトを適当に作り、次のmain.cを作ってプロジェクトに加えてください。詳しいやり方は前回のページを参照願います。
行21までは前回と同じなので説明を省略します。#includeで組み込むファイルですが、今回はusartを使わないのでusart関連はインクルードしません。IOピンのアドレスなどを定義している
htc.h だけを組み込みます。
行8ですが、#define A B とすると、プログラム中のBと書かれたところがAと置き換わります。たとえば、今回、RB0端子にLEDをつなぎましたが、長いプログラムになってくるとどの端子に何をつないだかをいちいち確認するのが大変になるので、このように#defineでわかりやすい名前にします。行8のように定義するとプログラム中に LED と書くと PORTBのRB0をさすことになります。
行24、25でRB0のピンを出力に設定しています。ピンの中にはADコンバータといって、センサーなどのアナログ値を読み取るピンと、今回のようにHigh/Lowを出力するデジタルピンが共用になっているものがあります。というかPICの場合はほとんどのピンが共用になっており、PIC16F1936の場合はPORTAとPORTBのほとんどがアナログ入力としても使えるようになっています。
とくになにも指定しないと、これらの共用ピンはアナログに設定されていますので、デジタルで使うように設定する必要があります。これにはANSELA又はANSELBで設定します。
デジタルに設定したら、入力なのか出力なのかを設定する必要があります。これにはTRIS?で設定します。ポートBの設定はTRISBになります。
これらについてはデータシートの 6章:I/Oポート に書いてあります。その中で上記のについて書いてある部分がこちらになります。
説明の中で「クリア」すると書かれているところは0にするという意味です。「セット」すると書かれているところは1にするという意味です。
RB0をデジタルにするにはANSELBのビット0を0にし、出力にするにはTRISBのビット0を0にします。ということで行24,25のようになります。
行28〜33で一定の周期でLEDをON/OFFさせています。
動作させた結果、このようにLEDが点滅しました。
スイッチを入力する回路
スイッチ入力回路は次のようになります。
抵抗は大体1〜10KΩぐらいにしておきます。あまり低いとスイッチをオンしたときに電流が流れすぎて電池がもったいないのと、高すぎると応答性がわるくなったりします。流れる電流はLEDのところでの計算と同じようにオームの法則を使って、たとえば10KΩの場合だと4.5/10,000=0.00045A=450μAとなります。
実際の回路は、LEDの時に使ったセンサーケーブルのあまりでこのように配線しました。白が信号線、赤が電源+、黒がGNDになります。
スイッチを入力するプログラム
今度は、先ほどのプログラムの行25以降を次のように書き換えてください。
今度はRB1もデジタルにするので行25でRB0とRB1の2つのビットを0へ、つまりデジタルに指定しています。TRISBの方向はRB1はもともと入力になっていたのでそのままです。
行28〜32で、スイッチを押したときにLEDが点灯するようにしています。スイッチを押すと0、はなすと1なので注意してください。
行11〜18のウェイト関数は今回使っていませんので消しても問題ありません。
実験結果は次のようにスイッチを押したらLEDが点灯しました。
今回はスイッチとLEDという非常に簡単なものでしたが、IO入出力の基本的なもので、よく使われるものです。
さいごに
次はタイマー機能の説明をします。いままではてきとうにウェイトを作っていましたが、今度はタイマー機能を使って正確なタイミングを作って見ます。
2010年7月16日
|