2015.9.25
前へ
次へ
ホームページトップへ戻る

新製品の紹介(プチ連載です)
周波数カウンタ組立キット

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
たまにはちょいと息抜きで小品も作ってみたいものです。
簡単にチョイチョイと…。
でも、なかなかそうは簡単にはいかなくて、いつものごとく回を重ねてしまうことになるのかも…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜


[第7回]


●第1回試作基板

やっと本題です。
周波数カウンタの最初の試作基板を作ったのは今年の5月ですから、もう4ヶ月も経ってしまいました。

こちらが最初に作った周波数カウンタ基板です。

主な機能はPIC16F883に乗せてしまっていますから、ご覧の通りシンプルな基板です。
最初はパルス入力部にトランジスタをつけて、+5V以外のパルスもカウントできるように考えましたが、そもそもの目的はデジタル回路が測定の対象として考えていましたから、+5Vのパルスのみを入力するようにして余計な回路による精度の劣化を避けることにしました。
パーツを実装した基板の写真は[第2回]にありますが、トランジスタは実装していません。
その写真では2回目の試作のために、ジャノ目基板の回路を増設してテストをしています。
そのことについては後で説明をします。

こちらが回路図です。

まさにPICの応用回路そのものです。
インターネット上ではPICだけで作った製作例なども沢山みかけますが、いかがなものでしょうか。
プリスケーラを使わないでMHzの周波数を計測するのにPICのみで作るというのはいささか無理があるように思います。
ここではプリスケーラとして8ビットカウンタ74HC590を使っています。
下位8ビットは74HC590でカウントし、上位カウンタへのキャリーパルスをPICで受けて割込みで上位カウント処理をしています。
74HC590はレジスタ付きですから、1秒のカウントを終了したあとで、下位8ビットを74HC590から読み出します。

それだけでは周波数カウンタにはなりません。
計測時間として1秒の時間をTimer1を使ってPIC内部で作り出しています。
1秒は長すぎるということで計測時間を10msとか100msにしている例もみかけますが、1秒間しっかり計測すればいいのではありませんか。

もうひとつ、回路図を見ていただければわかりますように、8桁の7セグメントLEDもPICでドライブしています。
限られた出力のなかでやりくりするために、ダイナミックドライブで表示をおこなっています。
この表示はソフトウェアで行なっています。

この程度のシンプルな回路で、ほとんどはPICに任せてしまえばよい、と簡単に考えたのでしたが、基板ができてきて、実際に部品を実装して動作テストをしたところ、思ったほど精度が出なくてしっかり悩んでしまうことになりました。
前回書きましたように、私はTimer1でCCPR1レジスタを使った割り込み処理で思い違いをしていましたが、この周波数カウンタのPICプログラムでも同じようにTimer1とCCPR1レジスタによる割込み処理で1秒の時間を作っていましたから、そこでも気持ちの悪い誤差が発生して原因がわからず悩まされました。
それで結局のところ、Timer1単独での1秒作成はあきらめて、PICの外で4.096MHz水晶発振回路を作り、それを分周して1msパルスを作ってそれをPICに入力して、1秒を作るように改良した周波数カウンタ基板を作ってしまうことになりました。

後になって気がついたのですが、実は改良版周波数カウンタ基板のPICプログラムでも4.096MHz水晶発振+分周回路からの1msをTimer1で1000回カウントしているのですが、そこでもCCPR1レジスタを使っています。
そのプログラムではCCPR1には3E8(1000)を与えています。
なぜ3E7ではなくて3E8でよいのか、今は私にはわかっています。
当初はわかっていなかったので、誤解したまま3E8を使っていました(この場合にはこれで正解だったのですが、それは後になって理解できたことです)。
そのことについても後で書くつもりです。

説明の途中ですが時間がなくなってしまいました。
続きは次回に書くことにいたします。

周波数カウンタ組立キット[第7回]
2015.9.25upload

前へ
次へ
ホームページトップへ戻る