某サークルの新歓展示で展示した作品です.
概要
「Quine Quartet」は4つのマイコン(ATtiny2313)をもち,それぞれはメモリ書き込み用のSPIで環状に接続されています.
それぞれのマイコンには「自身と同じプログラムを隣のマイコンに書き込む」が書かれており,トリガー(最初の1つは基板の裏にあるスイッチで発生させる)が入力されるとそのプログラムを実行します.
書き込み後は書き込まれたマイコンに対してトリガーを送信するので,4つのマイコンが順番に書き込みを続けていきます.
RESETピン,MOSIピンと書き込み元のマイコンにLEDがついているので書き込みの様子はLEDで確認できます.
プログラム
プログラムは,マイコンの場合は自身のメモリを読むことが容易にできるので簡単にできるはずですが,Quine本来の「自身を読み込んではいけない」という規則に則って「実際に動作させるプログラム」と「書き込むためのプログラムのデータ」の両方を持っています.
プログラムは以下の手順で(C言語で)作成しました.
- プログラムが「セパレータ(0xFFFF)を1つだけ含むデータ」をプログラムメモリ内に持つと仮定する.
- 「データをセパレータで分割し,『前半を2回,セパレータ,後半を2回』の順番に接続されたマイコンに書き込む」プログラムを普通に書く.
- 2.をコンパイルし,バイナリデータを1.のデータに代入した後再度コンパイルする.
0xFFFFはAVRの命令としては存在しないはずなので使用しました.書きやすかったのでこういう方式をとったのですが,データの前半部分と後半部分の長さが分かっていればそちらのほうが安全です(プログラム中で「0xFFFF」のデータを使用できないので).
結果として,コンパイルされたデータには
プログラム(前半),プログラム(前半),セパレータ,プログラム(後半),プログラム(後半)
が順番に書かれています(このうち真ん中の3つはデータとして入っています).両端のプログラム部分が真ん中の3つを使って接続されているマイコンに書き込みます.
容量は1.6KBくらいでした.
基板
注文したのは3月6日,届いたのは3月16日〜19日(定かでない)でした.
安いのに綺麗にできているのでいい感じです.
(というか残り9枚の使い道がないので欲しい人がいたらあげます)
回路図
ソースコード
(avr-gcc 4.6.2以外では動かない可能性大です)
quine_main.c
hexファイル
(上のをコンパイルしたものです.ATtiny2313の出荷時のヒューズビットで動作するようになっています)
quine_main.hex
[0回]
PR