Top > ftdi_bitbang

広告

FTDIのチップでデジタルI/O

FT232FT245はシリアル通信だけでなく、デジタルI/O(パラレル)デバイスとして使うことができる。
「bitbang」と呼ばれている。
C言語系で書く場合はlibFTDIを参照。
ここではPythonに関して記述。

準備

PythonでFTDIのチップを取り扱うモジュールはいくつかあるが、ここではlibFTDIのpythonバインドを使う。
DebianとUbuntuの場合は「python-ftdi」というパッケージをインストールする。

プログラム例

パーミッションに注意。rootでないと動かない場合があります。
下はPythonでの簡単な例。全ピンのON-OFFをしてから、個々のピンのON-OFFをしている。また、対応するピンは以下の通り

ポートピン名(FT232RL)pin
bit0TXD1
bit1RXD5
bit2RTS3
bit3CTS11
bit4DTR2
bit5DSR9
bit6DCD10
bit7RI6
#!/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
Last-modified: Wed, 27 Feb 2013 02:30:57 HADT (2721d)