Si5351Aを応用する その3 TCXO時計
- 2016/03/24 12:37
- カテゴリー:make:
TCXOを時計に使うという話については,以前ここにも書いたとおり,aitendoの時計キットのクロックである12MHzを,デジットで売っている12MHzのTCXOにすることで,ほぼずれることがなくなりました。
これで私はTCXOの威力を思い知ったわけですが,TCXOは高価ですし,使い勝手のいい周波数があるわけではないのです。これこそSi5351Aを使う動機になります。
Si5351Aの設定に2ピン,あとはボタンの最低2つ,Si5351からの正確なクロックの入力に1つと,これで5本の端子が必要です。これに一番数の必要なディスプレイを考えると,tiny13Aでは作れそうにありません。
いやいや,まてまて。手元に100円で買ったaitendoのI2CセグメントLCDがあるじゃないか。
無駄に大きなLCDで,数字が出るのは下側の1/3ほど。後のセグメントは簡体字だったりするので,怪しさがもうビリビリきてしまいます。
I2Cなら,SI5351Aと共用できますから,tiny13Aでも足ります。よし,これでいくか。
まず,tiny13Aはタイマ/カウンタが8ビットです。しかもカウンタへの外部からの入力はプリスケーラも挟めないので,分周は最大でも1/256です。
CPUクロックをタイマにも入れる場合であればプリスケーラを通せますのですっきりまとまりそうな気もしますが,Si5351Aからクロックが出るのは,Si5351Aの設定が済んでからです。CPUの動作クロックが入ってこないのに,どうやってSi5351Aを設定するのか・・・
なので,RC発振の内部クロックでCPUを動作させ,Si5351Aで生成したクロックをタイマに突っ込むことにします。精度はタイマへのクロックで決まりますし,CPUのクロックは処理が間に合えば精度はあまり関係ありません。今回はCPUクロックに1.2MHzを選びます。
SI5351Aで生成するクロックは,当初4.194304MHzにするつもりだったのですが,前述の理由で分周が足りず,ここは素直に32.768kHzにします。Si5351は3kHzから生成出来ますので,これでいきましょう。
これをタイマーの標準動作で1/256ごとに割り込みを発生させ,用意した他の変数で128個数えます。128になったら1秒ですので,あとは普通に時計を作るだけです。
また,aitendoのLCDですが,先人達の苦労のおかげで,割に簡単に動かす事が出来ました。数字だけ表示に限定し,表示桁と数字を指定すればそこに表示される関数を作って,おしまい。
割り込み処理のルーチンは,次に発生する割り込みに間に合わないという最悪の事態を避けるために出来るだけ軽く作るのがセオリーなのですが,秒や分の桁のリセットがちょっとずれてしまい,60と表示が出てしまうことがあるので,時分秒のカウンタの更新とリセットまで,割り込み処理でやってしまいます。
メインでは,表示だけです。本当は,表示も1秒に1回だけにすべきなんでしょうけど,割り込み内で表示までやってしまうのは時間的に無理そうなので,やめました。
ボタンは2つだけ,これも簡単に書いて,時計が出来上がりました。TCXOですので,ズレはほとんどないと思います。長期試験で様子を見ようと思います。
これでプログラムは95%ほど使いました。EEPROMは100%ですし,13Aを結構ギリギリまで使った感じです。Si5351Aの設定に60%ほど使っているのが,痛いです。
これはLCDの裏側に配置した基板の写真です。左から3.3VのLDO,tiny13,Si5351とその裏側に26MHzのTCXO,スイッチが2つならんでいます。
・・・あれ,まてよ。TCXOが欲しいだけなら,Si5351Aを使う事なんかないんじゃないのか?
外部クロックにTCXOの10MHzを突っ込み,これをプリスケーラで1/64,さらにタイマで1/250して割り込みを書かけ,625カウントで1秒とすれば,Si5351Aなんかなくても正確な時計が出来るじゃないか?
ちょっとやってみたら,出来ました。なんだかバカバカしい結果ですが,これは32.768kHzを作る実験と,32.768kHzで時計を動かす実験だと思うことにします。
・・・と思ったら,なんとTCXOを内蔵したリアルタイムクロックICが売られていることに気が付きました。2ppmとか3ppmらしいです。しかもカレンダーも内蔵,低消費電力とくれば,もう電池駆動も夢じゃありません。
うーん,今回の工作は,そもそもの存在意義を問われる結果となりました。
さてさて,SI5351Aを使うために久々にAVRをいじり,tiny13Aという小粒のマイコンで案外いろいろ出来そうだと,その面白さに目覚めてしまった私は,もうSI5351Aに関係なくtiny13Aであれこれ作ってみることにしました。
次回から数回,tiny13Aの作例を紹介します。