広告

  • 追加された行はこの色です。
  • 削除された行はこの色です。
*FTDIのチップでデジタルI/O [#yb35b9b9]
[[FT232]]や[[FT245]]はシリアル通信だけでなく、デジタルI/O(パラレル)デバイスとして使うことができる。~
「bitbang」と読んでいる。~
「bitbang」と呼ばれている。~
C言語系で書く場合は[[libFTDI]]を参照。~
ここではPythonに関して記述。

**準備 [#zc2bfb10]
PythonでFTDIのチップを取り扱うモジュールはいくつかあるが、ここでは[[libFTDI]]のpythonバインドを使う。~
DebianとUbuntuの場合は「python-ftdi」というパッケージをインストールする。
**プログラム例 [#vced4c40]
パーミッションに注意。rootでないと動かない場合があります。
パーミッションに注意。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 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)	#すべてのビットをbitbangに設定
	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)	#すべてのビットをbitbangに設定
 
 	buf = chr(0x0)
 	print "turning everything off"
 	f = ftdi.ftdi_write_data(ftdic, buf, 1)		#00を書き込み。つまりすべてOFF
	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()



広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS