2015年9月30日水曜日

Raspberry Pi 起動時に Python スクリプトを自動実行させる


/home/pi/.config/lxsession/LXDE-pi

フォルダに行く。
.configフォルダが見えないときは [Ctrl]+[H] とすると隠しフォルダが現れる。
はじめは空フォルダだが、
なかに

autostart

という名前のファイルを作成し、中に

**************
@lxterminal -e "python /home/pi/scripts/test.py"
**************

と記述。
再起動させると自動的にターミナルの画面が立上り、Pythonのプログラムが実行されていることがわかる。

2015年9月4日金曜日

MCP4726 DAC 制御 Python script

Raspberry Pi から、I2C接続にて
12 bit DAC MCP4726
を制御するPython script を書いた。

**************************
import smbus, time
bus = smbus.SMBus(1)

def MCP4726(Vout):
    data1 = (Vout >> 4)
    data2 = ((Vout & 15) << 4
    data0 = [data1, data2]
    print "Vout = ", Vout
    bus.write_i2c_block_data(0x60, 0x40, data0)

for i in range(0, 4095, 500):
    MCP4726(i)
    time.sleep(3)
**************************

MCP4726(Vout) 関数を用いて、Vout に0から4000まで500刻みで
3 sec 間を置いて出力するプログラム。

bus.write_i2c_block_dataの
0x60はI2Cアドレス、
0x40は通常設定、
data0 で12 bit のデータを送る。

12 bit なので、最大で 1111 1111 1111b = 0xFFF = 4095
で、最初の8 bit と、後ろの4 bitのブロックに分けて送信する。

data1 = (Vout >> 4)
data1は最初の8 bitで、入力されたVoutを右に4 bitシフトして後ろの4 bitを消している。

data2 = ((Vout & 15) << 4
data2は後ろの4 bitで、Voutと15(0000 0000 1111b)とANDを取って下位4 bitを取り出し、上に4 bit シフトさせている。

これで、4095 (0xFFF) を送ると、
0xFF, 0xF0
の2ブロックデータが送信される。

MCP4726 DAC を Rapsberry Pi I2C で使う


秋月電子通商で購入した12bit DAC, MCP4726をRaspberry Piに接続してI2C通信して電圧を出力する方法。


MCP4726搭載12ビットD/A変換モジュール
http://akizukidenshi.com/catalog/g/gK-07995/
MCP47X6 (X = 0, 8 bit; X = 1, 10 bit; X = 2, 12 bit)


Raspberry Piのコンソールで、

$ sudo i2cset -y 1 0x60 0x40 0xff 0xf0 i

とすると、0xFFF(12 bit 最大値)が出る。
0x60はI2Cアドレスで、

$ sudo i2cdetect 1

で得られたアドレス。
0x40は通常設定ということのよう。以下URLを参照。
http://www.bitwizard.nl/wiki/index.php/I2C_DAC
というよりデータシートをちゃんと読んだほうが良いかもしれないが、面倒なので読んでない。

あとの0xff 0xf0
のはじめの3 byteがデータ。

最後の i は i2cset でブロックデータを送るときに必要なやつ。


Pythonでやるときは、
*******************************
import smbus

bus = smbus.SMBus(1)

s= [0xff, 0xf0]
bus.write_i2c_block_data(0x60, 0x40, s)
*******************************

などとすると動作してくれる。

参考URL
http://wiki.erazor-zone.de/wiki:linux:python:smbus:doc

Python 16進数 桁数


Pythonにて、

>> hex(0)

とすると、
0x0
と表示される。これを0x00とするには、

>> "0x%02x" % 0

とすれば良い。

参考URL
http://stackoverflow.com/questions/12969188/invalid-hex-values?answertab=votes#tab-top