日々の活動記録や、暇つぶしなどなど
FT245RLはPCにUSBでつないで,簡単にパラレルIOを作れる便利ICです.
利用方法は二つあり,
・専用のドライバであるD2XXを利用し,フルパワー利用する方法
・仮想シリアルポート(VCP)として認識させ,一般的なRS-232のように使う方法
となっています.D2XXライブラリも非常に簡単で,サンプルプログラムを見れば15分あればとりあえずデータを受け渡しできるようになると思います.
しかし,手っ取り早くお試ししたいorプログラムなんて書きたくない,といった場合には少々不便です.
そんな時はVCPを利用してしまうのが手っ取り早いです.
と言っても,FT245RLは選択式の入出力ポートが8本あるだけなので,RS232Cのように全二重通信を行うことはできません.そもそもポートの入出力はどうするのでしょうか.
そのへんは,「RD#」「WR」「TXE#」「RXF」という制御端子を利用することになっています.
FT245RLには送信・受信ともにFIFOバッファを持っており,送受信データは一旦そこに蓄積され,順次転送されていくことになります.
個人的に分かりにくかったのは,RD#とRXFの受信制御端子がPC→FT245の方向で,送信制御端子WRとTXE#がFT245→PCという方向だったということです.FT245RLをPCの付属品としてみると,受信がFT245RL→PCのような感じだと思うので…
それはさておき,FT245RLからPCにデータを送るためには,
・TXE#がLoであることを確認 → 送信FIFOに空きがある
・データ端子にデータをセット
・WR端子をHiからLoにする → 送信FIFOに現在のデータ端子の状態を書き込み
・PCで読み取る
という手順が必要になります.
逆にPCからFT245RLにデータを送る場合は
・PCからデータを書きこむ
・RXFがLoであることを確認 → 受信FIFOにデータがある
・RD#をHiからLoにする → 受信FIFOからデータ端子に読み込み
・データ端子を読み取る
といった手順になります.
簡単にFT245RLを受信ポートとして利用するには,適当なクロックWR端子を与えて一定周期で読み取れば読み込めるでしょう.そのへんは試してないので,とりあえず放置.
FT245RLを出力ポートとして利用するときはさらに簡単で,RXF端子とRD#端子を直結させてしまいます.
すると,最初の1byteを受信した段階で,RXFがHiからLoに変化します.すると,同時にRDがHiからLoに変化するわけで,データ端子にその情報がリードされます.そのため,何もせずとも,どんどんPCから送られたデータが,FT245RLの出力に現れるようになります.
ちょっとインチキ臭いですが,とりあえず自分の環境ではうまく動いています.
ここまで来れば,あとは適当なシリアルコンソールでデータを送るだけです.おすすめはAcknowrichというフリーソフトで,このソフトはバイナリで1byteずつデータを送ることができるので,この手の用途に最適です.
しかし,PCから定期的にデータを送りたい,とか,PCが起動したときにデータを送りたい,とかいう場合にはコンソールではうまくいきません.
しかし,プログラムをかくのもめんどくさい,と思って試してみたらとっても簡単な方法が見つかりました.
・Windowsの場合
コマンドプロンプトで
echo data > \\.\COM*
※dataには適当な送信データ,*にはFT245RLのVCPのポート番号
と打つだけで,シリアル送信が可能です.dataは文字しか指定できないので,アスキーコード表などから適宜変換してください.下位3bitであれば,普通に0~7を入れれば000~111と二進数で変化するのでチェックできます.(0のアスキーコードが0x30だからできる話)
ただし,自分の環境では,dataには一文字以上入れても,一文字目が送信されるようでした.そのへんは細かく追いかけてないのでよくわかりません.一文字あれば,出力ポートをすべて変化させられるので十分でしょう.
・Linuxの場合
シェル上で
echo data > /dev/ttyUSB*
※dataは適当な送信データ,*はFT245RLの番号
基本的にはWindowsと一緒で,ポートの指定方法が違うだけですね.自分の環境では複数の文字をdataに入れれば,順次その文字列が送信されることを確認しました.なので,
echo 01010101010101010101010101010101 > /dev/ttyUSB0
とかすると,いんちき臭いPWMが出力できたりしますw
そんなわけで,これらのコマンドをWindowsならショートカットアイコンにして,Linuxならシェルスクリプトにするなりして自動実行させれば,それだけでPCからFT245RLにデータを送信することができます.
なんとお手軽.
追記
Windowsのコマンドプロンプトからシリアルポートを使う方法についてもう少し記述しました.
利用方法は二つあり,
・専用のドライバであるD2XXを利用し,フルパワー利用する方法
・仮想シリアルポート(VCP)として認識させ,一般的なRS-232のように使う方法
となっています.D2XXライブラリも非常に簡単で,サンプルプログラムを見れば15分あればとりあえずデータを受け渡しできるようになると思います.
しかし,手っ取り早くお試ししたいorプログラムなんて書きたくない,といった場合には少々不便です.
そんな時はVCPを利用してしまうのが手っ取り早いです.
と言っても,FT245RLは選択式の入出力ポートが8本あるだけなので,RS232Cのように全二重通信を行うことはできません.そもそもポートの入出力はどうするのでしょうか.
そのへんは,「RD#」「WR」「TXE#」「RXF」という制御端子を利用することになっています.
FT245RLには送信・受信ともにFIFOバッファを持っており,送受信データは一旦そこに蓄積され,順次転送されていくことになります.
個人的に分かりにくかったのは,RD#とRXFの受信制御端子がPC→FT245の方向で,送信制御端子WRとTXE#がFT245→PCという方向だったということです.FT245RLをPCの付属品としてみると,受信がFT245RL→PCのような感じだと思うので…
それはさておき,FT245RLからPCにデータを送るためには,
・TXE#がLoであることを確認 → 送信FIFOに空きがある
・データ端子にデータをセット
・WR端子をHiからLoにする → 送信FIFOに現在のデータ端子の状態を書き込み
・PCで読み取る
という手順が必要になります.
逆にPCからFT245RLにデータを送る場合は
・PCからデータを書きこむ
・RXFがLoであることを確認 → 受信FIFOにデータがある
・RD#をHiからLoにする → 受信FIFOからデータ端子に読み込み
・データ端子を読み取る
といった手順になります.
簡単にFT245RLを受信ポートとして利用するには,適当なクロックWR端子を与えて一定周期で読み取れば読み込めるでしょう.そのへんは試してないので,とりあえず放置.
FT245RLを出力ポートとして利用するときはさらに簡単で,RXF端子とRD#端子を直結させてしまいます.
すると,最初の1byteを受信した段階で,RXFがHiからLoに変化します.すると,同時にRDがHiからLoに変化するわけで,データ端子にその情報がリードされます.そのため,何もせずとも,どんどんPCから送られたデータが,FT245RLの出力に現れるようになります.
ちょっとインチキ臭いですが,とりあえず自分の環境ではうまく動いています.
ここまで来れば,あとは適当なシリアルコンソールでデータを送るだけです.おすすめはAcknowrichというフリーソフトで,このソフトはバイナリで1byteずつデータを送ることができるので,この手の用途に最適です.
しかし,PCから定期的にデータを送りたい,とか,PCが起動したときにデータを送りたい,とかいう場合にはコンソールではうまくいきません.
しかし,プログラムをかくのもめんどくさい,と思って試してみたらとっても簡単な方法が見つかりました.
・Windowsの場合
コマンドプロンプトで
echo data > \\.\COM*
※dataには適当な送信データ,*にはFT245RLのVCPのポート番号
と打つだけで,シリアル送信が可能です.dataは文字しか指定できないので,アスキーコード表などから適宜変換してください.下位3bitであれば,普通に0~7を入れれば000~111と二進数で変化するのでチェックできます.(0のアスキーコードが0x30だからできる話)
ただし,自分の環境では,dataには一文字以上入れても,一文字目が送信されるようでした.そのへんは細かく追いかけてないのでよくわかりません.一文字あれば,出力ポートをすべて変化させられるので十分でしょう.
・Linuxの場合
シェル上で
echo data > /dev/ttyUSB*
※dataは適当な送信データ,*はFT245RLの番号
基本的にはWindowsと一緒で,ポートの指定方法が違うだけですね.自分の環境では複数の文字をdataに入れれば,順次その文字列が送信されることを確認しました.なので,
echo 01010101010101010101010101010101 > /dev/ttyUSB0
とかすると,いんちき臭いPWMが出力できたりしますw
そんなわけで,これらのコマンドをWindowsならショートカットアイコンにして,Linuxならシェルスクリプトにするなりして自動実行させれば,それだけでPCからFT245RLにデータを送信することができます.
なんとお手軽.
追記
Windowsのコマンドプロンプトからシリアルポートを使う方法についてもう少し記述しました.
PR
この記事にコメントする
カウンター
委託案内
アンプ基板や同人誌を委託販売しています.リンクからどうぞ.(外部サイト)
・HA10mini基板セット
・HA10mini終段基板
・HA10miniハイパワーキット
・HPA&Analog vol.6冊子版
・同人誌DL委託
・同人誌DL委託(旧サークル名)
・HA10mini基板セット
・HA10mini終段基板
・HA10miniハイパワーキット
・HPA&Analog vol.6冊子版
・同人誌DL委託
・同人誌DL委託(旧サークル名)
ブログ内検索
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
最新記事
最新トラックバック
カテゴリー
SilverLight
アクセス解析
広告