ブザー鳴らせた
まず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
で3回鳴る。
/etc/init.d/S00hwclock-rtc1
で、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 3COUNT=${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
で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音的なの鳴らすようにした。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