質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.35%

ラズベリー・パイ でのADS1115動作確認

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,880

score 4

ラズベリー・パイ 初心者なのですが、お教えください。

ADS1115 をその辺のページを参考に接続し、動作確認をしているのですが
うまく動作させることができません。
状況としては以下のようになります。
pi@pi0w:~ $ i2cdetect -y 1
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --

pi@pi0w:~ $ i2cget -y 1 0x48 0x00 w
Error: Could not set address to 0x48: Device or resource busy

★/boot/config.txt には、以下の2行を追加しています。
dtoverlay=ads1115
dtparam=cha_enable,cha_cfg=0

上記のような状態で、
ls /sys/class/hwmon/hwmon0/device
ここに、ファイル in0_input が作成できておらず、何をどうしてよいかわかりません。

ご指導お願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2019/10/13 18:51

    コードを提示しましょう

    キャンセル

  • mt08

    2019/10/14 14:18 編集

    init68kさん、
    使用環境がわからないのですが(Raspbian?Buster? 3B?)、とりあえず、以下の3つのコマンドを実行したログをのせてください。

    uname -a
    lsmod
    ls -l /sys/class/hwmon/hwmon0/device/

    キャンセル

回答 1

0

ADS1115のデータシートは、テキサスインスツルメンツのサイト ADS111x Ultra-Small, Low-Power, I 2C-Compatible, 860-SPS, 16-Bit ADCs With Internal Reference, Oscillator, and Programmable Comparator  にあります。
まず、一通り読んで下さい。 

「その辺のページ」がどんなものか判りませんが、I2Cで制御するチップは、それなりに複雑な機能を持っているので、ちゃんとした情報はデータシートから取得すべきです。

ADS1115には4つのレジスタがあり、Address Pointer Register(8bit)で、どのレジスタにアクセスするのかを選択します。
・Config register : ADS1115の動作を設定するレジスタ どのピンの信号を変換するのか、アンプのゲイン、変換モード(連続か単発か)、変換周期(8回/s ~ 860回/s)といったものを設定する(16bit,書き込み専用)
・Conversion register:A/D変換した結果が入るレジスタ(16bit,読み出し専用)
・スレッショルドレジスタ (Lo_thresh と Hi_thresh): comparatorモードの際に使う、上下のスレッショルド値を設定するレジスタ

I2CでADS1115を操作する方法については、"9.5 Programming"の章(22ページ)で説明されています。

"9.5.3 Writing To and Reading From the Registers"(24ページ)の図"Figure 30. Timing Diagram for Reading From ADS111x"が、データを読み出す際の手順。
I2C通信で、PC側がMasterになり、ADS1115がSlaveになります。I2Cのアドレスは7ビットで、00(0b0000000)-7F(0b1111111)の範囲です。

連続でA/D変換するように既に設定してあるとして、A/D変換した結果を得ようとすると、

Frame 1: Slave Address Byte 
ADS1115のアドレス(0b1001000)に書き込むので、0b1001000に書き込みを意味する0を付け加えれ、0b10010000を送信

Frame 2: Address Pointer Register
変換結果が入るConversion registerを指定する 0b00000000を送信

Frame 3: Slave Address Byte 
次はADS1115からのデータの読み出しなので、ADS1115のアドレス(0b1001000)に読み出しを意味する1を付け加えれ、0b10010001を送信

Frame 4: Data Byte 1 Read Register
Conversion registerの上位8ビットを読み出し

Frame 5: Data Byte 2 Read Register
Conversion registerの下位8ビットを読み出し

というようなやりとりになるでしょう。

==
上記を踏まえると、
i2cget -y 1 0b10010000 0b00000000 0b10010001 w
で、A/D変換した結果がえられるのではないかと思います。

"i2cget -y 1 0x48 0x00 w"では、0b01001000が送られますが、それで指定しているアドレスは0b0100100 (0x24)となります。
そのアドレスを持つ機器が無いので応答が返らず、「Error: Could not set address to 0x48: Device or resource busy」というエラーになったのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る