カスタマイズApple PiとRTC

以前トラ技の付録のApple Piを作ったのだが、LCDの表示が8桁×2行と少ない。
また、自分では赤外線リモコン機能や温度・湿度・気圧センサはあまり使うことがなさそうだったので、カスタマイズしてみようと思った。

改めて8月号を買って、早速カスタマイズしてみる。
まず、LCDは16桁×2行にしたかったので、I2C低電圧キャラクタ液晶モジュール(16x2行)[バックライト付]を使うことにした。

applepi-lcd
上記のように接続すれば、ハイレゾリューションオーディオDACモジュール MM-5102
に干渉することなく取り付け可能なことがわかった。

appsp01appsp03appsp02
LCDを取り付けるため、3端子レギュレータとトランジスタを表面実装タイプに変更。
3端子レギュレータを低損失CMOS三端子レギュレータ 3.3V150mAに変更。
それに合わせて、C3,C4を1μFに変更し、C1,C2は未使用とする。
赤外線LED用の回路をLCDのバックライト用に流用している。
バックライトも3.3Vから取ればこの辺のトランジスタも不要になるのだが、バックライトのVFが2.7~3.15Vと3.3Vに近いことから、5Vから電源を取っている赤外線LEDの回路を流用することにした。トランジスタは2SC2712-GRに変更し、R4を10KΩ、R7を470Ωに変更した。

appsp07
LCDの/RSTを基板上で10KΩのチップ抵抗でプルアップ。

appsp04appsp05
若干無理やりな感じで、バックライト用の配線を行う。
もう少し細い線を使ってもよかったかも。

appsp06appsp08
LCDを取り付けたら、AppliPi側でNC端子を利用してVDDとGNDを接続。
合わせてSCL,SDAを10KΩのチップ抵抗でプルアップする。

appsp10appsp09
起動時にホスト名とIPアドレスを表示させるスクリプトを実行させるようにした。
以前書いた/etc/network/*.dにスクリプトを置く方法がうまくいかなくなったので、/etc/rc.localにIPアドレスを表示させるスクリプトを実行させている。
ただ、/etc/rc.localで表示させようとしてもタイミング的にIPアドレスを取得できないので、別途IPアドレスを表示させるスクリプトを準備して、バックグラウンドでスクリプトを実行するようにした。
バックライトのON/OFFは既にあるonLED1.*とoffLED1.*をコピーして使用するポートをGPIO13に変更したonLED3.*とoffLED3.*を作成。
他にもinit.shにLED3用の設定を加えたり、LCD関連のスクリプトなどを16桁対応に書き換えたりいろいろ修正している。

/etc/rc.localに以下の内容を追加
ちなみに/root以下にもApplePiを展開してある。

# ApplePi GPIO init
cd /root/ApplePi
./init.sh
./onLED3.sh

# print host infomation
cd /root/script
./ipdisp.sh &

 

/rootにscriptディレクトリを作って、そこにipdisp.shを作成。
16回IPアドレスの取得を試みて、取得できなかった場合はno ip addressと表示するようにしてある。i2c-disp.shは以前作ったスクリプト。

#!/bin/sh

/root/script/i2c-disp.sh -ic `uname -n`
/root/script/i2c-disp.sh -p 0x40

for i in `seq 16`
do
  ipaddr=`hostname -I`
  case "$ipaddr" in
    "")
        /root/script/i2c-disp.sh "."
        ;;
    *)
        break
        ;;
  esac
  sleep 1
done

case "$ipaddr" in
  "")
      /root/script/i2c-disp.sh -p 0x40 "                "
      /root/script/i2c-disp.sh -p 0x40 "no ip address"
      ;;
  *)
      /root/script/i2c-disp.sh -p 0x40 "                "
      /root/script/i2c-disp.sh -p 0x40  ${ipaddr}
      break
      ;;
esac

ただ、LCDを16桁対応しただけではつまらないので、今度はRTCを乗せてみることにした。

まずは以前買ったミニRTCモジュール(販売終了)で動作を確かめる。
RTCをつないでハードウエアクロックとして使う方法はまた別途説明することにする。
rtc01rtc02rtc04
ただ、これだとApplePiの基板には乗せられないので、他にいいものがないか探してみる。

DS1307というRTCがあり、ピンの数も少なくバックアップ用の電源と32.768KHのクリスタルさえあればすぐ使えるという優れもの。
ds1307-1
ds1307-2
クリスタルは秋月で買ったのだが、標準の物より小さいサイズで今回のように小さめにまとめるのにちょうどよかった。
rtc07

まず、試作基板を使って動作の確認。
ディップスイッチでプルアップ抵抗の有無を選択できるようにして、ブレッドボードに刺さるように作ったので、ほかの工作の試作にも流用ができる。
rtc03rtc05

ところでこのDS1307の動作電圧が5Vなのだが、信号は2.2V以上あればHとして認識してくれるので、電源は5Vから取って、I2CはそのままつなぐだけでOK
ds1307-3

rtc06
RTCを取り付ける前の状態。
LCDの基板でI2Cの端子が隠れてしまうため、空きスペースのパターンを削ってI2C用の端子を取り出している。
I2Cの配線はこれまでの動作の確認のため、仮に配線してある。

RTC用のバックアップ電池はCR1220を使用して、それ用のホルダを本来のLCD用のバックライトをつなげるパターンを利用して取り付けた。
問題ないと思うけど、本来のLCD接続用のパターンをポリイミドテープで養生している。

rtc08rtc09
RTCとボタン電池用ホルダーを取り付けたところ。
よく見ると、パスコンをつけ忘れているので後日直すことにしよう。
ICのGNDの部分のレジストをはがし半田付けしているのだが、ICをGNDのピンでしか固定されていない状態なので、ハックルーをつかってクリスタルとIC付近の配線を固定した。
rtc10rtc11
ただ、このハックルーなのだが、これを使うとこて先に溶けたハックルーが焦げ付いてなかなか拭き取れず、以降の半田付けに支障が出てきそうだ。
まぁ、ともかくこれでネットワークにつながっていない状態でも、正しく時間を取得することができるようになった。

次はオリジナルのApplePiにもRTCを取り付けてみることにする。

カテゴリー: RaspberryPi, 電子工作 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください