Top > ftdi_bitbang

広告
  • The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
  • Go to 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()

広告

Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes