こんにちは,id研所属,学部3年の有塩です.

(去年)工大祭で展示しました,「ライフゲーム」を画面に出力するマイコンボードの紹介です.

board
gamen



...ところで,「ライフゲーム」とは何かご存知でしょうか?


wikipedia-ライフゲーム
ライフゲームとは生物の「生き死に」の様子をとても簡単に表現したものです.

周りに適度に仲間がいれば新しい命が誕生し,
過密だったり過疎だったりすると死んでしまう,

そんな,現実世界でも言えそうなルールをデジタルな世界で表しています.
このルールによってマス目上の生き物たちが何回も何回も生き死にを繰り返すのですが,
その模様が面白いのでライフゲームという名前が付けられ,親しまれています.
ちなみに,名前に"ゲーム"と付いていますが別に人が操作するわけではありません..
googleで検索ページ上でライフゲームが見られます

今回はそんなライフゲームを,
 そのマスが生きている=白
 そのマスが死んでいる(生きていない)=黒
として画面に表示するおもちゃを作りました.
ちょっとリッチなマイコンの扱いと外付けメモリ(SRAM)の操作,アナログな画面表示の勉強を兼ねてます.

冒頭の写真の様に,マイコン(ちっちゃい計算機.基板の左側正方形のやつ)からライフゲームが画面に出力されています.

ときどき,模様が一定のパターンに落ち着いてしまう(=定常状態)ので,
生物をランダムな配置にリセットしてやります.これで永遠にライフゲームを見ていられます.やったね.

簡単なルールが創りだす豊かな模様を,口を開けて眺め続けます.
これがそこはかとなく楽しい.
gamen2


マイコン・電子工作をしていると,出力といえばLEDの点滅だったりブザーの「ピー」音だったりと
そっけないものが多いのですが,近代的な出力装置であるディスプレイへ高速高画質(?)に
出力が行え,それが見られたので,作った甲斐が有りました.マイコン工作サイコー!


↓以下,テクニカル?なおまけです.
使用部品,スペック
 使用マイコン:ATxmega64A1U@40Mhz
  ライフゲームのボード生成と画面出力をこのマイコンのみで行っています.
 画面出力方式:VGA
 解像度:100x75
 回路図:
kairo

  VGA出力用回路設計でLucidScienceさんのHPを参考にしました.(ありがとうございます)
  (試したいことが幾つかあったので冗長な回路が含まれています./SRAMの接続に問題あり.後述/無保証です.この回路図通りに作った事によって生じたいかなる問題も責任を持ちません.)

画面出力
 VGAというアナログ式の出力方法を使いました.扱いがラクだからです.
 この規格ではRGBそれぞれの強度を0~0.7Vで表現するのですが,白黒しか使わないのでわりきって0Vと0.7Vしか送らないようにしてデジタルっぽくしています.
 送信にはこのマイコンのUSART-SPIマスターモードを使用しています.
 これで20Mbpsで信号が送れます.40Mbpsもイケます.
 ちなみに40Mbpsは800x600@60Hzで要求される速度です.

メモリ

 製作開始時は800x600のボードを想定していたため,最低でも800/8*600=60KiB,ダブルバッファリングで120KiBのメモリが必要でした.これはマイコン内RAMには収まらないのでこのSRAMを載っけていたのですが,基板設計時にIOの電源電圧が違うのを忘れていて撃沈.マイコンをオーバークロックさせていたこともあり,分圧抵抗を挟んだらまともな波形が出なくなりました.低速ではたしか動いたはず.
 写真の作品はボードをマイコン内メモリに格納しています.

なんでマイコンなの,8/16bitAVRなの
 近代的パソコンなら難なくフルHD@60Hzのライフゲームが出力できそうですが,それではつまらない・・・
 限られたスペックの安いマイコン一つでオペレーションができるモノを目指しました.
 メモリ共有型の分散コンピューティングシステムを作ろうとしていた時代もあった
 ギリギリで達成できそうな目標ってワクワクしませんか?

アルゴリズム

 Tsudaさんのビット演算(ビットボード)によるライフゲーム高速化の手法を使わせていただきました.
 (ありがとうございます)

ライフゲームについて
 口を開けてぼーっと模様を見てるだけではもったいないほど奥が深いです.
 詳しくは調べてみてください.

長々とお付き合い下さり,ありがとうございました.