このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
PIC にプログラムを書き込むにはプログラマと呼ばれるパソコンからの書き込 み装置が必要です。 市販品もいくつか出回っています。 市販品のメリットは新しく PIC の種類が増えてもすぐに対応できること、 MPLAB IDE から書き込みができること、回路動作が安定していることなどが挙 げられます。 Microchip 社のホームページで Development から Development Tools を選ん で下さい。 そして表示されるページにある Hardware の項目にあるのが純正のプログラマ などです。 MPLAB® ICD 2 In-Circuit Debugger はプログラマになる他、回路に組み 込むことで回路ごとデバッグが可能になると言うものです。 本格的な開発を効率良くやるには必要となるものかも知れません。 但し、価格は数万円します。 また、秋月電子には PIC START Plus 相当品が 2 万円弱で売っています。
PIC へのプログラムの書き込みは電源以外はクロックとデータと言う二本の線 で行います(データシート p. 112 14 章 11 節)。仕組みは非常に簡単ですの で、プログラマのキットも各種販売されています。秋月電子では 16F628A の プログラマはキット、バージョンアップキット、USB ケーブルなどで 1 万円 で買うことができます。キット自体の安定性は良い方です。
この他、自作するための回路もさまざま公開されています。 もっとも安価だと思われるのが JDM プログラマ と呼ばれるもので、部品代は 1000 円程度でできます。 但し、これは RS-232C ポートから出る高い電圧をそのまま書き込み電圧とし て利用しています。 残念ながら USB のアダプタからはその電圧は出ないため、ノートパソコンで 使うのはほぼ無理です。
今回、この講義で取り上げるのは オレン ジ電子製作の509 ライターです。 特徴は RS-232C の電圧を利用しないので、 USB の RS-232C 変換器を使用で きます。 今回は特にノートパソコンを壊さないように、 USB から電源を取らず、自前 で電池を使う設計になっています。
部品 | 値 | パッケージ |
---|---|---|
C1 | 0.1µF | セラミックコンデンサ |
C2 | 10µF | 電解コンデンサ |
C3 | 10µF | 電解コンデンサ(耐圧50V) |
C4 | 0.22µF | セラミックコンデンサ |
C5 | 0.22µF | セラミックコンデンサ |
C6 | 0.1µF | セラミックコンデンサ |
C7 | 10µF | 電解コンデンサ |
C8 | 0.33µF | セラミックコンデンサ |
C9 | 0.1µF | セラミックコンデンサ |
D1 | 1N4148 | ダイオード |
D2 | 1N4148 | ダイオード |
D3 | 8.2V | ツェナーダイオード |
IC2 | PIC12F629 | PIC マイコン 12F675, 12C509 でも可 |
IC3 | MAX662 | 昇圧IC MAX 662 DIP モジュール |
IC4 | 78L05 | 三端子レギュレータ |
IC5 | DIL40 | 40 ピン IC ソケット |
LED1 | Yellow | 黄色の LED |
LED2 | Red | 赤色の LED3 |
LED3 | Red | 赤色の LED3 |
LED4 | Red | 赤色の LED3 |
Q1 | 2SA1015 | PNPトランジスタ |
Q2 | 2SA1015 | PNPトランジスタ |
R1 | 1.5k | 抵抗 |
R2 | 10k | 抵抗 |
R3 | 10k | 抵抗 |
R4 | 4.7k | 抵抗 |
R5 | 10k | 抵抗 |
R6 | 4.7k | 抵抗 |
R7 | 10k | 抵抗 |
R8 | 10k | 抵抗 |
R9 | 10k | 抵抗 |
R10 | 510k | 抵抗 |
U$1 | Q22SW | 3p スイッチ |
U$2 | Q22-6PSW | 6p スイッチ |
U$3 | Q22-6PSW | 6p スイッチ |
U$4 | BH-9VPC | 9V乾電池の基板用ホルダ |
X1 | F09V | RS-232C 9pin コネクタ(メス) |
8pin | IC ソケット | |
8pin | IC ソケット | |
ユニバーサル基板 | ||
3φ7mmネジ 2 本 | ||
2φ5mmネジ 3 本 | ||
9V乾電池 | ||
基板用足など |
回路はオレンジ電子に掲載されている回路図を元に、入手しやすい部品と無理 の無い回路設計をしました。 以下はこの回路設計の考え方です。
回路図は次の通りです(クリックすると PDF 版をダウンロードできます)。
実体配線図は以下の通りです(クリックすると PDF 版をダウンロードできます)。
電源を入れて、 IC が発熱していないか調べる。
ここまでで一応準備は終了です。 但し、まだ PIC に正常にプログラムが書けるかのテストは終ってません。 PIC を正常に動作させるためのテスト用の回路を作成し、テスト用のプログラ ムを用意します。 そして、改めて、書き込みテスト、動作テストを行います。
なお、これでも解決しない場合は、 専用のテストプログラムを使用して回路をチェック します。
テスト用の回路はブレッドボードで作ります (写真参照 クリックすると拡大します)。 これは多数の穴のあいたボードで、 IC などをそのままさすことができます。 また専用の導線を使うことで半田付け無しで回路を構成することができます。 ここでは PIC の全 I/O ポートを使います。 入力専用の端子にはスイッチを繋ぎ、他は全て LED を接続します。
16F628A の I/O ポートはいくつかの種類があります。 データシートの 17.0 節にありますが、各ポートから取り出せる電流の最大値は 25mA で全ポートの合計電流が 200mA です。
したがって、テスト用の回路を一般の I/O ポート、RA4、RA5、その他に分け て説明します。
RA0〜3, RA6,RA7と RB0〜7 は通常の I/O ポートとして使用できます。 ここでは秋月電子で販売している C-552SR ( データシート) カソードコモン2文字タイプを接続します。 これには 16 個の LED が内蔵されています。 PIC から取り出せる電流は 200mA なので、一つあたり 14mA 程度が限度です。 一方、 C-552SR の一個の LED の電圧降下は 1.6V です。 乾電池 3 本で動かす場合、電圧の変動を考えて最大 5V とすると落さなけれ ばならない電圧は 5 - 1.8 = 3.2V です。これを抵抗で落すことを考えます。 この時、14mV 流れるとすると接続すべき抵抗値は 3.2/0.014 ≒ 228 Ωです。 E12 系列だと 330Ω となります。 但し、 12mV 流す必要もないのであれば、これより大きい抵抗値でも構いませ ん。 例えば、 1kΩ でも問題無く点灯します。
RA4 はオープンドレインなので、外部から電源供給した回路を ON/OFF できま す。 ここでは、電源から 330Ω と単体の LED を繋いだものを RA4 に繋ぎます。
RA5 は入力専用なのでスイッチを繋ぎます。 RA5 から出た線を二つに分岐し、一方は 10kΩ の抵抗を経由してグランドに、 もう一方はスイッチを経由して電源へ繋ぎます。
PIC 16F628A は内部にクロックがあるため、外部から供給する必要があるのは 電源だけです。VDD を電源に繋ぎ、 Vss をグランドに繋ぎます。
また、電源の確認用に10kΩと繋いだ LED を用意します。
回路を作る前の準備として、PIC の足を保護するため、丸ピンの IC ソケット を指しておきます。 また、さらに頻繁な抜き差しでダメージを与えないように、ゼロプレッシャー IC ソケットを使います。
ブレッドボードの構成は 3 段構成にします。 上段に PIC、中段に抵抗、下段に 7 セグメント LED を配置するのが基本です。
電源を配線します。 ブレッドボード上で専用のライン同士に電気が流れるように電池ボックスやジャ ンパ線を繋ぎます。 また電源から一本線を出し、抵抗、単体 LED、 グランドの順に繋ぎ、電源ラ ンプにします。
PIC の IC ソケットを上段に配置します。一番ピンが下に来るようにします。 14 番ピンを電源に、5 番ピンをグランドに接続します。
PIC の 1,2,3, 6,7,8,9 番ピンは IC ソケットのラインから直接抵抗を繋ぎます。 反対側はブレッドボードの中段に繋ぎます。 10,11, 12, 13 番ピンは 右から回り込むように配線し、抵抗を使って中段に 繋ぎます。 15, 16, 17, 18 番ピンも同様に左から回り込むように配線します。
下段に 7 セグメント LED C-552SR を配置します。カソードは 13, 14 番ピン なのでグランドに接続します。 PIC のピン番号 1,2,6,7,8,9,10,11,12,13,15,16,17,18 から引いた抵抗をそ の他の各ピンに接続します。
3 番ピンは RA4 なので接続方法が異なります。 単体の LED を用意し、抵抗にカソードが向くように接続します。 そして、アノードを電源に繋ぎます。
PIC の 4 番ピンは RA5 なので、線を他のラインへ引きます。 そのラインから、10kΩでグランドに繋ぎ、一方はスイッチに繋ぎます。 スイッチの反対側は電源に繋ぎます。
部品 | 数量 |
---|---|
PIC マイコン 16F628A | 1個 |
ブレッドボード | 60 列が 3〜4 段のもの 1 つ。専用の配線材も含む |
18pin 丸ピンの IC ソケット | 1個以上。用意した 16F628A の個 数あった方がいい。 |
18pin 以上のゼロプレッシャー IC ソケット | 1個 |
カソードコモン 7 セグメント 2 桁の LED (C-552SR) | 1個 |
単体の LED | 赤、緑それぞれ 1個 |
タクトスイッチ | IC ピッチの基板用 1 個 |
330Ω 抵抗 | 15 本 |
10kΩ 抵抗 | 2 本 |
電池ボックス | スイッチ付。単3、または単4三本直列用 |
電池 | 電池ボックスに適合した物 3 本 |
以下にサンプルプログラムを 2 例示します。 このプログラムをアセンブルし、ライタで 16F628A に書き込み、上記のテス ト回路で動作し、開発環境が完成したことを確かめて下さい。
このプログラムはスイッチの状態により LED の点灯、消灯を切替えます。
;*************
;* switch.asm *
;*************
list p=16f628a
#include p16f628a.inc
variable env
env = _BOREN_OFF
env &= _CP_OFF
env &= DATA_CP_OFF
env &= _PWRTE_OFF
env &= _WDT_OFF
env &= _LVP_OFF
env &= _MCLRE_OFF
env &= _INTOSC_OSC_NOCLKOUT
__config env
org 0x0000
goto start
org 0x0008
start
movlw 0x07
movwf CMCON
banksel TRISA
movlw b'00100000' ; RA5 for input
movwf TRISA
clrf TRISB
banksel PORTB
main
clrw
btfsc PORTA,5
movlw 0xff
movwf PORTA
movwf PORTB
goto main
end
このプログラムは、全ての LED に対して点灯、消灯を定期的に繰り返します。
;*************
;* flash.asm *
;*************
list p=16f628a
#include p16f628a.inc
variable env
env = _BOREN_OFF
env &= _CP_OFF
env &= DATA_CP_OFF
env &= _PWRTE_OFF
env &= _WDT_OFF
env &= _LVP_OFF
env &= _MCLRE_OFF
env &= _INTOSC_OSC_NOCLKOUT
__config env
#define time D'3'
cblock 0x20
wa0,wa1,wa2
endc
org 0x0000
goto start
org 0x0008
start
movlw 0x07
movwf CMCON
banksel TRISA
clrf TRISA
clrf TRISB
banksel PORTB
main
movlw 0xff
movwf PORTA
movwf PORTB
call wait
clrf PORTA
clrf PORTB
call wait
goto main
wait
movlw time
movwf wa0
wait0
clrf wa1
wait1
clrf wa2
wait2
nop
decfsz wa2,1
goto wait2
decfsz wa1,1
goto wait1
decfsz wa0,1
goto wait0
return
end