明滅のアルゴリズム

■大した話じゃないんですが、GPSロガーは根幹部ができあがり、あとはディテールを仕上げていくのみ。とりあえずは。細かいところの使い勝手を良くしていこうというわけです。使い勝手といってもそれほどいじれるところはないのですが、以前のバージョンからどうしようかとつねづね思っていたのが、インジケータの点滅パターンだった。ピカピカ、チカチカするあれです。

 最初、明滅は主処理中のループの中で処理させていました。一回書き込んではチカ、二回書き込んではチカ、みたいな。ただ、書き込み処理にしろ、GPSからの読み込みにしろ、それぞれの処理時間は安定していない。だから、ちょっとみっともないチカチカになるわけです。それと、明滅のパターンのバリエーションを持つのが難しい。例えば●が点灯で○が消灯として、●○●○○○みたいな。できないことはないんですが明滅制御だけでロジックを喰うことになり、GPSモジュールからの読み込みとSDへの書き込みを1秒サイクルで処理しなければならないことを考えると、あんまり余計なことはしたくない。1秒って短いようだけど、ATmega128は内臓オシレータで8MHz動作だから結構余裕があるといえば、あるんですが。

 明滅の間隔が不規則になるのは、主処理に押し込んでいるから。ということは、主処理とは別の規則正しいサイクルで動作するようにしてやればいいわけです。概ねそういう目的のためにタイマ割り込みというのが使われます。主処理で何をしていようと、定期的に割り込んで処理をしてくれるわけです。
 タイマ割り込みによるチカチカというのは、いわば定番なんですが、できれば、チカチカではなく、チカチカ‥‥チカチカ‥‥、みたいなパターンを持たせたい。割り込み処理は本来の主処理を止めて脇道の処理をしていますから、あんまり重たい処理はさせられない。SDカードの書き込みそっちのけでチカチカやっているなんて、想像もしたくありません。

 最初に考えたのは、明滅パターンを配列に収める方式ですが、ただ、チカチカさせるためだけにメモリを消費するのもコスト対効果としては考え物です。明滅パターンをビットに変換して格納する、というのもメモリ効率は高いですが、基本的に配列と同じだし、ヒトの目に明滅のパターンとして認識させるためには、(CPUとしては)結構長いサイクルを必要とします。つまり、ビット数もそれなりに確保しなければならないでしょう。

 要はある割り込み回数に達した時に、点灯し、さらに次の所定回数に達した時に消灯してくれればいいわけです。ということは、「割り込み回数」そのものをパラメータとして利用できればいいのではないのか。
 というわけで思いついたのが次のロジックです。

PATTERN=0b01010000;
byte counter=0;
time_interval(){
 LED = ON;
 if((counter&PATTERN)!= 0)
     LED = OFF;
 LEDCONTROL(LED);
 counter++;
}

 実際に使っているコードではありません念のため。加算されるcounterの値とパターンマスク(PATTERN)の論理積をとって、どこかしらのビットがマッチした場合は消灯します。counterは足しっぱなしですが、実際にはbyte型なので255の次は256ではなくて、0に戻ります。
 これで何がどうなるかというと、全体で256の長さ(0-255)を持つ点灯タイミングにおいて、PATTERNの8つのビットに対応する消灯タイミングが発生することになります。
 これだけだとイメージが掴みにくいと思いますので、PATTERNが3ビットの場合を例示して終わりたいと思います。PATTERNが3ビットの場合、基本サイクル長は8になります。
 で、PATTERNが0b001の場合。
●○●○●○●○
PATTERN=0b010の場合。
●●○○●●○○
PATTERN=0b101の場合。
●○●○○○○○
 つまり、めまぐるしいチカチカから、普通のチカチカ、はたまたチカチカ‥‥チカチカ‥‥というパターンを同じロジックで、ただパターンマスクを変更するだけで発生させられます。仕掛け的に奇数回の点灯はできないのですが、個人的にはこの程度で十分。この程度のことなら誰しも思いついているような気がしますが、軽く検索した範囲では見当たらなかったもので。
 アルゴリズム辞典というのを昔愛読した時期があったのですが、組み込み系の定番アルゴリズム辞典というのがあってもいいのかなという気がします。ただ、AVRのCの場合、コンパイラが微妙というか、ヘンなところで想定しない動作をすることがあるので、予防的コーディング(いわゆるバッドノウハウ)例の方が役に立つのかもしれません。

Copyright (C) 2008-2015 Satosh Saitou. All rights reserved.
戻る
日記::一覧展開
2016.06
卒検突破 (2016.06.26)
急制動 (2016.06.05)
坂道発進 (2016.06.04)
2016.05
スラローム (2016.05.29)
一本橋 (2016.05.28)
半クラ (2016.05.22)
2015.12
2015.11
2015.08
2015.07
2015.06
2015.05
EF50mm F1.8 STM (2015.05.24)
Private Private (2015.05.17)
NTPを整備する (2015.05.02)
2015.04
2015.03
2015.02
潮つ路 (2015.02.22)
未見の星座展 (2015.02.07)
2015.01
PSYCO-PASS劇場版 (2015.01.18)
2014.12
DOMANI/シェル (2014.12.20)
PHPでDMC (2014.12.13)
jouornald (2014.12.07)
2014.11
五木田智央展 (2014.11.08)
2014.10
山口勝弘展 (2014.10.26)
コンタクト (2014.10.18)
ケース加工 (2014.10.11)
山形旅行で (2014.10.04)
2014.09
聖地巡礼 (2014.09.27)
SIAF 2014(3) (2014.09.20)
SIAF 2014(2) (2014.09.14)
SIAF 2014 (2014.09.13)
RaspberryPi B+ (2014.09.06)
2014.08
ヴァロットン (2014.08.09)
GODZILLA(2014) (2014.08.03)
絵画の在りか (2014.08.02)
2014.07
クロニクル1995 (2014.07.26)
SDHCカード集め (2014.07.20)
SDカード再び (2014.07.05)
2014.06
2014.05
駆動系の整備 (2014.05.25)
無限の可能性 (2014.05.24)
PIOON (2014.05.17)
2014.04
大洗 (2014.04.19)
2014.03
唯美主義 (2014.03.09)
写真の境界 (2014.03.02)
2014.02
星を賣る店 (2014.02.15)
日常/オフレコ (2014.02.01)
2014.01
ISCP (2014.01.11)
DOMANI/シェル賞 (2014.01.04)
2013.12
ターナー展 (2013.12.14)
2013.11
反重力 (2013.11.02)
2013.10
木の器 (2013.10.20)
2013.09
ヒステリシス (2013.09.28)
LOVE展 (2013.09.08)
宙色 (2013.09.07)
2013.08
3/4だった (2013.08.17)
福田美蘭展 (2013.08.11)
2013.07
Fedora19 (2013.07.20)
2013.06
Google Cloud Print (2013.06.30)
未来の記憶 (2013.06.16)
梅佳代展 (2013.06.15)
片岡珠子展 (2013.06.09)
椿会展 (2013.06.08)
空想の建物 (2013.06.02)
wiringPi (2013.06.01)
2013.05
2013.04
箱詰め終わる (2013.04.13)
母-娘、姉-妹 (2013.04.06)
2013.03
卒展めぐり (2013.03.30)
恵比寿映像祭 (2013.03.16)
XBeeで接続する (2013.03.10)
Fedora18 (2013.03.09)
Black (2013.03.03)
2013.02
Backupその後 (2013.02.24)
Backup (2013.02.17)
音と光 (2013.02.03)
実験工房 (2013.02.02)
2013.01
いろはにほう (2013.01.26)
燻製を作る (2013.01.19)
2012.12
外装に収める (2012.12.23)
MU (2012.12.22)
スモーク (2012.12.01)
2012.11
Whirl (2012.11.25)
MOTアニュアル (2012.11.18)
2012.10
MPL1151A1 (2012.10.07)
2012.09
(2012.09.16)
夢の光 (2012.09.08)
光のアート (2012.09.01)
2012.08
東京湾大回り (2012.08.26)
2012.07
.hack//VERSUS (2012.07.22)
具体展 (2012.07.21)
国吉康雄展 (2012.07.15)
2012.06
2012.05
DHT11 (2012.05.12)
2012.04
PHPでIPCを行う (2012.04.22)
DHCPを立てる (2012.04.14)
DNSを立てる (2012.04.08)
2012.03
IPv6を追加する (2012.03.17)
MTUを調整する (2012.03.11)
2012.02
ICO再び (2012.02.26)
Viewpoint (2012.02.25)
恵比寿・2 (2012.02.19)
イ・ブル展 (2012.02.18)
恵比寿・1 (2012.02.11)
2012.01
星霜 (2012.01.01)
2011.12
2011.11
美女採取 (2011.11.27)
アサーション (2011.11.20)
日常/ワケあり (2011.11.12)
XB24-BとXB24-ZB (2011.11.06)
2011.10
家電入れ替え (2011.10.23)
2011.09
湿度センサ (2011.09.25)
銀座線ライン (2011.09.17)
竜宮美術旅館 (2011.09.11)
2011.08
しろきもりへ (2011.08.27)
2011.07
免許更新 (2011.07.31)
2011.06
京橋、新橋 (2011.06.26)
シンセシス (2011.06.18)
撤収の準備 (2011.06.04)
2011.05
風穴 (2011.05.15)
PLATFORM (2011.05.14)
2011.04
水・火・大地 (2011.04.17)
2011.03
パーティクル (2011.03.19)
恵比寿映像祭 (2011.03.12)
カナリア (2011.03.06)
2011.02
『ソルト』 (2011.02.19)
豊島美術館 (2011.02.13)
2011.01
藝大先端2011 (2011.01.23)
幽体の知覚 (2011.01.01)
2010.12
PWMで赤外線 (2010.12.26)
2010.11
『水辺にて』 (2010.11.06)
2010.10
アショカの森 (2010.10.30)
補遺の庭 (2010.10.24)
2010.09
シッケテル展 (2010.09.26)
音を鳴らす (2010.09.12)
2010.08
ハーフ (2010.08.21)
発電所美術館 (2010.08.01)
2010.07
2010.06
『未来医師』 (2010.06.13)
会田誠巡り (2010.06.12)
2010.05
桑原漁港 (2010.05.16)
欲望のコード (2010.05.15)
『第9地区』 (2010.05.02)
2010.04
春の海 (2010.04.18)
春の錦帯橋 (2010.04.17)
『機龍警察』 (2010.04.11)
2010.03
虹ヶ浜 (2010.03.28)
菊川湖再び (2010.03.14)
『虐殺器官』 (2010.03.13)
梶取岬 (2010.03.07)
絵画の庭@NMAO (2010.03.06)
2010.02
湯野温泉 (2010.02.06)
2010.01
2009.12
菅野ダム行 (2009.12.20)
2009.11
neoneo展 part2 (2009.11.29)
2009.10
広島ノ顔@HMOCA (2009.10.18)
末武川ダム (2009.10.10)
2009.09
吉宝丸@広島 (2009.09.20)
2009.08
2009.07
下松 (2009.07.12)
T4 (2009.07.05)
2009.06
仙台 (2009.06.07)
蕪島 (2009.06.06)
2009.05
2009.03
2009.02
2009.01
2008.12
神津佐仮説 (2008.12.21)
AVR HTTPサーバ (2008.12.20)
風景るるる (2008.12.14)
2008.11
南志摩・宿浦 (2008.11.22)
志摩あたり (2008.11.01)
2008.10
『剣の名誉』 (2008.10.18)
2008.09
石内都 (2008.09.06)
2008.08
宮島・厳島 (2008.08.30)
精神の呼吸 (2008.08.24)
西国行き (2008.08.23)
ICMP Echo応答 (2008.08.16)
MACフレーム (2008.08.03)
2008.07
小さな世界 (2008.07.26)
早送り (2008.07.20)
屋上庭園・他 (2008.07.13)
夢みる世界 (2008.07.12)
2008.06
古都の残像 (2008.06.01)
2008.05
北陸行 (2008.05.30)
ないまぜ (2008.05.24)
SDカード再び (2008.05.11)
GPSロケーター (2008.05.04)
2008.04
2008.03
音が小さい (2008.03.30)
STILL/MOTION (2008.03.22)
IAMAS2008 (2008.03.16)
80.7MHz/81.3MHz (2008.03.09)
橋頭堡 (2008.03.01)
2008.02
1998.11
作成:2008.05.27
公開:2008.07.05

Valid XHTML 1.1

loading image reserved place