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


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

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

 投稿者:nekosan  投稿日:2015年 1月22日(木)00時40分53秒
  通報 返信・引用
  > No.721[元記事へ]

matsuさんへのお返事です。


> 32MHzでなく,16MHzで動作させると,キャプチャ値の6%近かったずれがほぼ無くなります。
> しかし,96MHz PLLブロックの動作がどうしても説明がつきません。
>


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



> <図 6-8>について
> PLLブロックで,PLL Prescalerで1/2にして4MHz Branchを作り,96MHzPLLの出力,
> 96MHz BranchをUSB Clockで1/2されることで,48MHzを作っています。
> これで,USBの通信はできていますので,48MHzで間違いないと思います。
>
> System Clockでは,CPDIVレジスタの設定で,1/1分周とし,その後1/3されて,
> PLL Output for System Clockとしています。
> つまり,システムクロックは,32MHzとなることを期待しています。
> しかし,実際にタイマーでキャプチャしてみると,16MHzとなっています。
> 割込み無しで,__delay_ms(xxx);の動作を試すと,やはり16MHzで動作して
> いるようです。
>
> PLL Prescalerを1/1分周とすると,タイマーキャプチャも__delay_msも32MHzで
> 動作していることが確認できました。しかしこの場合はUSB通信ができなく
> なるばかりでなく,キャプチャの値が5%少なくなります。
> (16MHzの時は,キャプチャの値の誤差はほとんどありません)
>
> おそらく,96MHz Branchが2倍の192MHzになって,タイマが間に合わなく
> なったのではないかと推測しています。(ありえるのかわかりませんが)
>
> __delay_ms(xxx);の動作,USBの動作,タイマーキャプチャの動作をすべて
> 説明をつけるためには,System Clockの1/3固定分周が
> 1/6でないと説明がつきません。


ブロック図と、設定内容を眺めると、USB側に96Mhz÷2=48Mhz
が供給されているとしたら、PLLの出力は96Mhzになっているもの
と思います。
(USBの通信ができているなら、48Mhzが正確に供給されて
 いるはずだと思うので)

一方で、PLL出力の分周比を1:1に、後段の分周が1/3だと、
システムクロックは32Mhzになっているはずなので、CPUの
マスタークロックも、たぶん32Mhzが供給されているのでは、
と想像します。

その場合、PIC24シリーズは2クロックで1命令のRISCだったと
思うので、32Mhzでの処理速度は、16Mcycle(16MIPS)になる
かと思います。


それを踏まえて、delay系の関数の時間調整に使っている
クロック源(nop命令?)や、キャプチャが入力している
クロック源(システムクロック?)が、どのルートでどの
ように(減速されて)伝わってくるのかを整理してみると、
どこが正しくて、どこが計算と外れているのかが整理できて、
根っこが見えてくるような気がします。
(ある程度、ライブラリコアのソースを読んでみる必要が
 あるかもしれません)

ちなみに、PLLの出力が192Mhzとなる使い方だと、多分
スペック外の動作になるので、何らかの誤差(6%とか)が
出るのは、なんとなく仕方ないのかなという気がします。


内蔵RCではなく、外付けのクリスタルやクリスタルオシレータ
を使ってPLLに4Mhzを供給しても、同じように誤差6%が生じたり、
動作が半分になったりするんでしょうかね?多分、192Mhzでは
なく、96Mhzの場合は、6%の誤差は出ないのでは、と思うの
ですが。

 
 
》記事一覧表示

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