FT245RL_Linux
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
(これをMac OS Xで動かす方法は[[FT245RL_MacOSX:http://is.o...
*FTDI社USB-8ビットパラレル変換器 FT245RL を Linux で使う(...
秋月電子で購入.一個980円.
FTDI社のFT245RLにUSBコネクタ付けて,パスコンなど取り付け...
使い易くした製品.
FTDI社の製品は,USB-シリアル変換器チップで有名なシリーズ...
これは,USB-シリアル変換に,バッファとパラレル入出力を付...
FTDI社が配布している仮想シリアルドライバを使うと,シリア...
バッファを読み書きできるが,
外部端子にタイミング信号を与えないとバッファからパラレル...
一方,FTDI社が配布しているライブラリーをインストールして...
Bit-Bangモードという方式でお手軽にパラレル入出力できる.
Big-Bangモードは,外部からバッファー・パラレル端子間の変...
与えなくても,内部で定期的に更新してくれるモード.
FTDI社のページ
http://www.ftdichip.com/Drivers/D2XX.htm
から,各種プラットフォーム用のドライバ/サンプルプログラ...
ここからダウンロードしたうちの,Bit Modeのサンプルが,
お手軽にパラレル入出力するためのBit-Bangモードのサンプル...
**インストールとテストの方法 [#uf6cc63a]
+http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx0.4....
をダウンロードして内容をどこかにコピーする.
+解凍する
--gunzip libftd2xx0.4.13.tar.gz
--tar -xvf libftd2xx0.4.13.tar
+libftd2xx.so.4.13を/usr/local/libにコピー
--cp libftd2xx.so.0.4.13 /usr/local/lib
+バージョン名を外した名前のシンボリックリンクを作っておく...
--cd /usr/local/lib
--ln -s libftd2xx.so.0.4.13 libftd2xx.so.0
+さらに/usr/libにもシンボリックリンクを作っておく
--cd /usr/lib
--ln -s /usr/local/lib/libftd2xx.so.0.4.13 libftd2xx.so.0
+usbを認識させるため/etc/fstabに以下を追加
--none /proc/bus/usb usbdfs defaults,mode=0666 0 0
+再マウントしてusbを認識させる
--mount -a
Samplesのディレクトリの中に,サンプルプログラムが多数ある.
Samplesの中でmakeすると全部コンパイルされる.それぞれのデ...
たとえば,bitmodeのプログラムは,1バイトの値を出力して,...
**ハードウェアを作ってテストする [#z640f0c1]
ブレッドボードの上に,LEDとスイッチを作って,接続した.
#ref(FT245RL_MacOSX/DSC_0028s.jpg);
このスイッチを押すとLEDが光るプログラムを,bitmodeのサン...
LEDはData 0 (LSBのビット) に,スイッチはData 4に接続して...
(逆スラッシュ¥が疑問符?に化けているので注意)
/*
To build use the following gcc statement
(assuming you have the d2xx library in the /usr/local/l...
gcc -o bitmode main.c -L. -lftd2xx -Wl,-rpath /usr/loca...
*/
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include "../ftd2xx.h"
#include <unistd.h> //for usleep()
// Globals
FT_HANDLE ftHandle = NULL;
void ft245close()
{
if(ftHandle != NULL) {
FT_Close(ftHandle);
ftHandle = NULL;
printf("Closed device?n");
}
}
void ft245quit()//コントロールCで止められた時の修了処理
{
ft245close();
exit(1);
}
void ft245open()
{
FT_STATUS ftStatus;
ftStatus = FT_Open(0, &ftHandle);//接続されている0番目...
if(ftStatus != FT_OK) {
printf("FT_Open(0) failed = %d?n", ftStatus);
exit(1);
}
FT_SetBaudRate(ftHandle, 9600);//読み書きする周期を指定
//上位4ビットを入力に,下位4ビットを出力に,Bit-Bangモ...
ftStatus = FT_SetBitMode(ftHandle, 0x0F/*1=out 0=in*/, ...
if(ftStatus != FT_OK) {
printf("Failed to set bit mode?n;);
exit(1);
}
}
void ft245write( unsigned char data)//1バイト出力
{
DWORD dwBytesInQueue = 0;
FT_Write(ftHandle, &data, 1, &dwBytesInQueue);
}
unsigned char ft245get()//1バイト入力
{
FT_STATUS ftStatus;
unsigned char ucdata;
ftStatus = FT_GetBitMode(ftHandle, &ucdata);
if(ftStatus != FT_OK) {
printf("Failed to get bit mode?n");
exit(1);
}
else return(ucdata);
}
int main(void)
{
unsigned char data;
signal(SIGINT, ft245quit); // trap ctrl-c call quit fn
ft245open();
for(;;) {
data=ft245get();
printf("data=0x%X?n", data);
if ( (data & 0x10) ==0 )
ft245write(0x01);
else
ft245write(0x00);
usleep(100000L);
}
ft245close();
return 0;
}
**openに失敗することへの対策 [#n3938e1d]
openするときにエラーコード3で、エラーが返ってくることがあ...
USB接続をしないときはエラーコード2です。
USB接続を外すと、2が返ってきて、USBに挿すと3が返ってくる...
同じコンピュータでArduinoを使ったことがある場合にも発生し...
これは、Arduinoをインストールしたときに、
FTD社のシリアル用ドライバがすでにインストールされていて、
これと衝突しているためです。
ArduinoのシリアルUSB変換器も、FTD社を使っているため、USB...
FTD社のチップを使うには、
このページで紹介しているD2XX (direct driver interface)の...
VCP (virtual COM port)というドライバの2種類があり、これら...
Arduinoを使ったか、もしくは、ほかのきかっけで、VCPドライ...
そちらが先にこのチップの使用権を占有してしまっていて、ope...
対策は、以下の2つです。
+VCPのドライバを削除する&br;
これを行うには、VCPのダウンロードページ
http://www.ftdichip.com/Drivers/VCP.htm
のLinuxのところのReadMeにしたがって、
sudo rmmod ftdi_sio
などとします。
--普通は、ArduinoとFT245RLを1つのコンピュータで同時に使う...
ドライバを外しても良いと思います。
--Arduinoも使わないといけない場合、
FTD社のVCPドライバを使わないArduinoを使うという手もありま...
最近のArduino (Arduino Uno, Arduino MEGA 2560)は、
AtmelのATmega8U2チップにファームウェアを搭載しUSBシリアル...
これは、標準のCDCクラスとして動作するので、
MacおよびLinuxではドライバーは必要なくなっています。
これらを使うことで、VCPドライバとの衝突はなくなります。
+チップのVID,PIDを変更する&br;
FTDIのマニュアルのどこかに書いてあります。(試していませ...
**追記:なぜかFT_Get Bit Modeがエラーを返す [#s6d1a938]
久々にこのプログラムを最新版ライブラリで試してみました.
するとどういうわけかFT_Get Bit ModeがFT error code 4で失...
その場合は,FT_Readを使ったらなんとかなりました.
ft245get()の部分を以下のようにすると,同様に動くようです.
unsigned char ft245get()//1バイト入力
{
FT_STATUS ftStatus;
unsigned char ucdata;
int readsize=0;
FT_Purge( ftHandle, FT_PURGE_RX | FT_PURGE_TX); //clear...
while(readsize==0) {
ftStatus = FT_Read(ftHandle, &ucdata, 1, &readsize);
if(ftStatus != FT_OK) {
printf("Failed to get bit mode. err %d\n", ftStatus);
exit(1);
}
}
return(ucdata);
}
**参考リンク [#y1cf72d0]
-http://akizukidenshi.com/catalog/items2.php?p=1&q=FT245RL
-http://www.ftdichip.com/Drivers/D2XX.htm
-http://www.ftdichip.com/Support/Knowledgebase/index.html
-http://ore-kb.net/hard/BitBang/
終了行:
(これをMac OS Xで動かす方法は[[FT245RL_MacOSX:http://is.o...
*FTDI社USB-8ビットパラレル変換器 FT245RL を Linux で使う(...
秋月電子で購入.一個980円.
FTDI社のFT245RLにUSBコネクタ付けて,パスコンなど取り付け...
使い易くした製品.
FTDI社の製品は,USB-シリアル変換器チップで有名なシリーズ...
これは,USB-シリアル変換に,バッファとパラレル入出力を付...
FTDI社が配布している仮想シリアルドライバを使うと,シリア...
バッファを読み書きできるが,
外部端子にタイミング信号を与えないとバッファからパラレル...
一方,FTDI社が配布しているライブラリーをインストールして...
Bit-Bangモードという方式でお手軽にパラレル入出力できる.
Big-Bangモードは,外部からバッファー・パラレル端子間の変...
与えなくても,内部で定期的に更新してくれるモード.
FTDI社のページ
http://www.ftdichip.com/Drivers/D2XX.htm
から,各種プラットフォーム用のドライバ/サンプルプログラ...
ここからダウンロードしたうちの,Bit Modeのサンプルが,
お手軽にパラレル入出力するためのBit-Bangモードのサンプル...
**インストールとテストの方法 [#uf6cc63a]
+http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx0.4....
をダウンロードして内容をどこかにコピーする.
+解凍する
--gunzip libftd2xx0.4.13.tar.gz
--tar -xvf libftd2xx0.4.13.tar
+libftd2xx.so.4.13を/usr/local/libにコピー
--cp libftd2xx.so.0.4.13 /usr/local/lib
+バージョン名を外した名前のシンボリックリンクを作っておく...
--cd /usr/local/lib
--ln -s libftd2xx.so.0.4.13 libftd2xx.so.0
+さらに/usr/libにもシンボリックリンクを作っておく
--cd /usr/lib
--ln -s /usr/local/lib/libftd2xx.so.0.4.13 libftd2xx.so.0
+usbを認識させるため/etc/fstabに以下を追加
--none /proc/bus/usb usbdfs defaults,mode=0666 0 0
+再マウントしてusbを認識させる
--mount -a
Samplesのディレクトリの中に,サンプルプログラムが多数ある.
Samplesの中でmakeすると全部コンパイルされる.それぞれのデ...
たとえば,bitmodeのプログラムは,1バイトの値を出力して,...
**ハードウェアを作ってテストする [#z640f0c1]
ブレッドボードの上に,LEDとスイッチを作って,接続した.
#ref(FT245RL_MacOSX/DSC_0028s.jpg);
このスイッチを押すとLEDが光るプログラムを,bitmodeのサン...
LEDはData 0 (LSBのビット) に,スイッチはData 4に接続して...
(逆スラッシュ¥が疑問符?に化けているので注意)
/*
To build use the following gcc statement
(assuming you have the d2xx library in the /usr/local/l...
gcc -o bitmode main.c -L. -lftd2xx -Wl,-rpath /usr/loca...
*/
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include "../ftd2xx.h"
#include <unistd.h> //for usleep()
// Globals
FT_HANDLE ftHandle = NULL;
void ft245close()
{
if(ftHandle != NULL) {
FT_Close(ftHandle);
ftHandle = NULL;
printf("Closed device?n");
}
}
void ft245quit()//コントロールCで止められた時の修了処理
{
ft245close();
exit(1);
}
void ft245open()
{
FT_STATUS ftStatus;
ftStatus = FT_Open(0, &ftHandle);//接続されている0番目...
if(ftStatus != FT_OK) {
printf("FT_Open(0) failed = %d?n", ftStatus);
exit(1);
}
FT_SetBaudRate(ftHandle, 9600);//読み書きする周期を指定
//上位4ビットを入力に,下位4ビットを出力に,Bit-Bangモ...
ftStatus = FT_SetBitMode(ftHandle, 0x0F/*1=out 0=in*/, ...
if(ftStatus != FT_OK) {
printf("Failed to set bit mode?n;);
exit(1);
}
}
void ft245write( unsigned char data)//1バイト出力
{
DWORD dwBytesInQueue = 0;
FT_Write(ftHandle, &data, 1, &dwBytesInQueue);
}
unsigned char ft245get()//1バイト入力
{
FT_STATUS ftStatus;
unsigned char ucdata;
ftStatus = FT_GetBitMode(ftHandle, &ucdata);
if(ftStatus != FT_OK) {
printf("Failed to get bit mode?n");
exit(1);
}
else return(ucdata);
}
int main(void)
{
unsigned char data;
signal(SIGINT, ft245quit); // trap ctrl-c call quit fn
ft245open();
for(;;) {
data=ft245get();
printf("data=0x%X?n", data);
if ( (data & 0x10) ==0 )
ft245write(0x01);
else
ft245write(0x00);
usleep(100000L);
}
ft245close();
return 0;
}
**openに失敗することへの対策 [#n3938e1d]
openするときにエラーコード3で、エラーが返ってくることがあ...
USB接続をしないときはエラーコード2です。
USB接続を外すと、2が返ってきて、USBに挿すと3が返ってくる...
同じコンピュータでArduinoを使ったことがある場合にも発生し...
これは、Arduinoをインストールしたときに、
FTD社のシリアル用ドライバがすでにインストールされていて、
これと衝突しているためです。
ArduinoのシリアルUSB変換器も、FTD社を使っているため、USB...
FTD社のチップを使うには、
このページで紹介しているD2XX (direct driver interface)の...
VCP (virtual COM port)というドライバの2種類があり、これら...
Arduinoを使ったか、もしくは、ほかのきかっけで、VCPドライ...
そちらが先にこのチップの使用権を占有してしまっていて、ope...
対策は、以下の2つです。
+VCPのドライバを削除する&br;
これを行うには、VCPのダウンロードページ
http://www.ftdichip.com/Drivers/VCP.htm
のLinuxのところのReadMeにしたがって、
sudo rmmod ftdi_sio
などとします。
--普通は、ArduinoとFT245RLを1つのコンピュータで同時に使う...
ドライバを外しても良いと思います。
--Arduinoも使わないといけない場合、
FTD社のVCPドライバを使わないArduinoを使うという手もありま...
最近のArduino (Arduino Uno, Arduino MEGA 2560)は、
AtmelのATmega8U2チップにファームウェアを搭載しUSBシリアル...
これは、標準のCDCクラスとして動作するので、
MacおよびLinuxではドライバーは必要なくなっています。
これらを使うことで、VCPドライバとの衝突はなくなります。
+チップのVID,PIDを変更する&br;
FTDIのマニュアルのどこかに書いてあります。(試していませ...
**追記:なぜかFT_Get Bit Modeがエラーを返す [#s6d1a938]
久々にこのプログラムを最新版ライブラリで試してみました.
するとどういうわけかFT_Get Bit ModeがFT error code 4で失...
その場合は,FT_Readを使ったらなんとかなりました.
ft245get()の部分を以下のようにすると,同様に動くようです.
unsigned char ft245get()//1バイト入力
{
FT_STATUS ftStatus;
unsigned char ucdata;
int readsize=0;
FT_Purge( ftHandle, FT_PURGE_RX | FT_PURGE_TX); //clear...
while(readsize==0) {
ftStatus = FT_Read(ftHandle, &ucdata, 1, &readsize);
if(ftStatus != FT_OK) {
printf("Failed to get bit mode. err %d\n", ftStatus);
exit(1);
}
}
return(ucdata);
}
**参考リンク [#y1cf72d0]
-http://akizukidenshi.com/catalog/items2.php?p=1&q=FT245RL
-http://www.ftdichip.com/Drivers/D2XX.htm
-http://www.ftdichip.com/Support/Knowledgebase/index.html
-http://ore-kb.net/hard/BitBang/
ページ名: