PIC16F84Aというマイコンを制御して、LEDを点灯させます。 1からPIC書き込み・動作確認までを掲載しています。 これからPICを始める、または始めたいと思ってる人にお役に立てたら嬉しいです。 また、書いてあることが間違っている可能性があるので、その場合は指摘して頂けると助かります。 (掲示板を出来る限り早く用意できるよう努力しますので、もう少々お待ちください。)
僕はPIC Programmer V3とMPLAB IDEを使ってます。 MPLAB IDEはMicrochipからダウンロードできます。 右上に「Japanese」というリンクがあるので、クリックすると日本語のページに飛べます。 ページ左下のあたりに「MPLAB IDE」というリンクがあるので、そちらのページに飛びます。 飛んだページの下あたりに「MPLAB IDE v8.60完全版」というリンクがあるので、 クリックするとZIPファイルがダウンロードできます。後はそのZIPファイルを解凍します。 解凍したあとのフォルダーに、「setup.exe」が入ってると思います。(あるいは単に「setup」) そのファイルを起動させて後はウィザードに沿って答えていけばインストールできると思います。 今後、このアプリケーションでプログラムを書いていきます。
PIC Programmerは秋月電子からダウンロードできます。 秋月電子のページの「ダウンロード」のページから「PICプログラマーキット」をダウンロードしてください。 僕の場合は「PICプログラマーキットVer.3 & 3.5」をダウンロードしました。後は各自でインストールしてください。 今後、このアプリケーションと「PICライター」でPICに書き込みします。 ですので、おそらくライターとソフトはあったものを選ぶ必要があります。ライターに付属してる可能性もあります。
さて、ソフトはそろいました。次に電子部品を揃えないといきませんね。 電子部品を扱ってるお店は色々ありますが、僕は秋葉原にある「秋月電子」まで買いにいきました。 先ほど、PICプログラマーキットをダウンロードしたところと一緒ですね。
これが僕の持っているPICライターです。8000円くらいした気がします。 今では他に2000〜3000円程度で買えるPICライターもあります。 このPICライター、僕は小学生の頃に親から買ってもらったので、僕自身は痛くもかゆくもなかったですけどね!←
書き込むだけならPICライターで十分ですが、動作確認のために電子部品が必要になります。 これらもすべて「秋月電子」に売っていますので、PICライターとあわせて買うといいでしょう。 必要なものは以下のとおりです。
部品名 | 価格 | 備考 |
---|---|---|
PIC16F84A | 1個 250円 | 今回の主役!当然必要です。 |
セラミック発振子(20MHz) | 1個 40円 | PICのクロック周波数になります。最大は20MHz。 |
三端子レギュレータ(5V) | 5個 100円 | 必要な電圧に変換してくれる素子 |
電解コンデンサ(47uF) | 10個 100円 | 今回は電源部のノイズ除去に使う。 |
電池(006P 9V) | 1個 100円 | 言わずもがな電源になります。 |
電池スナップ | 1個 10円 | これで電池と回路を繋ぎます。 |
ブレッドボード | 1個 250円〜 | こいつに部品を挿して回路を作ります。サイズによって値段は変わりますが、今回は小さめで結構です。 |
USB RS232C コンバータ | 2000円程度 | PICライターとパソコンを繋ぐのに必要です。 |
LED | 100個 400円 | 動作確認用。何色でもいいですよ! |
抵抗(1k) | 100個 100円 | LEDと一緒に使います。 |
合計 | 3550円 | あくまで参考程度 |
実際に買ってきたものです。上の表とは別にトランジスタと抵抗(10k)がありますが、気にしないでください。
これらの部品を組み合わせてPICを動作させます。 ちなみにLED(と抵抗)は動作を確認するためであり、PICを動かす為だけには必要ありません。
部品もそろったところで回路製作に入りましょう! 今回は最も簡単なPICの動作回路を作ります。回路図は以下のとおりです。
回路図の製作には「EAGLE」というソフトを使っています。 シェアウェアですが、一部の機能を制限されているフリー版もあります。 回路図がわからない人のために、以下の表を用意しました。画像とあわせてお使いください。
記号 | 部品名 |
---|---|
IC1 | PIC16F84A |
Q1 | セラミック発振子(20MHz) |
IC2 | 三端子レギュレータ(5V) |
C1,C2 | 電解コンデンサ(47uF) |
VCC | ※電池の+端子 |
LED1,LED2 | LED |
R1,R2 | 抵抗(1k) |
GND | ※電池の−端子 |
ここで注意が必要なのは太線にしてある「VCC」と「GND」です。 僕も最初に見たときは戸惑いましたね。「えっ、GNDってなに?えっえっ」ってなりました。去年度の始めなので、結構最近の出来事です。
VCCは電源をあらわしています。そしてGNDは基準電圧をあらわしています。 もっと意味がわからなくなりましたね!どういうことかというとこの基準電圧から見て電源は何Vか?ということなのです。 例えば今回買った電池は9Vですが、これは「この電池の−端子を基準に9V」ということです。 まだわからない人は多分そのうち電子回路を学んでいくうちにわかってくると思います。 ここでは、VCCを電池の+端子、GNDを電池の−端子に繋げれば問題ないです。 最初に深く考えちゃうとかえってわからなくなりますので、今は適当で構いません。なら説明するなよって話ですがw
PICは書き込みしてからつけます。安全の為、電池は片方だけでも外しておくことをお勧めします。
やっとプログラミングです。 PICのプログラムは、ここでは「アセンブリ言語」という言語で書きます。 アセンブリ言語は「機械語」に1対1で対応しています。最も機械語に近い言語です。 機械語とは、CPU(この場合はPIC16F84A)が直接理解できる0と1だけで構成されている数字の羅列です。 なぜ0と1だけなのかというと、CPUはスイッチがON(1)かOFF(0)かしか見分けられないわけです。
まあ、そんなことは置いといてとりあえずプログラム書きますか!
01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : |
LIST P=PIC16F84A INCLUDE P16F84A.INC __CONFIG _HS_OSC & _WDT_OFF & _PWRITE_ON & _CP_OFF ORG 0 MAIN BSF STATUS,RP0 CLRF TRISB BCF STATUS,RP0 LOOP MOVLW 03h MOVWF PORTB GOTO LOOP END |
最初はコピペしてもらって構いません。 実は上記のプログラムはコピーしやすい構成になっています。
今回は動作確認の為のプログラムなので説明は割愛させていただきます。
このプログラムをメモ帳に書いて、適当にフォルダを作って、「"test.asm"」という名前で保存します。 名前に「ダブルクォーテーション」も含めて保存してください。 ディレクトリに日本語などが使われていると後々エラーを起こす可能性がありますので、 Cドライブ直下に「pic」という名前でフォルダを作ってそこに保存するといいかもしれません。 それでは早速「アセンブル」してPICに書き込める形に変換しましょう!
回路製作、プログラミングが終わったら実際に書き込んでみましょう! PICライターとパソコンをUSB RS232Cコンバータで接続してください。 PICライターに電源コードを挿して、レバーを上げ、PIC16F84Aを取り付けます。 1番ピン(印がついている方)が上です。そしてレバーを下げてPICを固定します。 次に、PIC Programmerを起動したら、COMポートを指定します。 COMポートはデバイスマネージャから確認できます。 ソフトがPICライターを認識できたらデバイス設定をPIC16F84Aにします。 「HEXロード」から先ほどアセンブルして出来たHEXファイルを開きます。 「プログラム(P)」というボタンをクリックすると、書き込みが開始されます。 しばらくして、メッセージ欄に「プログラミング成功。」と出れば書き込み成功です。
回路製作も、プログラミングも終わったところで動作確認をします。 作っておいた回路にPIC16F84Aを取り付けてください。くれぐれも間違えて挿さないように! そして、おそるおそる外しておいたほうの電池をブレッドボードに挿します。
うまくいけば上の写真のようにLEDが光ります。 今まで頑張ってきた分、たったこれだけなのに僕は相当感動しました。
以上で今回は終了です。お疲れ様でした!
実はこれ書くためだけに8時間以上要していますw
途中、夕食に行ったり、休んだりはしていますが。
後半疲れが出ているのがわかると思いますw
ですが、こうやって文章にすることによって、僕も再確認することができました。
また、人に教えるのは自分が勉強するのと違いますからね。これで僕自身も理解が深められたわけです。
ちなみにこのページは、僕自身のメモの延長ですので、他のサイト様を参考にしています。
自分がやったことを自分流にわかりやすいようにしたって感じですかね。
このページを書いた労力が、誰かのためになったら僕も嬉しいです!ヾ(・∀・)ノ