google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

PICAXEを使ってみる-その3 タイマー割り込みが無い?

 引き続きPICAXEの話。

 LEDをピコピコさせるUSB電流チェッカーを製作中です。前の記事でタイマー割込みが使えなくて困ったのですが、その後マニュアルを読み込んでみてもタイマー割り込みの話は出てきません。どうも08M2にはこの機能はサポートされていないみたいです。

 でも現在製作中のUSB電流チェッカーのような簡単なプログラムなら対策方法があります。

▼対策前のプログラムの実行時間
対策前の実行時間
 この波形は c.0 Pinの波形で、プログラムが実行中にHiになります。最短だと2.8msで処理出来るのに、if文で分岐があると7.4msまで処理時間が伸びています。この処理時間の違いを吸収するためにタイマー割り込みを使いたかった訳です。

 でもタイマー割込みが使えないなら、ソフトでiF文の分岐の有無にかかわらず同じ処理時間になるようなプログラムにしてしまえば隠蔽する必要も無くなります。

つまり、
if aaa = bbb then
  let aaa = ccc
endif

と書く代わりに

if aaa = bbb then
  let aaa = ccc
else
  pauseus x    ; wait same time
endif

と書いて、pauseus x でif文が成立したのと同じ時間を else 側で消費させれば分岐の有無にかかわらず処理時間は同じになります。
 (pauseus命令は 指定値 × 10μs 待つ関数です)

こういう対策を行った結果,

▼対策後の実行時間
対策後
 どんな条件でも処理時間は約7.4msになりました。これならタイマー割り込みは不要で、10ms周期にしたいのなら、残りの2.6msをpauseus命令で待たせればOKです。

 この方法はアセンブラで書くプログラムの実行時間を調節するテクニックの一つです。ただBASICのような高級言語では、環境やバージョンによって実行時間が変わってくる可能性が大きいのでいつも同じ結果が得られるとは限らないのが難点です。また処理する内容によって実行時間が複雑に変わる関数などの場合はお手上げです。

 でも、PICAXEは石の中にインタープリターが入っているみたいなので案外大丈夫な場合が多いかもしれません。ただ、PICAXEがターゲットとするユーザーの多くはオシロとか持って無さそうなので、だれでも出来る対策方法では無いのが最大の難点かもしれません。

 参考に、USB電流チェッカーの対策後のプログラムはこちら

tag : 処理時間08M2

カレンダー
04 | 2013/05 | 06
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード