さて、仮組みをしたはいいものの問題が発生している LM75A温度センサーの動作について引き続き検証をしてみます。
考えられる理由として
- はんだ付けがまずく、接触不良を起こしている。
- LM75A温度センサーのモジュールが壊れている。
- なにかとバッティングしている。
を考えてみました。
- はんだ付けは、ブレッドボードに装着後テスターで導通チェックするも問題は無さそう。
- モジュールに関しては、i2cdetect で何かあるため生きていると仮定。
- バッティングですかね?
と当たりを付けチェックしてみることにしました。
$ sudo ls /sys/class/i2c-adapter/i2c-0/
0-0048 delete_device i2c-dev new_device subsystem
0-0077 device name power uevent
なにやら 0-0048 と怪しげ(?)なディレクトリがあるではないですか。0-0048 の中身をのぞいてみると
$ sudo ls -l /sys/class/i2c-adapter/i2c-0/0-0048/
合計 0
lrwxrwxrwx 1 root root 0 11月 10 15:01 driver -> ../../../../../bus/i2c/drivers/pcf8591
drwxr-xr-x 3 root root 0 11月 10 12:45 hwmon
-r--r--r-- 1 root root 4096 11月 10 12:45 in0_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in1_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in2_input
-r--r--r-- 1 root root 4096 11月 10 12:45 in3_input
-r--r--r-- 1 root root 4096 11月 10 15:01 modalias
-r--r--r-- 1 root root 4096 11月 10 12:45 name
-rw-r--r-- 1 root root 4096 11月 10 15:01 out0_enable
-rw-r--r-- 1 root root 4096 11月 10 15:01 out0_output
drwxr-xr-x 2 root root 0 11月 10 12:45 power
lrwxrwxrwx 1 root root 0 11月 10 12:45 subsystem -> ../../../../../bus/i2c
-rw-r--r-- 1 root root 4096 1月 1 1970 uevent
driver が pcf8591 にシンボリックリンクされています。lsmod で確認してみると pcf8591 がロードされていました。
$ lsmod
Module Size Used by
sunxi_cir 1601 0
bmp085 3487 0
pcf8591 3363 0
gpio_sunxi 8269 0
8189es 1076034 0
pcf8591 ってなに? グーグル先生に聞いてみることにしました。AD/DAコンバータのようです、しかも悪いことにデフォルトで使われるアドレスが 0x48 です。LM75A温度センサー上にもコンバータがあるのでロードされているのでしょうか?
LM75A温度センサーのGNDのいずれかをパターンカット、A0~A2をVCCに10KΩでプルアップしアドレス変更って手もありますが、取りあえず rmmod で pcf8591 をアンロードし、i2cdetect → i2cget を実行してみました。
$ sudo rmmod pcf8591 $ sudo lsmod $ sudo i2cdetect -y 0 $ sudo i2cget -y 0 0x48 0x00 w |
おお、LM75A温度センサーを認識し、値も読み出せるではないですか。後は読み出した Hex の値を変換すれば良さそうです。
その前に、再起動をすると pcf8591 がロードされ読み出せない状態に陥ってしまうのでブラックリストのファイルを編集しておきましょう。最下行にでも blacklist pcf8591 を追記しておいてください。
$ sudo vi /etc/modprobe.d/fbdev-blacklist.conf
Hex値の変換ですが、こちらのサイトを参考にして実行しました。スクリプト中の awk文は少々長いので、引用で使われている方を使うことにしました。
$ sudo i2cget -y 0 0x48 0x00 w | awk '{print(("0x"substr($1,5,2)substr($1,3,1))*0.0625)}'
20.625
おお、摂氏変換も上手くいっているようです。20.625℃のようです。
LM75A温度センサーの精度確認もしてみました。卓上の温度計付き目覚まし時計との比較ですが、
LM75A:20.9℃
時計 :20.8℃
ほぼ同じです。温度計目覚まし時計が正確かっていうと何の保証もないんですけど(笑) 大幅に違うことがないことが確認できれば ok です。
後は MRTG で室温とCPU温度を計測するようにしてみます。
0 件のコメント:
コメントを投稿