獣医さんの電子工作とパソコン研究室 |
39-2.トラ技付録基板 R8C/Tiny オシレーター&周波数カウンタの実験 |
■ とても便利なR8C/Tinyマイコン |
当初の目標とは別の方向に向いてきましたが、今回はR8C/Tinyを使って周波数可変式のオシレーターを作ってみました。ついでに周波数カウンタも作って、自分で発振して自分で周波数を測定するなどというばかばかしい実験もしてみました。 |
発振波形の様子
|
発生した波形を実測してみました。手持ちの周波数カウンタはMETEXテスタしかないので、テスタでの測定値です。 左のグラフを見るとTM1レジスタ値が50を切るあたり(400KHz以上)から誤差が大きくなっています。 分周比の大きい部分で使用したほうがより精度の良い発振周波数が得られるということがわかります。 |
|
■ 周波数カウンタ |
周波数カウンタ実現のための基本的動作原理は、ある一定のゲートタイムの間にパルスがいくつ入ってきたかを計測するというものです。 R8C/Tiny関係の資料を物色していたら、トランジスタ技術 2005年2月号 連載
第4回 R8C/Tinyマイコン入門 に周波数カウンタの製作記事が出ていましたので、これを参考にさせていただきました。 ゲートタイムは1秒とし、この生成にはタイマZのタイマ・モードを使用します。タイマZは8ビットのダウンカウンタで、クロックの選択は1/1、1/2、1/8、外部のいずれから選べます。 トラ技の記事では高精度水晶発振器を外部につけていますが、今回は実験のためMB-R8CQに内臓の発振子を使います。 20MHzを1/8したものをクロックとしても、最長で約38msの周期にしかなりませんので、タイマZのプリスケーラに250、TZPRレジスタに250を設定して、25ms間隔で割り込みが発生するようにしておき、割り込みが40回発生することで1秒としています。 |
実際の入力パルスのカウントはタイマXのイベント・カウンタモードを使用して計数します。 8ビットのダウンカウンタで、プリスケーラカウンタとあわせて16ビット幅の計数しかできませんので、カウンタがアンダーフローを起こしたものをチェックして、16ビット以上の計数を可能にしています。 |
上図で、タイマXがスタートするのに1命令の遅れ、タイマZ、40回目の割り込みからタイマXが停止するまでにも数命令分の遅れがありますので、完全に1秒間の計数というわけではありません。 計数値はLCDに表示しますが、3桁ずつのカンマや不必要なゼロを表示しないように工夫してみました。(プログラム参照してください) まだまだ、表示方法には工夫する余地がありますし、ゲートタイムもいくつか選択できるようにするのも良いかと思います。 |
左の表がLTC1799オシレーターモジュールを製作した周波数カウンタで測定した時のものです。LTC1799の出力を直接R8Cに入力しています。30MHzまでは測定できました。 METEXのテスタでの測定値と概ね比例していました。誤差が、低い周波数で多くなる傾向がありました。 |
右の表は自分で発振したものを自分で測定した結果です。 |
■ 全体の回路図とプログラム | |
全体の回路は39-1で実験したものと、ほとんど同じですが、出力の関係でLCDのピンを移動しています。 出力ポートがなくなってしまったので、圧電ブザーをP1_4端子(LCD)に接続すると、ゲートタイム毎に鳴って動作確認にちょうど良くなりました。 最終的なプログラムはこちらです。 |
|
オープニング画面、必要ないですね。 | 発振周波数のセット画面 |
周波数カウンタの表示方法切替画面 | 周波数カウンタ、測定中の画面 |
参考文献 トランジスタ技術 2005/2 連載 第4回 R8C/Tinyマイコン入門 トランジスタ技術 2005/5 特集 R8C/Tinyマイコン徹底マスタ |
|
というわけで、簡単な回路で周波数カウンタが組めそうです。 精度の良いものはクロックに高精度の外部発振子を使わなければならないでしょうし、ゲートタイムも変更できるようにしたほうが良いと思われます。 今回は、R8Cの勉強ということでブレッドボード上での実験にとどまりましたが、とにかくPC上で開発したものをすぐに転送して、ステップ動作で動作確認が出来、たいへん便利であるということに尽きると思います。 さて、最終目標までに寄り道しましたが、次の実験アイディアが出てきてしまったので、そちらをやってみようと思います。 |
Last up date 2007/7/1 | |