カテゴリ
リンク

ご迷惑をおかけします。以前の記事とリンクが切れています。ただいま修復中です。
当サイトは、玄箱PRO (KURO-BOX/Pro)を中心とした組み込み、Linuxと電子工作を扱っています。
会社案内

情報セキュリティおよび個人情報の取り扱いについて


コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。コメントはそれぞれ投稿した人のものです。


さて、今回は?

 XPort には3本の汎用 I/O 端子があって、少ない本数であってもいろいろと面白く活用している人がいます。 すでに前号の基板写真1と基板写真2で XPort に LED を接続したところを紹介してますが、こんな感じに CP1 に LED を接続しています。
 今回は、この LED をオン/オフさせる実験から入りましょう。下の写真をご覧ください。

x4uP1040344.jpg
基板写真1

 ここでの LED の接続方法は、XPort の電源ピン(+3.3V)から抵抗(680Ω)と LED を直列につなぎ、CP1 に接続しているものです。
 回路図を必要としないような非常に簡単な話しですが、実験は慎重にする必要があります。その一つは電源電圧で、もう一つはもちろんピン配列です。

x4LED.GIF
LEDの点灯回路図
 
 この実験では外部電圧を使っていませんから、まずは安心です。配線に関しては、XPort のピン配列がまとめられたカタログがありますので、再確認をしてからはんだ付けをしてください。
  http://www.co-nss.co.jp/download/catalog/catalog-xport03.pdf


LEDをオン/オフする

汎用入出力端子(GPIO)をコントロールする制御フォーマットは、
   「汎用I/Oコントロール資料(日本語)」
から知ることができます。
 9バイトの固定長によって GPIO がコントロールできるようになっています。

送信データのフォーマット
バイト列内容実際に使われる値(XPort)
指定するコマンド設定確認(0x10)、出力設定(0x1a)など
パラメータ1の1番目CP3(bit2) CP2(bit1) CP1(bit0)
パラメータ1の2番目ダミー
パラメータ1の3番目ダミー
パラメータ1の4番目ダミー
パラメータ2の1番目ダミー
パラメータ2の2番目ダミー
パラメータ2の3番目ダミー
パラメータ2の4番目ダミー

 ところでこの資料においては、出力を設定するコマンドは安全の意味で割愛されています。
 そこで、いま、
    http://www.lantronix.com/pdf/XPort_UG.pdf
にあるマニュアルから GPIO の制御部分だけを抜きだして説明します。

GPIO control protocol
Byte 0 Command Types
10hGet functions
11hGet directions (input or output)
12hGet active levels (high active or low active)
13hGet current states (active or not active)
19hSet directions
1AhSet active levels
1BhSet current states

 LED をオンオフ(出力を0または1に)するために、そのコマンドとしては 0x1a を使うことになります。

 さて、玄箱(pro)のコマンドとして、下に示すような形式で試すことができます。


kurobox-pro:/home/k-wada/program/xport/LED# ls
Makefile  onoff  onoff.c  onoff.o
kurobox-pro:/home/k-wada/program/xport/LED# ./onoff 192.168.1.22 0
<0>
:1a:
:0:
:0:
:0:
:0:
kurobox-pro:/home/k-wada/program/xport/LED#
kurobox-pro:/home/k-wada/program/xport/LED# ./onoff 192.168.1.22 1
<1>
:1a:
:7:
:0:
:0:
:0:
kurobox-pro:/home/k-wada/program/xport/LED#
 コマンド(onoff)の後に IP アドレスを続けて、最後に 0 (オン)か 1 (オフ)を指定します。必要なデータを送出後にはステータスを表示させています。
 ここで作成したプログラム・ソースを下に、また Makefile を含めて tar で固めたonoff.tar を用意しました。


/* 
   XPort LED  on/off 
   2008-4-10
*/
#include 
#include 
#include 
#include 
#include 


static  unsigned char status[] = {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static  unsigned char on[]  = {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
static  unsigned char off[] = {0x1a, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00};

//static  unsigned char mesg[] = {0x01};

#define PROT_NO	30704	/* ポート番号 */
#define BUF_MAX	5	/* 通信バッファ・サイズ */

static	struct sockaddr_in	sv_addr;	/* サーバ・アドレス */
static	struct hostent		*sv_ip;		/* サーバIPアドレス */

static	int	sid;		/* ソケット識別子 */
static	char	buf[BUF_MAX];	/* 通信バッファ */

/* クライアント・メイン */
int
main(int argc, char	*argv[])

{
	int	rtn;		/* 返却値 */
	int i;


	for(i = 0; i < BUF_MAX; i++) {
	  buf[i] = 0xff;
	}


	/* コネクション型ソケットの作成 (socket) */
	sid = socket(AF_INET, SOCK_STREAM, 0);
	if (sid < 0) {
		perror("cl:socket");
		exit(1);
	}

	/* サーバのIPアドレスを取得 */
	sv_ip = gethostbyname(argv[1]);

	if (sv_ip == NULL) {
		perror("cl:gethostbyname");
		exit(1);
	}

	/* ソケットの接続要求 (connect) */
	bzero((char *)&sv_addr, sizeof(sv_addr));
	sv_addr.sin_family = AF_INET;
	sv_addr.sin_port = htons(PROT_NO);
	memcpy((char *)&sv_addr.sin_addr, (char *)sv_ip->h_addr, sv_ip->h_length);
	rtn = connect(sid, &sv_addr, sizeof(sv_addr));
	if (rtn < 0) {
		perror("cl:connect");
		close(sid);
		exit(1);
	}

//	printf("%c\n", *argv[2]);

	if (*argv[2] == '1') {
	  send(sid, on, sizeof(on), 0);
	  printf("<1>\n");
	} 
	if (*argv[2] == '0') {
	  send(sid, off, sizeof(off), 0);
	  printf("<0>\n");
	}
	if (*argv[2] == '9') {
	  send(sid, status, sizeof(status), 0);
	  printf("<9>\n");
	}

//	  printf("\n");


	/* メッセージ通信処理 (send/recv) */
	rtn = recv(sid, buf, BUF_MAX, 0);
	if (rtn < 0) perror("cl:recv");
	for(i = 0; i < BUF_MAX; i++) {
	  printf(":%x:\n", (unsigned char)buf[i]);
	  if(i == 6) {
		printf("-------------\n");
	  }
    }

	
	/* ソケットの開放 (shutdown/close) */
	rtn = shutdown(sid, 2);
	if (rtn < 0) perror("cl:shutdown");
	close(sid);
	exit(0);
}


 紹介している3本の汎用端子は複数の機能を持っていますから、まず始めに例のデバイス・インストーラ(Device Installer)を使って設定をしなくてはなりません。ここでは LED を点灯させるわけですから"出力"に設定します。ところが、最新の Device Installer はこの設定が簡単にはできない様子です。現時点でのバージョンは 4.1.0.14 となっています。

x4LantronixDeviceInstaller41014.jpg
 結局のところ、使いなれた旧バージョンを探さなくてはならなくなり、 http://www.co-nss.co.jp/download/download-ds-app.html
からたどってみましたが、リンク切れでした。そして、この Device Installer は新旧バージョンのどちらか一方のみがインストールできる仕様であるため、新しいバージョンをインストールした後に至っては、残念にも旧バージョンは UnInstall された後でした。
  この点で、デバイスインストーラの Install の詳細と新旧バージョンの違いについて、わかりやすく説明しているサイトが見つかりました。それは、ここです。
   http://e-kit.jp/products/xport/update.htm
 また、古いバージョンの詳細な説明も
   http://www.shoshin.co.jp/computer/lantro/xportinstaller/index.html
に記述がありました。それと、
   http://www.rasteme.co.jp/pdf/manual/lcnv232rx-manu.pdf
にも、より詳細な説明がありましたので参考にしてください。
 なお、古いバージョン()の Device Installer を検索しまくってみると、
    Device Installer Version 3.6
を運良く拾うことができました。結局のところ、これで利用して設定を行いました。

x4DeviceInstaller36-configure.jpg
 この図のように、CP1~3 の入出力方向を出力に設定しておきます。今回は外界からの出力(XPort からは入力)という設定の場合に、出力同士がぶつからないように注意しましょう。
 上述のように曲折しながらも XPort の汎用端子の制御方法がわかったので、この応用として「パトライトを点灯させる」ことにしました。写真のようなものです。

x4uP1000101.jpg 
写真4:おもちゃながらパトライトを見つけて来ました


 それでは、次回の記事をお楽しみに。 
<和田 好司>

 カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: XPort活用 「その2」《パトライト編》 前編

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/1620

コメントする

おすすめ書籍
Powered by
Movable Type 4.1