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か月以上更新しなかったのかー、、、最近、週末は眠くてかなわんのです。昼まで寝て、メシ作って、洗濯やらして、食材買いに行って、夕食を作って、で、飲んじゃう、、で一日が終わる。いろいろと限界寸前な気がする。
コメントをお書きください