今回はマイコンを使って周波数カウンタを作ろうとしています。
前回の記事はこちらです。
【電子工作】AVR128DA28で100MHz周波数カウンタに挑戦#1 ― 構想と方式選定 ―
前回は100MHz周波数カウンタの構想と方式選定について書きました。
このプロジェクトの基本になるのは、
technoblogy(David Johnson-Davies氏)のATtiny414周波数計の記事です。
100MHz Frequency Meter
まずは、ATtiny1614でDavid Johnson-Davies氏の非同期TCD方式の再現に成功しました。
15.997997 MHzの高精度表示が出て感動したんですが…
・低周波帯でTCBにOVF割り込みがない → レシプロカル方式併用が厳しい
・フラッシュ16KB・ピン数14ピンではギリギリすぎて拡張がほぼ不可能
というわけで、tinyAVR 1シリーズから、よりリソース豊富で高性能なAVR Dxシリーズの
AVR128DA28(Flash128kB・28ピン)に移植を開始します!
今回はまず、Davidさんの100MHz周波数計「非同期TCD 1秒ゲート方式」をAVR128DA28
でおなじレベルまで動かすところまで持っていきます。
今回の到達目標:
・測定方式:ダイレクトカウント方式
・ゲート時間:1.000秒(RTC基準)
・使用マイコン:AVR128DA28
・クロック:内部24MHz
・カウンタ:TCD0(非同期)
・結果出力:LCD (128x32表示)
回路構成
ブロック図
┌────────────────────────────────┐
│ 100MHz周波数カウンタ(ゲート方式) │
├────────────────────────────────┤
│ ↓ 外部信号 │
│ EXTCLK (PA0) → TCD0(12bit非同期カウンタ) │
│ ↓ OVF │
│ OVF_CNT(16bit拡張ソフトカウンタ) │
│ ↑ キャプチャ │
│ RTC(1秒ゲート) │
│ ↑ │
│ 32.768kHz水晶 │
│ │
│ 結果 = (OVF_CNT << 12) | TCD0 = 28bit = 周波数 │
│ │
└───────────────────────────────-─┘
回路図
測定原理
TCD0が外部信号(PA0)を非同期カウント(12bit: 0~4095)
ソフトウェアカウンタでTCD0のOVFを加算し28bit化する
RTC OVF(1秒)→ EVSYSでTCD0をキャプチャ
すべてハードウェア完結 → CPU負荷ほぼゼロ(制御・表示のみ)
ここから先の検討の記録は備忘録としてNoteにまとめています。
ぜひこちらからご覧ください。


