SHT31の暗電流が多い気がする

現在 SHT11 と SHT31 両方で室温と湿度を測っていますが、SHT11 の方は単4電池で1年近く持ったのに、SHT31 は単3電池でも 200 日くらいで電圧低下警告が出て止まってしまいました。

SHT31 が I2C であるのに対し、SHT11 が特殊なプロトコルだからかなとも思いましたが、自信はなし。CPU はどちらも TWEDIP を使っているので条件は同じだと思うのですが。

ちなみに SHT31 の高精度モードを使うと著しく電池のヘリが大きいです。

今更 Vocaloid を買ってみた

今まで使っていた PC が6年目を迎え、流石にWindows8.1だと辛くなってきたので、この際 MacBook Pro に乗り換えることにした。

で、なんとなくノリで Logic Pro X を買ってしまい、当然 Vocaloid5 も入れてしまった。

Vocaloid4 まではパラメータ調製が大変というイメージがあったが、5ではメニューから選んでかけ具合を調整するという形式に変更されたため、細かい調製は出来なくなっている。

喋り方はほぼ自動で制御してくれるので楽チンなのだが、音程が大きく下がって伸ばす音だと勝手にしゃくりを入れてしまうなど、若干使いにくいところもある。

付属の音声には英語と日本語があるが、英語がチンプンカンプンの私としては英語で歌詞を書くのはキツイですな。声質はどれも特徴的で一長一短という感じで曲想に合わせて使い分けていくことになるようです。

オーディオパラメータが大量に追加されているが、Logic Pro X を使う場合はそちらのエフェクターを使うと思うので、過剰な機能かなと思います。ただワンタッチでエフェクターを外して WAV ファイルを作成できるのは素晴らしい。

Logic Pro X は機能が多くてまだ覚えられません…
「Logic Pro X+ VOCALOID3 Editor 初心者からのステップアップ for Mac」という本をアマゾンで見つけて読み始めたが、MIXING で挫折しそうになっています。

Ultra96 の mini Display Port

Ultra96 は mini DisplayPort 端子なので、テレビに映したいと思い、パッシブ系の変換ケーブルを買ってきた。

違うメーカーのケーブル 2本買ってみたが、どちらもダメだった。どうやら Ultra96 のビデオ出力はデュアルモードがサポートされていない模様。

もちろん、Display Port への変換ケーブルは機能するので、DP 付きのモニタを使えばよいのだが、10インチ位のディスプレイは HDMI しかサポートしていなかったりする。

仕方がないので、HDMI モニタはラズパイ用にします。

PetaLinux 2018.2 エディションで Ultra96 の wlan1 の dhcp クライアントを使う

Ultra96 ボードを Vivado 2018.2 および PetaLinux 2018.2 から dhcp クライアントとして wlan1 を使用する場合のメモ書きです。

Ultra96 には WiFi チップが乗っていますが、デフォルトでは phy の存在までしか認識されず、wlanX インタフェースを明示的に作成する必要があるようです。

そこで、Ultra96 の wlan1 をWiFiルータに接続するための手順をまとめてみました。

ちなみに、2018.3 にはどうも必要なファイルが足りていないらしく、initramfs からのブートすら出来ませんでした。

  • Xilinx の PetaLinux 2018.2 ダウンロードコーナーにある Ultra96 の BSP をダウンロードする。
  • petalinux-create -t project -s <BSP ファイル名> でプロジェクトを展開する。
  • petalinux-config -c kernel で WiFi チップのデバドラがあることを確認する。
    (デフォルトで入っているので通常はいじらなくてOK)
  • petalinux-config -c rootfs で User packages を選択し、
    packagegroup-petalinux-ultra96-webapp
    ultra96-ap-setup
    のチェックを外す。
  • Filesystem backages => base => busybox にある busybox-udhcpc のチェックをつける。
  • petalinux-config でブート先が SD カードになっていることを確認する。
    (本BSPはデフォルトで SD カードブートになっているので、通常はいじらなくてOK)
  • petalinux-build でコンパイルする。気長に待つ。
  • コンパイルが終了したら、images/linux ディレクトリに降り、
    petalinux-build --boot --force --fsbl zynqmp_fsbl.elf --fpga system.bit --pmufw pmufw.elf --u-boot

    で BOOT.BIN を構築する。

  • sudo su で root ユーザになっておく。また /mnt に何もマウントしていないことを確認する。
  • この投稿の後ろの方に示すスクリプトを走らせ、起動時に wlan1 を作成して udhcpc を起動するようにする。
  • SD カードをセットして、マウントする。/dev/sdX1 (X はお使いのPCによって変わります。私のPCでは “d” でした。) の場合は
    mount -t vfat /dev/sdX1 /mnt

    として、/mnt に FAT32 パーティションをマウントする。

  • BOOT.BIN, image.ub を FAT32 パーティションにコピーする。
    cp -fp BOOT.BIN image.ub /mnt
  • アンマウントして先ほど編集した rootfs.ext4 を dd コマンドで /dev/sdX2 にコピーする。
    umount /mnt
    dd if=rootfs.ext4 of=/dev/sdX2 bs=1M

    これも時間がかかるので気長に待つ。

  • お好みで e2fsck, resize2fs をかけて割り当てたパーティション全体が使用できるようにする。
    e2fsck -f /dev/sdX2
    resize2fs /dev/sdX2

     

以上のように作成した SD カードを Ultra96 に挿して起動すると、wpa_supplicant.conf で指定した WiFi  ルータにつながるようになります。

最後に、rootfs.ext4 を編集するスクリプトを掲載します。SSID, PSK にはお手持ちの環境に合った値を入れて下さい。

#!/bin/bash

mount -t ext4 -o loop rootfs.ext4 /mnt

cat <<EOF >/mnt/etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
        key_mgmt=WPA-PSK
        ssid=""
        #psk=""
        psk=
}
EOF

sed 's/wlan0/wlan1/g' /mnt/etc/network/interfaces > '/mnt/etc/network/interfaces
.XXX'
mv '/mnt/etc/network/interfaces.XXX' /mnt/etc/network/interfaces
cat <<EOF >/mnt/etc/init.d/ultra96-wlan1.sh
#! /bin/sh

### BEGIN INIT INFO
# Provides: Ultra96 wlan1 interface
# Required-Start:
# Required-Stop:
# Default-Start:S
# Default-Stop:
# Short-Description: attaches Ultra96 wlan1
# Description:       attaches Ultra96 wlan1
### END INIT INFO

DESC="ultra96-power-button.sh powers off the board when the power button is pushed"

case "\$1" in
  start)
    echo -n "Start Ultra96 wlan1"
    iw phy phy0 interface add wlan1 type managed
    echo "."
    ;;
  stop)
    echo -n "Stop Ultra96 wlan1"
    ifconfig wlan1 down
    ;;
  *)
    echo "Usage: /etc/init.d/ultra96-wlan1.sh {start|stop}"
    exit 1
esac

exit 0
EOF

chmod +x /mnt/etc/init.d/ultra96-wlan1.sh

rm -f /mnt/etc/rcS.d/S99ultra96-wlan1.sh

pushd /mnt/etc/rcS.d

ln -s ../init.d/ultra96-wlan1.sh S99ultra96-wlan1.sh

popd

umount /mnt

 

petalinux 2018.2 で ZYBO の eth0 を使う

本当に久々の記事更新です。
既知の問題かも知れませんが、散々ぐぐっても出てこなかったので、ここにメモしておきます。

petalinux 2018.2 を使い、ZYBO (Z7 ではなくて古いボード) の eth0 を使おうとしたところ

macb e000b000.ethernet eth0: unable to generate target frequency: 125000000 Hz

という謎のエラーが出て PHY チップと通信できない問題が発生。

ぐぐってもよくわからず、最終的に

https://github.com/wzab/Z-turn-examples/blob/master/README.md

を読んで気づきました。Vivado 2018.2 では ZYNQ-7000 の ENET0 のクロックソースがデフォルトで External になっていることを…。

記事にある通り、IO PLL に設定して hdf ファイルを再作成し、petalinux を再コンパイルしたところ、問題なくリンクが上がりました。
(petalinux 設定はこのサイトを見て実行しました。また、eth0 ポートは GbE に挿してください。)

あとはジャマな IPv6 設定を

echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

として無効化し、udhcpc を再起動すると IPv4 アドレスが無事、家庭内ルータから取得できました。

 

自作PCを無償譲渡

お世話になった支援施設に自作PCを進呈することになりました。
スペックは Core i7 860 と初代 Core i7 ですが、Windows10 を
載せてみると意外に快適に動きました。

このPC、今は懐かしい東芝の SpursEngine が乗っていて、
ビデオ圧縮の速さは今なおダントツです。
(ビデオカードは nVidia GT640なのでCUDAも動きますが、
非力です)

その他、HDDが2TB×2発乗っていたりして、完全にビデオ編集向け
仕様なのですが、きっとオーバースペックだろうなあ。

TWELite が電池を消費する問題(3)

TWELite を変更して2週間経過したが、電源電圧は3.08Vと
3V台をキープしている。このまま行けば、最低1か月は
持つのではないだろうか。

変更したのは TWELite デバイスと繰り返し精度を「低」に
にしたことだが、繰り返し精度が消費電力に影響するとは
思えないので、やはり購入したデバイスが外れだったと
考えるのが妥当だろう。

TWELite が2日で電池を消費する問題(2)

PWM, ADC, OUTポート、I2C, SIO と次々に切っていっても
電池を消費してしまうため、試しに SHT31 だけを電池に
つないで放置してみた。

2時間経過しても電源電圧に変化なしだったので、
これは TWELite 側の問題だなと確信し、デバイスを別の
ものに変えてみた。

3時間経過後、電源電圧は降下していていなかったので、
おそらく予想が当たっていたのではないだろうか。

間欠モードだが電池を2日で消費

SHT31 ベースの温湿度計を動かして2日しか経たないのに
単4電池の電圧が2Vに低下して停止してしまった。

どうやらどこかで暗電流が流れているらしい。

仕方がないので、ポート, ADC, PWM のプルアップを全て停止し、
電池を単3電池に変更して実地検証している。(オプション
ビットは0x800836)

これでも電池が持たないようなら… 回路を検討し直さないと
いけないかも。

TWELite のモード7でwatchdog timeout? 発生

久しぶりにモノワイアレス社の TWELite を購入し、秋月電子通商の
SHT31キットを使って無線温湿度計を作ってみた。

モード7を60秒間欠で動かして消費電力を抑える。
単4電池2本でどのくらい持つだろうか?

ところで、ウォッチドッグと思われるタイムアウトに悩まされたのでメモ。

  1. ボタン入力、ADC、PWM といったI/O系をすべて外してはまる。
    シリアル入力から何も入力できず、5秒後にリセットされる現象が発生。
    何が原因か判然としないが、ボタン入力を復活させたら起きなくなった。
  2. モード7しか使わなくてもモード0は残すべし。
    ライターはモード0で起動するため、そうしないとEEPROMの
    書き換えが出来なくなる。
  3. PWMを使っていなければPWMタイマーは触るな。
    初期化されていないタイマーを止めると動作が停止し、5秒後にリセット
    されるようだ。vAHI_StopWatchdog() を呼び出してもこの現象は
    変わらなかった。

以前、SHT11ベースの温湿度計を作成したが、それとの差が
かなりある状態。簡易マニュアルには室温になれるのに数日要する
ようなことが書いてあるので、気長に待ちます。