· 

PythonでFTDI BitBang(1)

PythonからFTDI BitBangするにはいろいろ方法があるようです。pyftdiとかpylibftdiとか。が、どちらもドライバをいじってしまわないといけないので、まぁあんまりやりたくないです。実は一度試しにZadigとかしてみてドライバとか変えられるのは分かったのですが、元に戻す方法がわからずに苦労しました。まぁ「コンピューター上の利用可能なドライバーの一覧から選択」で戻せることが分かったのですが、なんとなく後味が悪いので、とりあえず、これらの方法はやめておきます。ではどうするか、、、dllを直で叩きます。かなり昔(約10年前)、とあるデバイスとI2CするためにC++からBitBangしたことがあったのですが、まぁそれと同じことをPythonでするだけです。え~っと10年前から進歩してないです。はい。

 

参考書は、FTDIのこれこれ。あとはgoogle先生にftdi bitbangで聞く。

FTDIのドライバ(CDM v?.??.??.? WHQL Certified)をダウンロードして、AMD64フォルダにあるftd2xx64.dllをpythonのソースコードがあるフォルダに入れておきます。

 

さっそくこんな感じで。(まずは動くことを確認することを優先します)

import ctypes
import time

dllfile='.\\ftd2xx64.dll'
dll = ctypes.CDLL(dllfile)
handle = ctypes.c_void_p()
res = dll.FT_Open(0, ctypes.pointer(handle))
res = dll.FT_SetBaudRate(handle, 2000000)
res = dll.FT_SetBitMode(handle, 0xFF, 4)
senddata=b'\x00\xff\x00\xff\x00\xff\x00\xff' 
written = ctypes.c_ulong(0)
dll.FT_Write(handle,senddata , 8, ctypes.pointer(written)) 
time.sleep(1)
res = dll.FT_Close(handle) 

FT231XモジュールのDCD#ピンを見るとこうなってます。上げ下げできています。周波数指定は2MHz/Symなので1MHzのはずなのですが、1.205MHzってなってます。一般的なUARTと違う設定からなのか、まぁあまりスピード設定は信じてはいけないようです。

 

DCD#, DSR#, CTS#, RI#をロジアナで見たところこうなります。

まぁ動いています。

マイコンを使って波形を作るのもまぁよくある話ですが、

PC上のUI-->USB(UART)-->マイコン-->何か

ってすると、マイコンのソフトが複雑になります。そのほか、ArduinoだとDigitalWriteで1ピンずつ設定していたら、タイミングがずれます。複数ピン同時に上げ下げしたいときとかArduinoっぽくない書き方をしないといけなくなります。PCとマイコンの通信プロトコルも考えないといけないです。PCから直接「何か」に信号を送りたいときはBitBangって選択肢もありかなって思う。

どう使うか、、、うまくいったら差支えない題材に変えてここ書くかもしれない。

 

 

1か月以上更新しなかったのかー、、、最近、週末は眠くてかなわんのです。昼まで寝て、メシ作って、洗濯やらして、食材買いに行って、夕食を作って、で、飲んじゃう、、で一日が終わる。いろいろと限界寸前な気がする。