|
Top > ftdi_bitbang 広告
*FTDIのチップでデジタルI/O [#yb35b9b9]
[[FT232]]や[[FT245]]はシリアル通信だけでなく、デジタルI/O(パラレル)デバイスとして使うことができる。~
「bitbang」と呼ばれている。~
C言語系で書く場合は[[libFTDI]]を参照。~
ここではPythonに関して記述。
**準備 [#zc2bfb10]
PythonでFTDIのチップを取り扱うモジュールはいくつかあるが、ここでは[[libFTDI]]のpythonバインドを使う。~
DebianとUbuntuの場合は「python-ftdi」というパッケージをインストールする。
**プログラム例 [#vced4c40]
パーミッションに注意。rootでないと動かない場合があります。~
下はPythonでの簡単な例。全ピンのON-OFFをしてから、個々のピンのON-OFFをしている。また、対応するピンは以下の通り
|ポート|ピン名(FT232RL)|pin|
|bit0|TXD|1|
|bit1|RXD|5|
|bit2|RTS|3|
|bit3|CTS|11|
|bit4|DTR|2|
|bit5|DSR|9|
|bit6|DCD|10|
|bit7|RI|6|
#!/usr/bin/python
# coding: UTF-8
#import ftdi1 as ftdi #将来はこっち?
import ftdi
import time #for Wait
def main():
ftdic = ftdi.ftdi_context() #ftdi_contextの宣言
ftdi.ftdi_init(ftdic) #FTDIチップの初期化
f = ftdi.ftdi_usb_open(ftdic, 0x0403, 0x6001) #FTDIチップをオープン 0x0403, 0x6001はlsusbなどで調べる。おそらく同じ
#print f
if(f < 0 and f != -5): #エラートラップ。-5はftdi_sioが動いていた時のエラー
print"unable to open ftdi device:", f, ":", ftdi.ftdi_get_error_string(ftdic)
exit()
print "ftdi open succeeded:",f
print "enabling bitbang mode"
#ftdi.ftdi_enable_bitbang(ftdic, 0xFF) #古いやり方らしい
ftdi.ftdi_set_bitmode(ftdic, 0xff, ftdi.BITMODE_BITBANG) #bitbangに設定 0xff=すべてoutput
buf = chr(0x0)
print "turning everything off"
f = ftdi.ftdi_write_data(ftdic, buf, 1) #00を書き込み。つまりすべてOFF
if(f < 0): #エラートラップ。
print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic)
exit()
time.sleep(1) #Wait 1sec
buf = chr(0xFF)
print "turning everything on"
f = ftdi.ftdi_write_data(ftdic, buf, 1) #00を書き込み。つまりすべてON
if(f < 0): #エラートラップ。
print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic)
exit()
time.sleep(1) #Wait 1sec
buf = chr(0x0)
print "turning everything off"
f = ftdi.ftdi_write_data(ftdic, buf, 1) #00を書き込み。つまりすべてOFF
if(f < 0): #エラーとトラップ。
print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic)
exit()
time.sleep(5) #Wait 1sec
print "PORT check"
for i in range(8):
buf = chr(2**i)
print "bit = ",i,": hex = ",hex(2**i)
f = ftdi.ftdi_write_data(ftdic, buf, 1) #書き込み。
if(f < 0): #エラートラップ。
print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic)
exit()
time.sleep(2)
print "disabling bitbang mode"
ftdi.ftdi_disable_bitbang(ftdic) #bitbangモードを終了
ftdi.ftdi_usb_close(ftdic) #デバイスを閉じる
ftdi.ftdi_deinit(ftdic); #
if __name__ == "__main__":
main()
広告 |