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

ブザー鳴らせた

先日作ったPCF8523のRTCモジュールでブザーが鳴らせなかった問題が解決して鳴らせた。

まずOrange Pi R1(Zero初代も)なんだが、7番ピンがPWM1になってるが、実は嘘で7番ピンはGPIO以外の機能がない。
で、Linux 6.18に変更して7番ピンでpwm-gpioを使えるようにしたんだが鳴らなくて、7番ピンがPA7と思ってdts書いてたんだが7番ピンはPA6だった。

それ修正したらテスターで7番ピンでpwm-gpioが機能してるのは確認できたんだが鳴らなかった。
原因がN-MOSFETに昔買ったAO3406を使ってたんだが、3.3VのパルスでAO3406がONできてない疑い。

つーわけで、1.5V駆動のSSM3K345Rを買うことにしたんだが、SSM3K345Rを東芝のじゃなくて同じ型番の中華互換品を買っちゃった。
で、注文したあとにデータシートで性能が同じじゃないことに気づいて、中華互換品は2.5V駆動だった。
失敗したと思ったんだが、今日届いてN-MOSを交換してみたらブザー鳴った。
前の回路図通りだが17Ωブザーに直列10Ω抵抗を入れてる。(鳴らない問題で一度2階建ての5Ωにしてたから戻した。)

/var/bin/beep.sh
#!/bin/sh
COUNT=${1:-1}
echo 0 > /sys/class/pwm/pwmchip0/export
sleep 0.1
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 250000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
for i in $(seq 1 $COUNT); do
    echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
    sleep 0.2
    echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
    sleep 0.2
done
/var/bin/beep.sh 3
で3回鳴る。

/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)"
                                /var/bin/beep.sh 3 &
                        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
起動時にボードを装着してるがRTCがバグってる場合は電池切れとしてBeep音的なの鳴らすようにした。