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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Raspberry Pi

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

Q&A

解決済

2回答

1615閲覧

MCP3008とSPI通信について

dyrobin

総合スコア13

Raspberry Pi

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

0グッド

0クリップ

投稿2021/05/30 08:10

編集2021/05/30 08:34

ラズパイとMCP3008でSPI通信を行い、AD変換のプログラムを学んでおります。
下記サイトを参考にしております。
https://101010.fun/iot/raspi-spi.html

その中で、下記コードについて質問です。

python

1def readAdc(channel): 2 adc = spi.xfer2([1, (8 + channel) << 4, 200]) 3 data = ((adc[1] & 3) << 8) + adc[2] 4 return data

1行目と2行目のchannelの意味がわかりません。
これは何を意味しているのでしょうか。
readadcのchannelは引数なのでしょうか?
2行目のchannelはどこから来たのでしょうか?
channnelについてご教示頂けないでしょうか。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/05/30 08:21

タグHTMLはなにも関係ないと思います。
guest

回答2

0

ベストアンサー

Pythonの関数が分かっていると思いますが、、、

def readAdc(channel): readAdcが関数名で、channelが引数ですね。
で、
adc = spi.xfer2([1, (8 + channel) << 4, 200])
引数で渡されたの channelを参照してます。
(8 + channel) << 4) なので、 8 (16進で8、2進数で、1000)に channelを加算し、4bit左シフト。
呼出し元を見ると、channelには 0をセットしてるみたいなので、0x80(2進で、10000000)がチャネル番号でしょうか。(上位 1000で、下位が 0000)

投稿2021/05/30 09:11

pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dyrobin

2021/05/30 09:22

ご回答ありがとうございます。 初歩的な質問ですみません。 「呼出し元を見ると、channelには 0をセットしてる」 ⇒ data = readAdc(channel=0) 上記が呼びだしもとでchannelに0をセットしているということですね。 理解できました、ご教示ありがとうございます。
guest

0

MCP3008 というのは、8チャネル 10ビット A/Dコンバータ だそうです
8チャンネルの入力があるので、それの選択じゃないでしょうか

2行目のchannelはどこから来たのでしょうか?

どこから来た、って、その関数の引数ですよ

投稿2021/05/30 08:13

編集2021/05/30 08:14
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dyrobin

2021/05/30 08:42

ご回答ありがとうございます。 2進数の1000(10進数の8)がチャネル番号を示しており、残り4bit分は×であり、何でもよい値をとる。channelがその何でもよい値を示しているのでしょうか。 なぜ何でもよい値がchannelなのでしょうか、MCP3008を使用する上での決まりでしょうか。
y_waiwai

2021/05/30 08:51

なんでも良いというのはどこから出てきたんでしょうか ちと意味不明です。 そのICが8チャンネルの入力があるということですから、どの入力なのかを選択する必要があるのでは?
dyrobin

2021/05/30 09:07

ご回答ありがとうございます。 「なんでも良いというのはどこから出てきたんでしょうか」 ⇒「そして下位4ビットの X X X X の値は気にしなくて良い」とサイトに記載がありましたので、 下位4bitはchannelで置き換えているようなイメージをしていました。 しかし、<<4で0を4bit分、左にシフトして付け加えていることに気付きましたので、channelは関係ないことがわかりました。ありがとうございます。 「そのICが8チャンネルの入力があるということから、どの入力なのかを選択する必要があるのでは?」 ⇒なるほど、(8 + channel)= 0チャンネルで入力することを示しているということでしょうか。
dyrobin

2021/05/30 09:23

解決致しました。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問