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

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

新規登録して質問してみよう
ただいま回答率
86.02%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

ラズパイ ADCして情報を取得するには。

_magurochan
_magurochan

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

3回答

0グッド

0クリップ

2741閲覧

投稿2020/01/11 14:00

#やりたいこと
Raspberry Pi Zero WHでSPI接続のMCP3008を使って、可変抵抗の値(0-1023)を取得したいです。

Vrefは、3.3Vに繋いでいます。

下記の2つの方法を試しましたが、思ったような結果になりませんでした。
その1の方法で、かつ0-1023のデータが出力されたらな、、、と思っています。

#やってみたこと その1
pigpioを使って、MCP3208(12bit)から取得しようとしてるページを発見して、これを利用したところ、可変抵抗の値は変化しました。0-4095の値が出力されていました。

python3

1import time 2import pigpio 3 4slct = 0 # +1 +1 # SPI接続機器の番号 chip select 5baud = 50000 # 通信速度 6flag = 0 # +256 # bin(256) = 0b100000000 は Aux SPI の利用フラグ 7adch = 0 # MCP3208のCH0の番号 8 9pi = pigpio.pi() 10hndl = pi.spi_open(slct, baud, flag) # デバイスオープン 11 12try: 13 while True: 14 cmnd = ( 0b00011000 + adch ) << 2 15 c, raw = pi.spi_xfer(hndl,[cmnd,0,0]) # 最初の要素が命令の入力 16 # 17 # [0][1][1][D2][D1][D0][0][0] 18 # | | | | | 19 # | | 読み出しチャネルの指定 20 # | 1: シングルエンド 21 # [スタートビット] 22 # 23 data = ((raw[1] & 0b11111111) << 4) + \ 24 ((raw[2] & 0b11110000) >> 4) 25 print(c,raw,bin(data),data) 26 time.sleep(1) 27 28except KeyboardInterrupt: 29 pi.spi_close(hndl) 30 pi.stop()

しかし、1024段階の値が欲しいのです。

pigpio ライブラリの spi_xfer() 関数を用いて Raspberry Pi 3B から SPI 接続のA/Dコンバータ MCP3208 を利用する

#やってみたこと その2
このページのgpiozeroを使ったPythonファイルを実行したところ、

python3

1#!/usr/bin/env python 2from gpiozero import MCP3008 3Vref = 3.29476 4 5pot = MCP3008(channel=0) 6print(str(pot.value * Vref) + "V")

「0.001609555446995512V」と表示され、可変抵抗を回しても変化しません。

5ドル!ラズパイ・ゼロ(Raspberry pi Zero)でIoT (9) A-Dコンバータの利用6 MCP3002/MCP3008

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

回答3

1

ベストアンサー

magurochanさん、

その1の方法ですが、MCP3008とMCP3208のデータシートをみたところ、形式が違うので、
その出力結果は、期待するものでないかもしれません。

MCP3008をもってないんですが、データシートからすると、以下のようなコードになりそうですが、どうでしょうか?

... # # 1バイト目 | 2バイト目 | 3バイト目 # 012345678 |0 1 2 3 4 5 6 7 |0 1 2 3 4 5 6 7 # D_out B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 # D_in 1 1 D2 D1 D0 0 0 0 0 # | | | | | # | | 読み出しチャネルの指定 # | 1: シングルエンド # [スタートビット] # cmnd = (0b00001000 + adch) << 4 c, raw = pi.spi_xfer(hndl, [ 1, cmnd, 0 ]) data = ((raw[1] << 8) + raw[2]) & 0x3FF ...

投稿2020/01/11 20:55

mt08

総合スコア1825

ikadzuchi👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

_magurochan

2020/01/12 15:40

実際に投稿されたコードで実行してみたところ、思ったように使えました。ありがとうございます。 よければ、どういう風に変更したのか教えていただけませんか?
mt08

2020/01/12 18:05

magurochanさん、 MCP3008のデータシートを見て、その仕様にあわせたビット列を使用するように、コード内のコメントに書いたように実装しました。

0

0-4095の値が出力されていました。

(略)
1024段階の値が欲しいのです。

私だったら4で割ります。

投稿2020/01/12 02:04

thkana

総合スコア7325

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

0

12ビットの数値を取得して、そのうちの上位10ビットをとってくればいいのです

投稿2020/01/11 14:22

y_waiwai

総合スコア86025

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。