★高精度リアルタイムクロックの決定版★ ラズパイでも使用可
<RV-8803-C7>高精度リアルタイムクロックモジュールを搭載
月差:3.9秒以内(0〜50℃)・バックアップ 電池付き評価ボード

  • Raspberry-PI にそのまま接続できます
  • 19.5×18.5mmの小型基板
  • 底面に一次リチウムボタン電池を搭載して出荷
  • バックアップ電源切替えのダイオードを搭載済み
  • 小型・低消費電流で高精度の『RV-8803-C7』の評価ボードです。

超小型3.2×1.5mmサイズ・高精度・低消費電流の RTCモジュール『RV-8803-C7』の評価ボードです。
★温度特性:±1.5ppm(0〜+50℃/最大月差±3.88秒以内)かつ ±3.0ppm(-40〜+85℃/最大月差±7.78秒以内)

※RaspberryPI の外付けRTCモジュ―ルとしてもそのままご使用頂けます。

 

※バックアップのリチウム一次電池(CR1025)を搭載し時刻情報を設定した状態で出荷されます。
※バックアップ電池の期待保持期間は10年以上です。

 

@回路接続図

『RV8803-Raspi基板』の回路接続

(クリックで拡大します)

 

・『 SCL / SDA / INT端子』は 基板上で Vddへプルアップされています(10kΩ)。
・『CLKOE 端子』は 10kΩにて GNDへプルダウンされています。
 *実際のアプリケーションでクロック出力を使用しない場合にはCLKOE端子は直接GNDへ接続して下さい。
・『EVI端子』はデフォルトでは 0Ωで GNDに短絡しています。
 この端子を使用する場合は短絡抵抗を外して未実装部分にプルアップ抵抗(10kΩ)を実装して下さい。
  *実際のアプリケーションでもこの端子はオープンにはしないで下さい。
・ ヘッドピンのVddに+5Vを印加される場合は 『#1:3v3』との間にある 0Ω を取り外してご使用下さい。
・ 角ピンソケットの #4端子は NCです(内部接続無し)。
・ 電源切替用のダイオードは『BAS70-05』(Vishay, Diodes 他 )を使用しています。

 

A出荷時の設定〜電池を装着し時刻情報を書き込んで状態で出荷されます

『RV8803-Raspi基板』の出荷時の設定内容

(1) バックアップ電池搭載 ..... 出荷時にCR1025 ・リチウムボタン電池を搭載しています(一次電池)
(2) クロック出力を『1Hz』に設定
(3) 1PPSオフセット設定を書込み
(4) 時刻を書込み設定 ..... 出荷時はUTC時刻 = 日本時間+9時間 に設定

 

BRaspberryPI* へのリナックスドライバインストール

※以下実際に Rasbian を新規インストールしたデフォルトの状態からドライバの組み込みを行った例です。
( I2Cデバイスとして使用する場合にはドライバの組み込みは不要です)

★ テストで使用した RaspberryPI* のバージョン等の情報

 ハードウェア  RaspberryPi 3B
 OS / Kernel

 OS = Rasbian 9.4 /Kernel =4.17.70-v7+ 
 OS = Rasbian 10.9/ Kernel =5.10.17-V7+ (確認 2021/09/30)
 OS = Rasbian 10.11/ Kernel =5.10.63-V7+ (最終確認 2022/01/04)

 

@ リナックスドライバのダウンロード

こちらからリナックスドライバをダウンロード出来ます。ドライバファイルの他にドライバの説明ファイル(PDF/英語)も一緒にダウンロードされますのでそちらもご一読ください。

 

ダウンロードしたRV-8803-C7 用の Linuxドライバ用のファイルをUSBメモリなどでRaspberryPI* の任意のフォルダ(ドキュメントなど)に移しておきます(パソコンからドライバファイルを取得した場合 )。

 

A Raspberry PI* での設定 (I2Cを有効化)

先にRasbian の設定の部分で I2Cインターフェースを有効化しておきます 
RV8803-Raspi基板を RaspberryPI* のピンへ接続し、正しく電気的に接続されていると

 

sudo i2cdetect -y 1

 

を送った際には以下の様に<0x32アドレス>に接続されていることを確認出来ます。
RTC リアルタイムクロック ラズパイ
この状態で I2C経由で RaspberryPi から RV-8803-C7 のレジスタへのアクセス、及び設定が出来ます。
(時刻設定、アラーム、タイマ、周波数オフセット設定など)
任意のプログラムを用いてRV-8803-C7 をIC2デバイスとしてご使用になる場合にはこの後の Linuxドライバの設定は必要ありません。

 

kernel-header をインストール

 以下の kernel-header をインストールします。

 

 ・raspberrypi-kernel-headers
 ( apt-get install raspberrypi-kernel-headers でインストール)

 

Cリナックスドライバ組み込みの作業用フォルダの作成

make KDIR = /usr/src/linux 、または~$ sudo pcmanfm  にて管理者権限で /usr/src/を開いて、ここに作業用フォルダとして"/linux" を作成します。ここにドライバ作成用のファイル (Makefile rtc-rv8803.c) をコピーします。
(管理者権限で行う必要があるので、 ~$ sudo pcmanfm   として管理者権限でフォルダを開きます )

 

make コマンドの実施

 

 カーネルヘッダのインストール後に /usr/src/linux ディレクトリで、

 

 make 

 

 の コマンドを実行するとドライバファイルの "rtc-rv8803.ko" が生成されます。

RTC リアルタイムクロック ラズパイ

 

E 作成されたドライバファイルを必要な場所へ移す

作成された "rtc-rv8803.ko" ドライバファイルを必要な場所へ移動します。

 

modprobe rtc-rv8803

 

のコマンドを使うと、

 

Module rtc-rv8803 not found in directry /lib/modules/4.17.70-v7+

 

とエラーが返ってきますので

 

/lib/modules/4.17.70-v7+/

 

のディレクトリに ドライバファイルをコピーします ( "rtc-rv8803.ko" ファイルのみ )。
( kernel のバージョンにより "4.17.70-v7+" の部分は変わってきますので以降も読み替えて下さい )
(管理者権限で行う必要があるので、 ~$ sudo pcmanfm として管理者権限でフォルダを開きます )

 

depmod コマンドの実施

ここで再度 modprobe rtc-rv8803 のコマンドを使ってもまだエラーになります。これは、

 

/lib/modules/4.17.70-v7+/modules.dep

 

のファイルに rv8803 が反映されていないためです。

RTC リアルタイムクロック ラズパイ

RV-8803-C7 を modules.dep ファイルに反映させるために同ディレクトリで

 

depmod

 

のコマンドを使います。
すると "modules.dep" に rtc-rv8803 が反映され modprobe rtc-rv8803 コマンドが通るようになります。
(ファイルを開くと末尾に rtc-rv8803.ko が登録されていることを確認出来ます)
(ファイル末尾に見つからない場合は検索をかけて確認します)

RTC リアルタイムクロック ラズパイ

 

HWCLOCK として組み込むコマンドの実施

ここで

 

modprobe rtc-rv8803

 

のコマンドと、

 

sudo bash
echo rv8803 0x32 > /sys/class/i2c-adapter/i2c-1/new_device
(管理者権限で実行)

 

のコマンドを送ると、ラズパイに hwclock として認識されます。
正しくHWCLOCK として認識されると、

 

i2cdetect -y 1

 

のコマンドで I2Cリスト を確認した際に rv8803の表示が <32> から <UU> に変わっていてOSの管理下になったことが確認出来ます。
RTC リアルタイムクロック ラズパイ

 

後は ご使用方法に合わせて諸設定を行って頂ければ RasbpberryPi の hwclock としてRV-8803-C7 を使用することが出来ます。

 

時計の初期誤差が気になる場合はネットワークに接続して、時計を再書込みしておけば (hwclock -w コマンド)その後はRaspberryPi本体の電源を落としてもバックアップのリチウム一次電池で時刻情報を正確に保持します。

 

逆にネットワークに接続して RV-8803-C7 の保持している時刻とネットワーク時刻との誤差を確認することも出来ます。

 

★RV-8803-C7 を hwclock に設定した後の動作

ハードウェアクロックとして設定すると

 

demog | grep rv8803

 

のコマンドで電圧低下の状態を確認することが出来ます。
(電池を抜き差しして故意に電圧低下状態を作って上記コマンドで確認した例 )
RTC リアルタイムクロック ラズパイ
Voltage low, temperature compensation stoppted
(電圧が規定値を下回り温度補償動作が停止した)
及び
Voltage low, data is invalid
(電圧が規定値を下回ったため データ=時刻情報 が無効です)

 

のコメントが確認出来ます。このコメントは RV-8803-C7 のフラグレジスタ (0Ehアドレス、または1Ehアドレス)の値を反映しています。このフラグレジスタは値が"1"の時にフラグが立った状態で"0"と書き込むとクリアされます。ラズパイに RV8803のドライバを組み込んで HWCLOCK として動作させている場合は、新たに時刻情報の書き込みが行われるとドライバの動作でこれらのフラグはクリアされます。

Cリナックスドライバインストール後の運用時の
コマンドリファレンス

 

(1) RV-8803-C7 を HWCLOCK に設定し、RV-8803-C7 の時刻をラズパイ(OS)に設定する  

 

modprobe rtc-rv8803
sudo bash
echo rv8803 0x32> /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s

電池交換時の注意

 電池交換直後の場合は上記の書き込みをするとエラーが返ってきます。
これは初期状態では 『RV-8803-C7』の "電圧低下検出フラグ"が立っているため 『hwclock-s』(時刻読み込み)の際に時刻情報が "無効" と判断されるためです。電池交換後には、まずラズパイをネット環境に接続してインターネット時刻になっている状態で『hwclock-w』(時刻書き込み)を実行します。その際にリナックスドライバの動作で時刻情報の書き込みと同時に"電圧低下検出フラグ"がクリアされます。 その後は『hwclock-s』で時刻が読み込めるようになります。
(ご購入直後は既に時刻情報が書き込まれているためこのエラーは起きません)

 

(2) ラズパイ(OS)の時刻(ネットワーク時刻など)を RV-8803-C7に書き込む

 

 sudo hwclock -w

 

(3)RV-8803-C7に設定されている時刻を読み出す

 

 sudo hwclock -r

 

(4) RV-8803-C7 (HWCLOCK)の保持時刻をラズパイ(OS)の時刻に設定する

 

 sudo hwclock -s

 

 

(5)RV-8803-C7 を ラズパイ(OS) の HWCLOCK の設定から外す 
 ( sudo i2c コマンドで直接レジスタを 読込み/書込み 出来るように戻す場合 )

 

 sudo rmmod rtc-rv8803

 

(6) RV-8803-C7 の CLK出力を デフォルトの32.768kHz から 1Hz に変更する

 

 sudo i2cset -y 1 0x32 0x0d 0x08

 

(7) 1Hzの精度をカウンタで測定して、オフセット値を設定する
  ※出荷時には電池装着後に既に個別にオフセット設定してあります。

 

+0.952ppm ....sudo i2cset -y 1 0x32 0x2c 0x04
+0.714ppm ....sudo i2cset -y 1 0x32 0x2c 0x03
+0.477ppm ....sudo i2cset -y 1 0x32 0x2c 0x02
+0.238ppm ....sudo i2cset -y 1 0x32 0x2c 0x01
0.000ppm ....sudo i2cset -y 1 0x32 0x2c 0x00
-0.238ppm ....sudo i2cset -y 1 0x32 0x2c 0x3F
-0.477ppm ....sudo i2cset -y 1 0x32 0x2c 0x3E
-0.714ppm ....sudo i2cset -y 1 0x32 0x2c 0x3D
-0.952ppm ....sudo i2cset -y 1 0x32 0x2c 0x3C
-1.190ppm ....sudo i2cset -y 1 0x32 0x2c 0x3B
-1.428ppm ....sudo i2cset -y 1 0x32 0x2c 0x3A
-1.666ppm ....sudo i2cset -y 1 0x32 0x2c 0x39
-1.904ppm ....sudo i2cset -y 1 0x32 0x2c 0x38
-2.142ppm ....sudo i2cset -y 1 0x32 0x2c 0x37
-2.380ppm ....sudo i2cset -y 1 0x32 0x2c 0x36
-2.618ppm ....sudo i2cset -y 1 0x32 0x2c 0x35

 

 

オフセットの分解能は 『 0.238ppm 』 です。
マイナスの場合はマイナスに設定します。

 

例えば 1Hzの測定値が 『0.999999750Hz』 (-0.25ppm)  だった場合は、

 

sudo i2cset -y 1 0x32 0x2c 0x3F

 

と設定すると 『1.000000Hz』 ちょうどに近い値に設定されます
(この値はリセットがかかるまで保持されます。電源断やリセットで解除されます)

アラーム、タイマ、外部イベント検出、タイムスタンプなどの各機能を使用する場合

アラーム、タイマ、外部イベント検出、タイムスタンプなどの各機能を使用する場合には、一旦HWCLOCK の設定を外して I2Cモード の状態で直接レジスタに値を書き込んで設定します。
 ( sudo i2cset -y 1 0x32 0x** 0x** と送ります )

 

 → RV-8803-C7 のレジスタ設定方法について

 

------------------------------------------------------------------------------
Raspberry PI は、RaspberryPI 財団の登録商標です。
※こちらの記事内容の作成及び 上記基板の提供等についてRaspberry PI財団 は一切関与はしておりません。

 

Arduino は、Arduino LLCおよびArduino SRLの登録商標です。
------------------------------------------------------------------------------
(免責事項)
当サイト上の情報・資料の掲載には細心の注意を払っておりますが、当サイトに掲載されている情報・資料をご利用されて直接または間接的に生じたいかなる損害についても当社は一切の責任を負うものではありません。