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


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

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

 投稿者:matsu  投稿日:2015年 1月21日(水)20時23分48秒
  通報 返信・引用
  nekosanさん,
いつも,すぐにお返事いただき,ありがとうございます。
先日の,キャプチャ値がずれる件ですが,少しわかってきました。
(同時に,picfunの掲示板でも質問していますが,御容赦ください)

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

こんな状況です。picfunの掲示板での投稿内容です。
どうしても,図6-8が間違っているとしか考えられないです。

-----
Configurationで,
#pragma config FNOSC = FRCPLL
// Initial Oscillator Select (Fast RC Oscillator with Postscaler and PLL module (FRCPLL))
として,ポストスケーラ付のFRCとPLLを使って,システムクロックを作っています。

「PIC24F ファミリ リファレンス マニュアル、セクション 06. オシレータ」
http://ww1.microchip.com/downloads/jp/DeviceDoc/39700C_JP.pdf
のマニュアルの2,19ページに

「図 6-1: PIC24F 全般のシステム クロック回路図」
「図 6-8: 96 MHz PLL ブロック」

があります。

<図 6-1>について
ポストスケーラを1分周としました。PLL Blockに8MHzが入力するはず。


<図 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でないと説明がつきません。

いくら何でも,図 6-8が間違っているとは思えないのですが,どうしても
1/6としないとつじつまが合わない状況です。

USBも動作させた上で,マイコンを32MHz駆動したいのですが,
アドバイスいただけませんでしょうか?
 
 
》記事一覧表示

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