RTC-8564NB」タグアーカイブ

新型シャーシ用インターフェースボード

新型シャーシには、2つの白色LEDと4つの赤色LEDを新設しました。 その信号線を引き出すために、インターフェースボードを再構成しました。 少々高価ではありますが、今回はサンハヤトのRaspberry Pi B+ 用ユニバーサル基板 UB-RPI02 を使用し、RTC、バックアップ用バッテリー、LEDドライバー等を搭載。 それ以外のモータードライバーを中心とした回路を、14Pフラットケーブルで接続する構成です。

インターフェースボード

インターフェースボード

モータードライバーボード

モータードライバーボード

実装した状態

実装した状態

RaspberryPi2のリセット端子

RaspberryPi2のリセット端子

RTCのアラーム出力をRaspberry Pi本体のRUN端子(リセット端子)と接続するため、インターフェースボード側にもピンヘッダを設けました。 RUN端子との位置が微妙にずれているので、若干角度をつけ、なんとか接続できています。 RTCのアラーム出力(INT)の回路も一部変更し、安定して動作しています。

そして回路はこのようになりました。

インターフェースボード

インターフェースボード

モータードライバーボード

インターフェースボードに使用したサンハヤトのRaspberry Pi B+ 用ユニバーサル基板は、両面スルーホールで大変品質もよく、基板上にGPIOのピンアサインが表示されているので、ちょっとした回路の作成にはぴったり、お薦めです。 お安くはありませんが、複数用意しておきたいですね。 (かなりの宣伝?)

2016.11.12追記 秋月電子通商さんからRaspberry Pi 用ユニバーサル基板が発売されていました。価格は150円。 安い!

Raspbian最新カーネルでRTCの不具合が解消

RasPi2でリアルタイムクロック RTC-8564NB を使用する」で発生していたhwclockコマンドの不具合は、最新カーネル(4.0) へのアップデートにより、あっさり解消しました。 ハードウェアも、ショットキーバリアダイオードを介しバックアップ用ボタン電池を接続。 本来の使い方ができるようになると思っていましたが…。

clock

NTPサーバへのネットワークを切断した状態で起動すると、システムクロック・ハードウェアクロック共に初期化される現象に悩まされました。 アラームを設定しシャットダウンしてみると、指定した時間にアラーム出力は出ているので、どうやら、起動時に初期化されているようです。

hさんのサイトを参考にhwclock.shを修正してみましたが改善されず、さまざまなサービスや起動コマンドを停止しながら現象を確認しました。

結局、時刻合わせの為に有効となっているNTPデーモンが、上位サーバと通信できない時にシステムクロック・ハードウェアクロックを初期化していたことがわかりました。

NTPデーモンを停止し、代わりにNTPクライアントのntpdateをインストール。 1時間毎に実行する様cronへ設定し、システムクロック・ハードウェアクロックの問題は全面解決となりました。

OSインストール直後からのRTC設定手順です。

  1. /boot/config.txtへ
    dtoverlay=i2c-rtc,pcf8563 を追加
  2. /etc/modulesへ
    i2c-dev
    rtc-pcf8563 を追加
  3. /etc/rc.localへ
    hwclock -s を追加
  4. fake-hwclock
    ntp を無効化
  5. ntpdate をインストール
  6. cronへ
    ntpdate -v ntp.nict.jp を設定し定期実行

 

参考にさせていただいたサイト

Raspberry Piにリアルタイムクロックをインストールする

ntpdate – 日付と時刻をNTPサーバーと同期 – Linuxコマンド

 

 

RasPi2でリアルタイムクロック RTC-8564NB を使用する

RasPi2に切り替えてから特に大きな問題はなく安定して動作していますが、ある時、hwclockコマンドが使えないことが発覚しました。 現在、RTCに役割はありませんが、電源制御の予定もあり、なにより気持ちがよくありません。

RTC-8564NB

どうやら、デバイスの設定方法がデバイスツリーというものに変わった為の様でした。

例によって、フォーラムに情報がありました。 「PI2でRTC PCF8563が動作しない

この情報によると、hwclockの最新バージョンをコンパイルしてインストールするというものです。 実際の手順は…

  1. /boot/config.txt に dtoverlay=i2c-rtc,pcf8563 を追加
  2. hwclockの最新バージョンをダウンロード・コンパイル
    wget https://www.kernel.org/pub/linux/utils/util-linux/v2.26/util-linux-2.26.1.tar.gz
    tar zxvf util-linux-2.26.1.tar.gz
    cd util-linux-2.26.1
    (apt-get install gcc)  ※gcc導入済みであれば不要
    ./configure –without-python –without-systemd –without-ncurses
    make hwclock
  3. hwclock-rtc.cファイルを編集(debugオプション使用時の修正)

必要に応じ、util-linux-2.26.1の下に生成されたhwclockコマンドファイルを /sbin へコピーします。

手順3.の修正ですがこちらを参考にhwclock-rtc.cファイルを編集後、コンパイルを実行しましたが、debugオプション使用時のエラーは修正されませんでした。

若干の問題はあるものの、hwclockコマンドやアラームの操作が可能となりました。 RasPi2はシャットダウン状態からの起動に必要なリセット端子が外部に引き出されていない為、その辺りが今後の課題です。

 

※displayコネクタの横にリセット端子がありました。  2015.5.6追記

※hwclockコマンドは完全と言える状態ではありませんが、アラームについては、シェルスクリプト(alarm.sh) を使用して設定することにより実用上問題ない状態にはなりました。 2015.5.17追記

参考:http://d.hatena.ne.jp/payapara/20090626/1246029897

※カーネルの更新で不具合は解消しました。 「Raspbian最新カーネルでRTCの不具合が解消」 2015.7.19追記

 

RTC関連コマンド

ハードウェアクロックを表示
hwclock -r
ハードウェアクロックをシステムクロックと同期
hwclock -w
RTCの状態表示
cat /proc/driver/rtc
RTCアラームのリセット
echo 0 > /sys/class/rtc/rtc0/wakealarm
RTCアラームを60秒後に設定
echo +60 > /sys/class/rtc/rtc0/wakealarm
UNIXエポックからの経過時間を表示
cat /sys/class/rtc/rtc0/since_epoch