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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Raspberry Pi

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

Python

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

Q&A

解決済

1回答

1111閲覧

ラズパイ AD変換プログラム

raspypy

総合スコア247

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2020/07/17 08:01

##今していること

Raspberry Pi + MCP3002の組み合わせでA/D変換を行っています。
A/D変換はできたのですが、プログラムコードの意味が理解できておりません。

##教えてほしいこと①
こちらのコードの解釈は正しいでしょうか。
CH0から取得するしているので、 0b01101000、0b00000000 (2進数)0x68,0x00 (16進数)
10bitのデータを取得するので、adc[0] 下位8bitとadc[1]の論理和に、0x03ffとの論理積で10bitデータ化

python

1adc = spi.xfer2([0x68,0x00]) 2data = (adc[0] * 256 + adc[1]) & 0x3ff

##教えてほしいこと②
こちらのコードの解釈が分かりません。
こちらは、参照元のコードなのですが、こちらのコードの意味が理解できません。
adcに代入している、1, (2 + channel) << 6の部分は、どのように理解すればよいのでしょうか。

dataに代入する式も、これが10bitデータ化しているのが理解できないです。

python

1adc = spi.xfer2([1, (2 + channel) << 6,0]) 2data = ((adc[1] & 31) << 6) + (adc[2] >> 2)

##教えてほしいこと③
0,0が表しているもの
これは、portとchを表していると理解していますが、
ch0を使用しているので、後半の0は分かるのですが、
portとは、どこのポートのことを表しているのでしょうか。

python

1spi.open(0,0)

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

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

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

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

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

raspypy

2020/07/17 08:44

コメントありがとうございます。 データシートを読んだ結果、最初のコードの意味はなんとなく理解できたのですが、②、③のコードの解釈ができていない状況です。 ①についても解釈が正しいのか疑問です。
guest

回答1

0

ベストアンサー

教えてほしいこと①

あってます

教えてほしいこと②

①と6bitずれてます(MSBFビットの違いもある)
データシート読む限りMCP3002がちょっとトリッキーなSPI通信のフォーマットになっています。
というのも普通のSPIはバイト単位で通信するんです。
例えば「xバイト目のyビット目がzとというデータだよ」みたいな感じで通信内容が決まっているものなんです。
ところがMCP3002は「CSをアサートしてから最初にビット1を受信したタイミングから何ビット」という形で決まっているんですね。多分。

送受信配列番号DIN(1)DOUT(1)DIN(2)DOUT(2)
[0]0X0X
Start(1)X0X
SGL/DIFFX0X
ODD/SIGNX0X
MSBFX0X
XX0X
XB90X
XB8Start(1)X
[1]XB7SGL/DIFFX
XB6ODD/SIGNX
XB5MSBFX
XB4XX
XB3XB9
XB2XB8
XB1XB7
XB0XB6
[2]XB5
XB4
XB3
XB2
XB1
XB0
XX
XX

教えてほしいこと③

SPIの送受信回路(ラズパイ内部の話)の番号です。
設定でSPI1を増やせます。

投稿2020/07/18 02:06

編集2020/07/18 02:23
ozwk

総合スコア13521

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

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

raspypy

2020/07/18 02:36

わかりやすいご説明ありがとうございます。 最後の「送受信回路」の番号について教えて下さい。 spi.open(0,0) 最初の0は、バス番号と理解していますが、ラズパイ のバス番号はどこで調べれば分かりますか。ー?
raspypy

2020/07/18 08:21

確認できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問