2000円以下から始められるPIC入門
PICを使ってテレビゲームをつくってみよう


はじめに

PIC等のマイコンのにプログラムやデータを書き込むものをライタまたはプログラマといいます。秋月電子通商のPICライタ「AKI-PICプログラマー キット」はたくさんのPICマイコンに対応しているスグレモノなのですが、販売価格が6700円します。しかし、最初から多数のPICを使い分けることはまずないので、そこで安価で初心者でも気軽に楽しめるような開発環境を探してみました。

PICライタはwebを探すと多数紹介されています。そのなかでもPIC16F84に限定すると、JDMのPIC-Programmer 2が安価でいい感じです。この回路に対応したソフトウェアとしてIC-Prog Prototype Programmerを用いてPIC16F84にソフトを書き込みます。この環境で実際に書き込みするために、LEDを点灯させるだけのソフトを作成しました。

PICのソフト開発環境にはアセンブラ版としてMicrochipのMPLABを、C言語版としてHI-TECH SoftwareのPICC-Liteを使いました。これはどちらもフリーの環境です。

環境が整ったところで、PICマイコン工作の入門としてトラ技97年5月号のワンチップ・ブレークアウト・ゲーム製作を作ってみました。これは、可変抵抗をコントローラとしたTVゲームです。入門ネタとしては中々面白いものでした。


PIC16F84

小さなマイコン

↓PIC16F84(下)とPIC16F84A(上)

PIC16F84とPIC16F84Aは、Microchipのワンチップマイコンです。電子工作で用いるPICとして、かなり長い間定番とされてきたものです。PIC16F84AはPIC16F84のバージョンアップ品で、ライタもソフトも大抵そのまま使えるので、購入するならPIC16F84Aです。

PIC16F84Aは動作周波数が20MHzまで動作させることができます。さらにI/Oに25mAも電流が流すことができるので消費電力の少ないデバイスなら直接駆動できます。

PIC16F84(A)は参考資料が豊富で、命令数が35個と少なく、マイコン工作の入門としてはピッタリなデバイスです。最近では、より高性能で高機能で安価なPICマイコンが多数販売されているので、製作の際に機能不足、性能不足があれば、簡単にそちらに移行することができます。


ソフトの開発環境

Microchipの統合開発環境としてMPLABがフリーで提供されています。これひとつでプログラミング、アセンブル、デバッグまでできます。デバッガはPICの動作を命令1ステップごとに見られるので、学習に便利な環境です。統合開発環境が特に必要ないならアセンブラだけで十分です。
MPASMWIN.exeがアセンブラなので"C:\Program Files\Microchip\MPASM Suite"をディレクトリごとコピーして、MPLABをアンインストールするのも手だったりします。


ライタ

市販のサードパーティー製のライタと、ライタの組み立てキット「AKI-PICプログラマー キット」が秋月電子通商で販売されています。そのほかweb上でライタとライタ関連のツールが多数公開されています。学習用途なら自分で作っちゃう方がいいでしょう。

PIC16F84(A)専用ライタの製作

JDMのPIC-Programmer 2はPCのシリアルポートに接続するPIC16F84専用のライタです。このライタは大変コンパクトで、なんとシリアルポートから直接電源をとっています。このライタについてはROCのホームぺージで詳しく紹介されています。これで、PIC16F84やPIC16F84Aが書き込めます。

PIC-Programmer 2の材料:
18ピンのICソケット
トランジスタ 2SC1815×2個(原典BC547Bの替わり)
抵抗 1.5kΩ
抵抗 10kΩ
電解コンデンサ 50V 100μF(原典40V100μFの替わり)
電解コンデンサ 16V 22μF
小電力用ダイオード 1S1588×4個(原典1N4148の替わり)
ツェナーダイオード 5.1V
ツェナーダイオード 8.2V
コネクタ D-SUB9ピン メス
ユニバーサルボード
配線少々

購入場所によりますが、ひとつ数円から数十円程度の部品ばかりです。私はこれらの部品を秋葉原の秋月電子通商、千石電商で入手しました。


ブレットボードで試作

簡単な回路なのでブレッドボード上でも作ることができます。ソケットに書き込み対象のPICを差し込んで後述のソフトを起動します。
たまたま手持ちにD-SUB9ピン-メスのコネクタが無かったのでD-SUB25⇔9ピン変換コネクタを使ってCOMポートに繋いでいます。

↓ブレッドボードで試作

ユニバーサル基盤にハンダ付け

ブレットボード上で書き込みの確認ができたところで、ユニバーサルボードにハンダ付けしてみました。

↓製作した基板の表と裏

適当に部品を置いてハンダ付けしました。適当に配置したので裏はめちゃくちゃです。ちょっと離れたところはウレタン線で接続しています。

このくらいのサイズなら、PCの後ろにさしても十分なほど小型ですが、D-SUB9ピン-メス→D-SUB9ピン-オスのストレートケーブルがあると便利です。秋月電子通商で400円ぐらいで売っています。


テスト用回路の製作

ためしにPIC16F84で簡単にLEDを光らせるソフトを書いて、ちゃんと書き込みできるか確認することにしました。

↓回路図 PDF版はこちら

LED点滅サンプル アセンブラ版
アセンブラ版のソフトはRB0〜8をON/OFFして、ダイオードを点灯/消灯を繰り返すだけのプログラムです。MPLABでコンパイルできます。MPASMWINだけでも十分です。

アセンブラ版ソース:
ledtest.asm
アセンブラ版ソースをアセンブルしたhexファイル:
ledtest_asm.hex


LED点滅サンプル C言語版
CコンパイラにHI-TECH Softwareがフリーで公開しているPICC-Liteを使いました。
C言語には時間の概念が無いので、適当にwaitを入れてタイミングを調整しています。タイマーを使うまでもないので・・・。

C言語版ソース:
ledtest.c
C言語版ソースをアセンブルしたhexファイル:
ledtest_c.hex


ROMの書き込み

ブレッドボードで作成したライタをテスターで結線チェックした後、いよいよ書き込みします。今回はWindows用の書き込みソフトIC-Prog Prototype Programmerを使いました。これは、ライト時にコンフィギュレーションワードが設定できたりして便利です。Windows用の書き込みソフトとして他にPonyProgがあります。

↓IC-Progのメインウィンドウ

IC-Progを起動した後、Settings>HardWare(またはF3)で設定ウィンドウを出します。

後はメインウィンドウのConfigurationを設定をしてCommand>Program All(またはF5)です。書き込み後はベリファイして結果を表示してくれます。

これでエラーが無ければOKです。

↓設定

さっくりとブレッドボードで組み立ててみました。

↓LED点灯回路を動かしているところ

横から見ればわかりますが、この状態は専門用語で生け花と言うそうです、生けてないけどいけてる。

↓ユニバーサル基板版

ユニバーサル基板で組み立てたところ。点滅しています。

…あ、このページを編集している時に気付いたのですが、電源のレギュレータ忘れた。
大学の後輩にあげちゃったんだよねコレ。まあいいか。

まぁともかく、これでPICの開発環境が整いました。雑誌やweb上にたくさん公開されているPIC16F84の工作がこれでできるようになります。


ブレークアウトゲームを作ってみよう

TVゲームは子供のロマン

トラ技97年5月号の「ワンチップ・ブレークアウト・ゲーム製作」はTVゲームの黎明期に登場したブロック崩しゲームをワンチップマイコンで実現しようというものです。私はこの記事の存在を、Oh!X 1999年夏号で知ったのですが、当時は97年トラ技はバックナンバーも無くなっていてました。それならコピーサービスでも頼もうかと思ってたところ、会社の大掃除の時に大先輩の机の下に、このトラ技97年5月号が眠っていたではありませんか。早速コピーして製作しました。思えばこれがマイコン工作のキッカケだったんですよね。

ブレークアウトゲームの記事はトラ技97年5月号の掲載以来のPIC関連の本に登場することは無かったのですが、7年の歳月を経てトラ技のPIC製作記事の集大成としてPICマイコン応用ハンドブックで復活しました。さらに運の良いことに内容見本第6-2にブレークアウトゲームの回路図がある記事が2ページが公開されています。ブレークアウトゲームのソフトはバックナンバーのダウンロードサービスに登録されているので、実は本を購入しなくても、これだけで設計データがすべてそろってしまいます。
とはいえ、コレをつくってしまったら他の記事も気になって買っちゃうでしょうけど。


ブレークアウトゲームの回路

PICマイコン応用ハンドブック内容見本第6-2の図6-2-1を参照してください。

↓ブレークアウトゲームの材料

ブレークアウトゲームの材料:
PIC16F84
18Pinソケット
セラロック 10MHz(コンデンサ内臓)
RCAコネクタ×2
トランジスタ 2SC1815-Y
可変抵抗 10kΩ Bカーブ(通信用が良いらしい)
抵抗 10kΩ×2
抵抗 4.7kΩ
抵抗 3.3kΩ
抵抗 2.2kΩ
抵抗 33Ω
抵抗 75Ω
コンデンサ 0.1μF
コンデンサ 0.022μF
ユニバーサルボード
アクリルケース
電池ボックス
リセットボタン
電源スイッチ

組み立て

↓組み立て途中

アクリルケースにはハンドドリルやハンダゴテの熱を使って穴をあけて、ニッパーを突っ込んでぐりぐりやって無理やり広げました。リーマーがあればもっときれいに空けられたのですけどね。

リセットボタンと可変抵抗とボードを仮組みしたところ。

なかなか良い出来栄え。


↓完成したところ

RCAコネクタはちゃんと画像出力用に黄色、音声出力用に白色をつかいました。

問題はケースとボタンの配置です。パドルを操作仕易い位置に可変抵抗を付けないとゲームになりません。また、可変抵抗とコンデンサの配線はできる限り短くしないとパドルが不安定になります。


ブレークアウトゲームのソフトウェア

CQ出版のサイトのトラ技ダウンロードサービスの過去のソフトウェアのページから1997年5月号 ワンチップ・ブレークアウト・ゲームの製作をダウンロードしてください。

アーカイブ中にはアセンブラソースなど色々有りますが、オブジェクトファイル BREAKOUT.OBJ がHEXファイルです。コレをライタでPIC16F84に書き込みます。

上で紹介したIC-Progで書き込んで実行してみました。

↓ゲーム風景

元ネタはATARIのゲームらしいです、色はありません、カラーフィルムで対応してください。白黒とはいえ、わずか1個380円のワンチップマイコンでTVゲームが作れるとは驚きです。初心者が作るには十分満足できるものだと思うのでオススメです。


今回学んだこと

ワンチップでもゲームは作れる。
これくらいインパクトがあるネタだと、とってもやりがいがある。
電源スイッチスイッチを忘れずに。
イチイチ電池を抜くのはとても面倒。
可変抵抗とコンデンサは最短で配置するべし。離すとノイズが乗ってなかなか安定しない。
これがゲームのハイスコアに影響します。ゲーマーならココに凝れ。