忍者ブログ
日々の活動記録や、暇つぶしなどなど
[404]  [403]  [402]  [401]  [400]  [399]  [398]  [397]  [396]  [395]  [394
2011/05/09 (Mon) 12:59
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のコマンドプロンプトからシリアルポートを使う方法についてもう少し記述しました.
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
これは面白そうですね。

しかしいんちき臭いPWMには笑いましたw
tsh 2011/05/10(Tue)23:40:25 編集
ちゃんと
010101

001001001
とか
011011011
とかにすれば比率も変えられますよw

ただ,周期はよくわかりませんがw
strv 2011/05/13(Fri)01:06:30 編集
はじめまして
ここの記事を参考にさせて頂き、PCからパラレル出力をしようとFT245のRXFとRDを直結してみたのですが、確かに最初のデータ自体は出るのですが、RD信号をL→Hに戻してやらないと、次のデータが出力ピンに出ず、延々とRXFがLのまま、データが送られなくなりました。
基本的にRDはデータを受ける側で操作するものだと思いますが、今のところ、受信側では割込信号にRXF、データ用にD0~D7を使ってしまっていて、RDを操作する信号線がない状態です。
結局はデータ信号がもう一本あれば良いのですが、困りました・・・。
もう少し考えてみます。
gun534 2017/01/19(Thu)18:20:54 編集
この記事へのトラックバック
この記事にトラックバックする:
カウンター
委託案内
アンプ基板や同人誌を委託販売しています.リンクからどうぞ.(外部サイト)
HA10mini基板セット
HA10mini終段基板
HA10miniハイパワーキット
HPA&Analog vol.6冊子版
同人誌DL委託
同人誌DL委託(旧サークル名)
ブログ内検索
カレンダー
02 2017/03 04
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 31
最新コメント
[03/08 NONAME]
[01/19 gun534]
[12/14 NONAME]
[12/12 mike]
[12/06 mike]
最新トラックバック
SilverLight
アクセス解析
広告
忍者ブログ [PR]