1/10,000,000分周の解決と周波数カウンタの仮組み
2018-10-14
買い物に行く時、結構な枯れ葉が落ちていることに気付きました。いよいよ家の前のケヤキ通りが秋の様相・・・と見上げるとあまり良さげに色付いてはおらず、やはり長く続いた夏の暑さと急激な気温の低下という組み合わせでは綺麗に仕上がらないようです。ただ、まだ全く色付いていないものもありますからもう少し”監視”を続け、いい頃合いになったらまた報告します
直前のブログで課題とした1千万分の1分周は、結果的に8ピンDIPのPIC16F18313を2つ使って解決しました。この辺りをひとまずまとめておきます。
新しめのPICには、タイマ1との組み合わせで指定したピンに分周信号をトグル出力できるコンペアモードがあります。これを上手く動かすと、ハードウェアロジックで以下のようにクロックが分周できます。
① タイマ1のクロックをFosc/4として入力
② タイマ1のプリスケーラで1/8分周
③ タイマ1とコンペア用のレジスタとの比較で最大1/65536分周
④ 出力をトグルモードとして1/2分周
∴ 4,194,304分周
つまり、4.194304MHzの水晶があれば一発で1Hzが得られます。ソフト割込等は考えなくて良いため、初期化して知らん顔していれば勝手に1Hzが得られるといった寸法。でも、今回は10MHzからの分周ということで少々足りません。
そこで、このPICを使うことを前提に一旦タイマ2で少し分周し、その割り込み処理を使って出力ピンのトグル制御を行い、これを別のピンで受けてタイマ1に入力するという作戦を立てました。
① タイマ2のクロックをFosc/4として入力
② タイマ2のプリスケーラは使わない
③ タイマ2で1/25分周
④ タイマ2のポストスケーラで1/5分周
⑤ 割り込み処理毎に出力ポートをトグル(1/2分周)
⇒ここまでで1/1000分周:10KHz
⑥ ⑤を入力としてタイマ1を動作させる
⑦ タイマ1のプリスケーラで1/8分周
⑧ タイマ1とコンペア用のレジスタとの比較で1/625分周
⑨ 出力をトグルモードとして1/2分周
∴ 10,000,000分周
この仕様でプログラミングして実験しましたが、どういうわけか0.5秒毎にハイレベル出力が発振したような波形になってしまい、あれこれ弄っても改善しないことから2つのPICのタイマ1を使ってブレボ実験したら上手くいったため、上手く行かない原因を特定せぬままカウント部を組み立ててしまいました

小型万能実験台(なにそれ・・・
)にアンプ部と組み立てたカウント部を載せて動かしている様子です。奥の基板に並んでいる2つの8ピンDIPが、手前の基板の10MHzクロックを分周して1Hzを作り、これをゲートとしてカウント動作しています。入力はジャン測SGから10MHzを入力しているんですが、SG自体の周波数がずれているため10MHzピッタリにはなっていません。
これで漸くブレボ実験は卒業しました・・・が、ここから順に機能を作り込む必要があります。エンコーダ処理やUSARTなどのI/O回りが中心ですが、2.4GHzのプリスケーラも搭載してありクロック切替処理なども入れ込んでいく必要がありますから、もう暫くソフト作りに精を出す必要がありそうですね・・・

直前のブログで課題とした1千万分の1分周は、結果的に8ピンDIPのPIC16F18313を2つ使って解決しました。この辺りをひとまずまとめておきます。
新しめのPICには、タイマ1との組み合わせで指定したピンに分周信号をトグル出力できるコンペアモードがあります。これを上手く動かすと、ハードウェアロジックで以下のようにクロックが分周できます。
① タイマ1のクロックをFosc/4として入力
② タイマ1のプリスケーラで1/8分周
③ タイマ1とコンペア用のレジスタとの比較で最大1/65536分周
④ 出力をトグルモードとして1/2分周
∴ 4,194,304分周
つまり、4.194304MHzの水晶があれば一発で1Hzが得られます。ソフト割込等は考えなくて良いため、初期化して知らん顔していれば勝手に1Hzが得られるといった寸法。でも、今回は10MHzからの分周ということで少々足りません。
そこで、このPICを使うことを前提に一旦タイマ2で少し分周し、その割り込み処理を使って出力ピンのトグル制御を行い、これを別のピンで受けてタイマ1に入力するという作戦を立てました。
① タイマ2のクロックをFosc/4として入力
② タイマ2のプリスケーラは使わない
③ タイマ2で1/25分周
④ タイマ2のポストスケーラで1/5分周
⑤ 割り込み処理毎に出力ポートをトグル(1/2分周)
⇒ここまでで1/1000分周:10KHz
⑥ ⑤を入力としてタイマ1を動作させる
⑦ タイマ1のプリスケーラで1/8分周
⑧ タイマ1とコンペア用のレジスタとの比較で1/625分周
⑨ 出力をトグルモードとして1/2分周
∴ 10,000,000分周
この仕様でプログラミングして実験しましたが、どういうわけか0.5秒毎にハイレベル出力が発振したような波形になってしまい、あれこれ弄っても改善しないことから2つのPICのタイマ1を使ってブレボ実験したら上手くいったため、上手く行かない原因を特定せぬままカウント部を組み立ててしまいました


小型万能実験台(なにそれ・・・

これで漸くブレボ実験は卒業しました・・・が、ここから順に機能を作り込む必要があります。エンコーダ処理やUSARTなどのI/O回りが中心ですが、2.4GHzのプリスケーラも搭載してありクロック切替処理なども入れ込んでいく必要がありますから、もう暫くソフト作りに精を出す必要がありそうですね・・・

- 関連記事
-
- デカLCD入手・・・周波数カウンタ製作終盤の様子
- 周波数カウンタの実装機能まとめ
- 1/10,000,000分周の解決と周波数カウンタの仮組み
- クロックモジュールの換装
- 結局、周波数カウンタを仕立て中・・・
コメントの投稿
No title
PIC16F18313 と PIC16F18325でタイマ1のトグルモード機能しないロットがあるみたいよ。
出始めの頃どうやってもだめで、CLCのFF使って1/2した気がするよ。
出始めの頃どうやってもだめで、CLCのFF使って1/2した気がするよ。
なるほど、初期ロット不良ですか…
とおちゃん、コメントありです。貴重な情報、ありがとうございます。
このPICは、今回の製作用に購入したもので、特に問題がなかったです。18325は、味見用にかなり前に購入して部品箱に眠っているんで、もしかすると・・・。
このPICは、今回の製作用に購入したもので、特に問題がなかったです。18325は、味見用にかなり前に購入して部品箱に眠っているんで、もしかすると・・・。
PIC16F18313以上ならば
Timer2にFosc/4入れてPrescaler1/4にしてpwmで250分周すると2.5KHzが得られます。
それをCLC経由でTimer1に入れて25000分周すれば0.1Hzが得られます。トグルモード使えればそのままで、使えなければCLCで2分周してDuty50%にすれば、10秒ゲートができますよ。
10MHzなら24Bitで足りるので、100個くらい楽勝で記憶可能でしょう。100個だと32Bitを超えてしまうので面倒だけど。
基準クロックの評価ならば、差分だけとっておけばいくらでも桁増やせますね
それをCLC経由でTimer1に入れて25000分周すれば0.1Hzが得られます。トグルモード使えればそのままで、使えなければCLCで2分周してDuty50%にすれば、10秒ゲートができますよ。
10MHzなら24Bitで足りるので、100個くらい楽勝で記憶可能でしょう。100個だと32Bitを超えてしまうので面倒だけど。
基準クロックの評価ならば、差分だけとっておけばいくらでも桁増やせますね
なるほど、PWMとCLCか…
とぉちやん、再コメありです。
なるほど、PWMとCLCか…これには気づきませんでした。やはり、PICx1個でイケたんだ!
差分取って置き法は仰る通りですが、今の100個バッファ処理でひとまず満足してます。
それより何より、本当に作りたいものは別なんで、早くケースに収めて足を洗いたいんですよね(^^;)
なるほど、PWMとCLCか…これには気づきませんでした。やはり、PICx1個でイケたんだ!
差分取って置き法は仰る通りですが、今の100個バッファ処理でひとまず満足してます。
それより何より、本当に作りたいものは別なんで、早くケースに収めて足を洗いたいんですよね(^^;)