TOPに戻る

多チャネル・オシロスコープHaasoscope (3) SPI信号を観測 

 SPIバスは、一つのデバイスをマスタのマイコンにつなぐとき、MISO、MOSI、CLK、SSの4本の信号をつなぎます。デバイスが増えるとチップ・セレクト信号のSS(CS)を一つ増やして5本の信号でデータのやり取りをします。

SPIバスの様子を観測

 8ビットA-DコンバータMCP3008をラズパイにつなぎました。

 Haasoscopeの画面はデフォルトのままです。プローブは1:1、入力は50Ωにすると、見やすい縦軸の電圧になりました。プローブは1:1、入力をハイ・インピーダンスにすると、0-3.3V付近のスイングになるので、多くの入力を重ならずに表示できません。

 Haasoscopeでは、画面右上のチャネルと色表示のラインをマウスでクリックしてチャネルを選択して、カーソル・キー上下で縦方向の表示位置をシフトします。カーソル・キー左右で横軸の時間を変更します。

 スレーブ・デバイスMCP3008が出力するデータが中途半端な電圧です。

 接続です。

     MCP3008  ラズパイ
入力CH0 1番ピン 16 Vdd 3.3V電源 1番 
入力CH1 2 15 Vref 基準電圧入力 1番
入力CH2 3 14 AGND アナログ・グラウンド 6番 
入力CH3 4 13 CLK 23番 
入力CH4 5 12 Dout 21番 
入力CH5 6 11 Din 19番 
入力CH6 7 10 /CS・SHDN 24番 CE0
入力CH7 8 9 DGND ディジタル・グラウンド 6番 

 pythonのテスト・プログラムです。

#!/usr/bin/env python
import spidev

spi = spidev.SpiDev()
spi.open(0,0) #port 0,cs 0
spi.max_speed_hz=(1000000)

while 1:
    adc = spi.xfer2([0x01,0x80,0x00])
spi.close()

 プローブは1:10、入力をハイ・インピーダンスにします。6チャネル以降はチャネルをセンタした状態でCTRL+clickで表示を消しました。各チャネルはマウス・ホイールを動かして縦方向にずらします。いずれの波形も0-3.3Vをフルスイングしているのがわかります。

 測定中の様子です。

MCP3008を2個にする

 デバイスを2個にするには、チップ・セレクト信号SS(CS)を二つ使います。

 ラズパイのチップ・セレクト信号CE1(26番)を2個目のMCP3008のCS(10番)につなぎます。Pythonプログラムに二つ目のスレーブ・デバイスのコマンド送信を追加します。

#!/usr/bin/env python
import spidev
Vref = 3.29476

spi = spidev.SpiDev()
spi.open(0,0) #port 0,cs 0
spi.max_speed_hz=(1000000)

spi2 = spidev.SpiDev()
spi2.open(0,1) #port 0,cs 1
spi2.max_speed_hz=(1000000)

while 1:
    adc = spi.xfer2([0x01,0x80,0x00])
    adc = spi2.xfer2([0x01,0x80,0x00])
spi.close()

 実行中の様子です。五つの信号を同時に見れるのは大変ありがたいです。1個目のMCP3008のCH0は開放、2個目のMCP3008のCH0は3.3Vへ接続した状態です。

◆多チャネル・オシロスコープHaasoscope

(1) セットアップ

(2) 8チャネルの動作

(3) SPI信号を観測