RTCのズレを補正したい 

 

 というわけで、RTCのズレを何とかしたいと思っている。
前回の記事をまだ見ていない人はこちらからぜひ。

 

 

 

 RTCがズレる原因は簡単に言うと低速オンチップオシレータであるLOCOに誤差があるからだ。
じゃあLOCOの周波数を測ればいいじゃん、となるが、どうやって? という問題にぶち当たる。
 RA4M1マイコンには「クロック周波数精度測定回路(CAC)」という機能もあるにはあるのだが、これはコンマ数Hzを測定できるものではない。
もしCACを使うとしたら、かなり高精度な周波数を基準クロックとして入力してやる必要がありそうだ。

 どうしようかといろいろ調べてたらある物に気が付いた。
RA4M1マイコンのマニュアル626ページの「RTC のブロック図」の中で、128Hzを生成しているプリスケーラの中に"RADJ"と"RFRH"と"RFRL"というレジスタがあるのに気が付いた。
おそらくこれで補正しているのではないかと。
"RADJ"というのは、「時計誤差補正レジスタ」というそのまんまの名前だが、残念ながらこのレジスタはサブクロック発振器を選択した場合にのみ使用可能とのこと。
となると、どうやら"RFRH"と"RFRL"というレジスタでLOCOの周波数を補正できるようだ。

 レジスタ値を変えれば補正できるようだが、RTC動作中は変えられない。 なので動作中にリニアに変更させたりはできない。
RADJレジスタは動作中に変えるようなので、サブクロック発振器を使用した場合はリニアに変えられそうだ。

 では、補正値はどのように設定したらよいのだろうか。
それにはやはりLOCOの正確な周波数を計測するのがよいと思うのだが、どうやって測定するかが問題となる。
その方法は次回。