参考: SPI — BBC micro:bit MicroPython 0.5.0 documentation
from microbit import * StartByte = 1 SingleOrDiff = 1 whichCH = 0 DummyByte = 0 CS = pin16.write_digital # 3バイトを書き込んで3バイトを読み出す。 # [0]バイト目として0b 0000 0001をwriteする。この1がスタートビットとして働く。 # ADCから返ってくるバイトデータは無視する。 # [1]バイト目として、シングルエンドか差動かと、チャンネルとを指定する。 # ここでは 0b 1000 0000をwriteする。 # ビット7を1にしたのでシングルエンド(0にすれば差動)。 # ビット6:4の3ビットでチャンネル(0-7)を指定する。ここでは0、すなわちチャンネル0を選んだ。 # ADCからは0b xxxx x0??が返ってくる。??のビット1:0が10ビットデータの上位2ビットである。 # [2]バイト目としてダミーバイトをwriteする。ここでは0にしたが何でもよい。 # ADCからは10ビットデータの下位8ビットが返ってくる。 buf = bytes([StartByte, (SingleOrDiff<<7 | whichCH<<4), DummyByte]) raw = bytearray([0 for i in range(len(buf))]) CS(1) spi.init() # デフォルトはmode=0。 CS(0) spi.write_readinto(buf, raw) CS(1) print([bin(buf[i]) for i in range(3)]) print([bin(raw[i]) for i in range(3)]) # 2つの8ビットデータを10ビットデータに並べ換える。 A2Ddata = (raw[1]<<8 | raw[2]) & 0b1111111111 volt = A2Ddata * 3.23/1024.0 # 3.23はmicro:bitの電源電圧の実測値。 print("AD%d , %.2f(v)" % (A2Ddata, volt))
実行結果: