teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]


新着順:75/789 記事一覧表示 | 《前のページ | 次のページ》

Re: キャプチャの値が6%ほどずれる件

 投稿者:matsu  投稿日:2015年 1月22日(木)14時02分41秒
  通報 返信・引用
  > No.722[元記事へ]

nekosanさんへのお返事です。

いつもありがとうございます。

> 想定どおりの速度で動くケースがあるということで、
> 比較対象ができた、というのが、ひとつの突破口に
> なるかもしれませんね。

突破口になりました。

> その場合、PIC24シリーズは2クロックで1命令のRISCだったと
> 思うので、32Mhzでの処理速度は、16Mcycle(16MIPS)になる
> かと思います。
> それを踏まえて、delay系の関数の時間調整に使っている
> クロック源(nop命令?)や、キャプチャが入力している
> クロック源(システムクロック?)が、どのルートでどの
> ように(減速されて)伝わってくるのかを整理してみると、
> どこが正しくて、どこが計算と外れているのかが整理できて、
> 根っこが見えてくるような気がします。

まさにその通りで,
リファレンスマニュアルに次のように書かれていました。

The processor clock
source is divided by two to produce the internal instruction
cycle clock, FCY.

2サイクルクロックで1命令を実行する訳なので,
おそらく,FCYの値からnop数を決めているであろう,delayについて,
FOSCを絡めて,次のようにしました。

#ifndef FOSC
#define FOSC 32000000L
#endif
#ifndef FCY
#define FCY FOSC/2
#endif

> > __delay_ms(xxx);の動作,USBの動作,タイマーキャプチャの動作をすべて
> > 説明をつけるためには,System Clockの1/3固定分周が
> > 1/6でないと説明がつきません。

これも解決できました。
リファレンスマニュアル 専用タイマ付き入力キャプチャ
に,

タイマのクロック源の選択は,ICTSEL制御ビット(ICxCON<12:10>)を介して行います。
タイマは内部クロック源(FOSC/2)も使用できますし,TxCKピンに入力される
外部クロック源をタイマ内で同期モードを有効にしても使用できます。

とありました。これからは,FOSCでなく,FOSC/2をカウントすることがわかりました。
残念なことに,ICxCONレジスタのICTSELビットの説明には,単に,

111 = システムクロックをキャプチャ用カウンタ源とする

としか書かれてないので,FOSC/2をカウントするとはわかりませんでした。
ここが,

111 = システムクロックFOSCの1/2をキャプチャ用カウンタ源とする

となっていればすぐに気がついただろうと思うのですが・・・。

まとめると,

FCYは,FOSCの1/2(32MHz駆動なら16MHz)にセットする必要がある。
タイマでカウントするクロックにシステムクロックを選択した場合,
FOSCの1/2の周波数をカウントする。

突破口を開いていただき,ありがとうございました。
6%,カウントがずれる件も解決でき,すっきりあしました。
 
 
》記事一覧表示

新着順:75/789 《前のページ | 次のページ》
/789