ジャンル不定の日記です。

PCF8523TのRTCモジュールできた

ブザー回路の部品届いたんでPCF8523TのRTCモジュールにピンソケットつけてOrange Pi R1につけて機能した。
CR1616電池ソケットつけるんだが電池ソケットはまだつけてない。(電池も買ってない)
CR927がついた中華DS3231モジュールは電池が数ヶ月で切れるはずで電池交換もできないが、CR1616+PCF8523Tなら10年持つ?上にソケットつけるんで電池交換できる。

回路図
PCB

CR1616電池ソケットにサイズを合わせるとPCF8523だけだと面積が余るんでEEPROM(AT24C128)つけて、
まだ余るのとOrange Pi R1のピンでI2C使う場合1,3,5,9番ピンになるが間の7番ピンがPWM1なんでパッシブブザー(4020)つけて電池切れの場合はBeep音鳴らす計画だった。
だが、Orange Pi R17番ピンがPWM1ってのは実は嘘で7番ピンにはPWM機能がない。
で、ブザーはつけたからソフトウェアで鳴らせると思ってたがとりあえず鳴らせなかった。
端子自体はテスター異常ないんで、ソフトPWMのやり方に問題があったか、ブザーが壊れてるか制御用のMOS-FETが壊れてるか、それか電流制限で17Ωブザーと直列に10Ω抵抗入れたのに問題があるか・・・

EEPROMはシャットダウン時の時刻記憶にSPIフラッシュ使わずにEEPROMに記録する。

修正起動スクリプト
/etc/init.d/S00hwclock-rtc1
#!/bin/sh

case "$1" in
    start)
        if [ -e /dev/rtc1 ] && hwclock -f /dev/rtc1 >/dev/null 2>&1; then
                    hwclock -s -f /dev/rtc1
        else
                    if [ -e /sys/bus/i2c/devices/0-0050/eeprom ]; then
                        date -s "$(head -c 19 /sys/bus/i2c/devices/0-0050/eeprom)"
                    else
                        date -s "$(date -r /var/time +'%Y-%m-%d %H:%M:%S')"
                    fi
        fi
        ;;
    stop)
        if [ -e /sys/bus/i2c/devices/0-0050/eeprom ]; then
                    date +'%Y-%m-%d %H:%M:%S' > /sys/bus/i2c/devices/0-0050/eeprom
                else
                    touch /var/time
        fi
                if [ -e /dev/rtc1 ]; then
                    hwclock -w -f /dev/rtc1
                fi
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac

exit 0

DS3231は電池切れると2000年1月1日に戻りそうだったが、PCF8523は電池切れるとhwclockで読めないぽい。
最初装着した時エラーでたから回路があかんのかと思った。