忍者ブログ

マイコン詭録記 電子工作の記録

RSS TWITTER Rss Twitter

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Quine Quartet



某サークルの新歓展示で展示した作品です.

概要
「Quine Quartet」は4つのマイコン(ATtiny2313)をもち,それぞれはメモリ書き込み用のSPIで環状に接続されています.
それぞれのマイコンには「自身と同じプログラムを隣のマイコンに書き込む」が書かれており,トリガー(最初の1つは基板の裏にあるスイッチで発生させる)が入力されるとそのプログラムを実行します.
書き込み後は書き込まれたマイコンに対してトリガーを送信するので,4つのマイコンが順番に書き込みを続けていきます.
RESETピン,MOSIピンと書き込み元のマイコンにLEDがついているので書き込みの様子はLEDで確認できます.

プログラム
プログラムは,マイコンの場合は自身のメモリを読むことが容易にできるので簡単にできるはずですが,Quine本来の「自身を読み込んではいけない」という規則に則って「実際に動作させるプログラム」と「書き込むためのプログラムのデータ」の両方を持っています.
プログラムは以下の手順で(C言語で)作成しました.
  1. プログラムが「セパレータ(0xFFFF)を1つだけ含むデータ」をプログラムメモリ内に持つと仮定する.
  2. 「データをセパレータで分割し,『前半を2回,セパレータ,後半を2回』の順番に接続されたマイコンに書き込む」プログラムを普通に書く.
  3. 2.をコンパイルし,バイナリデータを1.のデータに代入した後再度コンパイルする.
0xFFFFはAVRの命令としては存在しないはずなので使用しました.書きやすかったのでこういう方式をとったのですが,データの前半部分と後半部分の長さが分かっていればそちらのほうが安全です(プログラム中で「0xFFFF」のデータを使用できないので).
結果として,コンパイルされたデータには
プログラム(前半),プログラム(前半),セパレータ,プログラム(後半),プログラム(後半)
が順番に書かれています(このうち真ん中の3つはデータとして入っています).両端のプログラム部分が真ん中の3つを使って接続されているマイコンに書き込みます.
容量は1.6KBくらいでした.

基板
基板はElecrowの「2 Layer 5 * 5cm Max - 5/10pcs(Color Free)」で発注しました.基板本体は$9.90で配送量が$3.72,合計で$13.62(当時レートで1451円)でした.
5枚で注文したのですが10枚届きました.
注文したのは3月6日,届いたのは3月16日〜19日(定かでない)でした.
安いのに綺麗にできているのでいい感じです.
(というか残り9枚の使い道がないので欲しい人がいたらあげます)
回路図



ソースコード
(avr-gcc 4.6.2以外では動かない可能性大です)

quine_main.c

hexファイル
(上のをコンパイルしたものです.ATtiny2313の出荷時のヒューズビットで動作するようになっています)
quine_main.hex


拍手[0回]

PR
Comment
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
コメントの修正にはpasswordが必要です。任意の英数字を入力して下さい。
Clear