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電流チェッカーの対策後のプログラムはこちら
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電流チェッカーの対策後のプログラムはこちら