1.はじめに

この早押しゲームを作ったのは、前回紹介したテストボードを眺めているうちに「何か簡単なゲームでも」と思ったのがキッカケです。小型のジャノメ基板にCPU(AVR)と僅かなパーツを載せただけの、簡単なものです。

ソフトの作成は、フローチャートを書いて進めるのが王道です。しかし、「趣味」「遊び」で作っていますので、邪道で結構と思い、まずはボタンを押すとランプが点灯する、ような簡単な部分からスタートしました。そのソフトを少しずつ膨らませて発展させて行く方法です。もちろん、複雑なソフトを考える場合には、フローチャートを先に考えます。

CPUにソフトを書き込むためには、AVR用の「ライタ」と制御するパソコンを別途用意する必要があります。私は、秋月電子の「AVRマイコンプログラマーキット」を使っています。

2.回路

回路図は図1に示すように簡単なものです。CPUを使った簡単な作品としては、代表例のような回路です。入力回路はTTLと違って内部でプルアップできますので、スイッチでアースに落とすだけです。ソフトでプルアップの設定は必要ですが、外部に抵抗を付ける必要がありません。

図1 回路図です。Rは電流制限用の抵抗で、470~1kΩ程度です。LEDの明るさを確認しながら、3mA以下に調整します。クロックには10MHzのセラロックを使います。写真6のようにジャンパーが多くなっています。もう少しポートの使い方を考えるべきでしょう。

後からジャノメ基板に組みましたが、もう少し実装を考えて入出力ポートを決めた方が、すっきりとします。

CPUはAVRのAT90S1200を使っています。AT90S1200にはAの付いたタイプもありますが、こちらは内部のCR発振をクロックとするようになっています。クロックが1MHzと低くなりますので、このままではタイミング的にダレた感じになってしまいます。もしAタイプを使う場合には、ソフトのタイマーを変更した方が、良いと思います。AT90S1200は200円前後で入手できますので、一昔前のTTLの感覚で使う事ができます。

AVRは、ハイ、ローどちらの論理でも、LEDを点灯させる事が可能です。普通ローのシンク電流の方が流せる電流が大きいのですが、LED3個でそれ程電流も流さないので、ハイを使ってアース方向にソース電流を流しています。LEDは種類によって流す電流が変わります。古いLED程電流を流す必要があります。なお、AT90S1200Tの規格としては、ローの時に吸込むシンク電流は20mA、ハイの時に吐出すソース電流は3mAまで流せます。また、トータルでの制限もありますので、その範囲の中で電流を決めます。色によっても異なり、ここには赤や橙、緑が最適です。趣味の場合、LEDの型番を意識して使う方も少ないと思いますが(私もです)、抵抗Rを調整して程よい明るさに合わせて下さい。

3.作成

写真1の状態で試作し、当時小4の2ndと遊んでいました。夏休みの宿題という事で、2ndが作ったのが写真2です。最初は写真1の状態で完成のつもりだったのですが、2ndの作品としては写真2となります。これはFCZ研究所のデジタルIC基板上に組んでいます。ゲームですので、もう少しキレイで派手に作れると良いのですが・・。小学生の工作ですが実はハイテクなのです。

写真1 前回紹介したテストボードを使って、試作中の様子です。

写真2 夏休みの宿題で、2ndが作った作品です。もう少し上手く作ってくれ!!

その後にまとめた様子が、写真3~6です。ジャノメ基板上にニッカド電池も含めて乗せてみました。このような作品の作成を流れで表してみました。

写真3 部品はこれだけです。ジャノメ基板の下の黒いのはゴムシートです。緑色の円柱は、ボタン型の50mAhニッカド電池です。

写真4 ジャノメ基板の裏側。銅に見えるのは、100円ショップで買った屋根の補修用銅テープを、カッターで細く切って貼り合せています。スズメッキ線や抵抗の切れ端を引き回しても同じです。

写真5 基板の裏側には絶縁用のゴムシートを貼ります。これで安心してベタベタ触れます。

写真6 完成!!2ndをゲームで撃破!!

4.ソフト

ソフトはアセンブラで作っています。タイマーはIC内にハードで用意されている、TIMERを使っても良いのですが、第一歩としては簡単で解りやすい事を優先し(私向け?)、ループを使ってタイミングを取っています。スイッチの状態も割り込みを使わず、ひたすらループの中でスイッチを読みに行く方法としています。ソフトとして他にする事がないので割り込む必要がない、作った本人が解りやすい、という事です。

ソフト1にアセンブラで作ったソースを、ソフト2にライタで書き込むファイルを示します。ソフト1は拡張子を「.ASM」として、パソコン内にコピーして下さい。ソフトの編集をして改良する事ができます。この編集やアセンブルには、アトメル社のWAVRASMを用いると便利です。アセンブルする事で、拡張子が「.HEX」のヘキサファイルが作られます。

ソフト2は拡張子を「.HEX」として、パソコン内にコピーして下さい。そのままライタでAVRに書き込む事ができます。 遊び方ですが、中央のLEDが点灯します。その瞬間に2人で競争してスイッチを押します。早く押されたスイッチの方が勝ちとなりLEDが点灯します。中央のLEDが点灯する前にスイッチを押すと、フライングという事で相手のLEDが点灯します。判定後しばらくするとLEDが消え、次のゲームに向けてのタイマーに入ります。そして中央のLEDが点灯し・・と続きます。単純なゲームですが、2ndと遊ぶと結構熱くなります。たまには技術の高さを家族に示しましょう。

5.発展のヒント

LCD表示を使う事で、LED点灯からの反応時間を表示する事も可能です。また、今のソフトではタイミングが一定ですので、これを完全なランダムは無理としてもランダムもどきにするのも面白いと思います。

このように、少しずつ機能を膨らませて発展させて行くと、また次のアイデアが浮かんで来ます。これがソフト開発の面白いところです。このようなものは、ソフトをコピーして同じものを作っているだけで、何も面白くありません。自分で開発や修正をするからこそ楽しくなります。これを発展させて面白いゲームに育てて下さい。ゲームだけでなく、延長線上には周波数カウンタ、DDSの制御、トランシーバの制御等、道はたくさん分かれていますし、可能性は無限に広がります。

ソフト1
拡張子を.ASMとしてパソコン内にコピーし、改良してもっと楽しいソフトにして下さい。

ソフト2
拡張子を.HEXとしてパソコン内にコピーし、そのままICに書き込む事ができます。