「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



懸案のMsTimer2をCTC使ってモディファイするという
お話。とりあえずCTCを使ったものに書き換えてみました。

mstimer2_updated.zip
(zipファイル中に、ccpファイルとhファイルを封入)

色々弄っているので、もしかしたらバグが残っている
可能性がありますが、とりあえず現時点で確認できた
ことを以下にまとめて起きます。

・mega168搭載ボード(reduino-nano)を使って、
 サンプル(LEDを0.5秒毎に点滅するスケッチ)
 を4分間動かしてみたところ、腕時計とぴったり
 一致したことを確認
・mega8搭載ボード(NG)用にコンパイルを行い、
 エラーが出ないことを確認

16Mhz÷(64クロック×250カウント)=1ミリ秒
なので、とりあえず4分(=240秒)ほど回してみれば、
250カウントがきちんと数えられているかどうかが
確認できるはずだろう、と。
(カウント数がずれていれば4分で1秒程度の誤差が
 生じるはず)

というわけで、こんなスケッチを以って作者の方に
メールを送って確認していただこうかと思ってます。

バグなどお気づきの方はとりあえず私宛までお知らせ
いただけるとありがたく、よろしくお願いいたします。




コメント ( 0 )




http://headlines.yahoo.co.jp/hl?a=20101117-00000908-yom-sci

日本の地球シミュレータがFFTの計算でスパコンの
ナンバーワンに返り咲き…とのこと。

単にFLOPS値争いってことではなく、FFTの
ような複雑な(実利的な?)計算で返り咲きって
言うのはなかなか…。

FLOPS値で54位のコンピュータでもFFTなら
1位っていうのは、処理ロジックの勝利なのかな?

まぁ、この件もそうだし、はやぶさの件もそうだし、
なにやらおめでたい…。



コメント ( 0 )




(続きです)

MsTimer2を使ったスケッチのアセンブリ言語展開リスト
を眺めないと正確なことは言えないんですが、多分
レジスタ類の退避(push処理)と、割り込みベクタの
ジャンプ処理などモロモロ合わせると64クロック以内
にTCNT2がクリアされている可能性は低いと思います。
(少なくとも将来にわたってあらゆる使い方には無担保)

一方、タイマー2関係のレジスタは、TCNT2も含めると
破壊されています。破壊されるということは、コアの
標準機能含めあらゆるタイマー2関係の処理とは
排他的に利用されることになります。

まぁ、ソースコード上は入出力ピン関係のレジスタ・
ビットを変化させてないのでアナログ出力(PWM)
を使用中にMsTimer2を使い始めた場合もPWM出力は
引き続き動作するコードになっているみたいですが、
動作中にTCNT2の値を弄り回しているので、PWMのピン
に出力される波形は期待とは異なるものになる
はずです。


さて、まぁ大体予想したとおりといえば予想したとおり
ですが、これらを踏まえてMsTimer2をどのように変更
すればいいか?
ikkeiさんやarms22さんからのご指摘を踏まえると
以下のようになるのかなぁ?と。


タイマー0を使ったmillis() 関数のように誤差を途中
途中で補正すればよいのか?(誤差が累積した際に2連発
で指定関数の呼び出しを行うなど)
  →多分ノーでしょう。

これだと、一定の時間間隔ごとに処理をしたいっていう
場合に、途中途中で意図しない極小間隔で処理を連発
されてしまう恐れがあるため。
たとえばステッピングモーターをドライブすることを
想像すると、ほぼ一瞬で2ステップ分進むことになり、
モーターが追従できなくなる(→誤動作の元)

また、既存のタイマー2関係の処理とは完全に切り離した
世界で動かす前提になっているので、MsTimer2単体だけの
ことを考えてモディファイしても他機能に影響は無い。

加えて、タイマー2はmega48系のチップだけでなく、
mega8、mega128でもCTCモードで動作することが可能。
(c.f.mega8のタイマー0はCTCが使えない)
つまり、機種依存性は無い。


というわけで、やはりikkeiさんのおっしゃるように
CTCモードを使用する様に修正してしまうのがよさそう
です。

私がざーーーーっと調べてみたところではそんな感じ
なのですが、間違えがありましたらご指摘いただければ
ありがたく…。


まぁ、あとは実際にMsTimer2ライブラリをモディファイ
してみてから、作者の方にそれで問題ないか聞いてみる
って作業があるんだな。まぁ、できるだけ早めに…。



コメント ( 0 )