たんぱぁです。 > 割り込み処理開始が遅れ、 > その間にエンコーダーが逆転し、 > TCNT2が、0x0000から、0xffffに > なってしまったらどうでしょう 微妙に話がずれて混乱させても悪いのですが・・・ 以前担当した仕事で 「エンコーダのトリガ入力の時間間隔から速度を算出し、リアルタイムに表示する」 機能をとある装置に入れたのですが、そのとき似たような問題にぶつかりました。 と言うかシビアでした。 そのときはインプットキャプチャを使って、トリガ間のカウント数をGRAとOVFの 回数で算出したのですが・・・ 他のタイマなどの割込み処理中に オーバーフローとインプットキャプチャが立て続けに起こった場合、 同IPRの中ではGRAインプットキャプチャが強いので他のタイマの割込み処理終了 後にインプットキャプチャ割込みが先に発生します。 ここで 1.「インプットキャプチャ割込み時にOVFを見て立っていれば2^16足す」 方法を取ると、インプットキャプチャ→OVFの順に起こっていた場合には間違い なので2^16多い値が出る事があります。かつ、次の結果は2^16少なくなります。 かといって 2.「OVFを全く見ないで処理」 すると、OVF→インプットキャプチャの場合には間違いなので2^16少ない値が出 て、次の結果が2^16増える、という具合です。 そんな理由からごくたまに酷い数値が出ました。 ハードの改修はほぼ不可能な状況だったので、結局は速度設定値から大きく外れ た結果の場合は表示をパスするという反則技を繰り出して納めましたが(^^; (秘密ですw) 20秒の間に180トリガしか入らないような状況では「単位時間パルス数」ではな く「パルス間時間」を取るしかないでしょうが、こういう問題があるとやっぱり ハードでどうにかしてもらうしかないなあと思いました。 ・・・ソフトで解決策ってありますか? ---- たんぱぁ@ShootingStarLAB <tanpa@xxxxxxxxx> URL: http://www.ss-lab.com/