カレンダー

06月 │2007年07月│ 08月
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 - - - -

 プロフィール

はしもと

Author:はしもと
ユーザインタフェース系のお仕事をしてます.関心領域は画像処理,拡張現実感,ヒューマンコンピュータインタラクション,エンタテインメントコンピューティングあたり.モノ書きもやってます.

 工学ナビ

工学ナビは工学系の技術のチュートリアルを扱うサイトです.

 作ったもの

 Twitter

 

 天気予報


 ブログ内検索

 カテゴリー

最新コメント

 RSSフィード

 リンク

このブログをリンクに追加する




工学ナビの中の人 はしもとのブログです. いろんなコトを研究的,工学的な視点で見つめます.
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【トラ技8月号】 RS232Cを使ってPCと付属基板の相互通信
 前回はPCから付属基板にキャラクタコードを送る実験をやりましたが,今回はその逆もやってみましょう.

 トラ技8月号の付属基板には,プログラム書き込みのために受信用インタフェース回路のがあらかじめ組み込まれていますが,dsPICからPCにデータを送信するための回路は組まれていません.ここでいう送受信のインタフェース回路というのは,レベル変換回路のことです.PICとPCでは扱っている信号レベル(電圧)が異なるので変換が必要になります.

 というわけで,レベル変換回路を組んでPCと付属基板の間で双方向通信ができるようにしてみましょう.

※実験は自己責任でお願いします.回路に間違いなどがあったらすぐにお知らせください.


■RS232Cレベルコンバータ回路
 RS232C用のレベル変換ICが売られているのでこれを利用します.今回は秋月で売られているADM3202ANを使いました.必要な部品(コンデンサとICソケット)がついて200円で売られています.

RS232CLevelConverter.png

RS232Cレベルコンバータ回路(クリックで拡大)

 このレベル変換回路は,ソケットなどを取り付けて単体の装置にしておくといろいろと便利です.ポケコンとかGBAをPCを繋ぐ通信アダプタとしても使えます.

RS232Cconv.jpg
ケースに入れてみました.

■相互通信プログラム
 dsPIC側のプログラミングを行います.以下のプログラムを作成し,dsPICにダウンロードしてください.このプログラムでは,受信したキーコードに+1した値をPCに送信します.例えば,PCから'A'というコードを送った場合は'B'というコードが返ってきます.

#include <p30f2012.h>

void main(void)
{
U1MODE = 0x8000; // alternate I/O (U1TX/U1RX), N81
U1BRG = 95; // 19200bps
U1STA = 0x0400;

while (1) {
if (U1STAbits.URXDA!=00) {
U1TXREG = U1RXREG + 1;
while (U1STAbits.UTXBF!=0);
}
}
}

U1RXREGに受信データが入っています.そしてU1TXREGに送信したいデータを書き込みます.


■トラ技8月号付属基板との接続
RS232C_dsPIC8.png

こんな風に接続します(クリックで拡大)

 レベルコンバータに供給する電源は付属基板の電源と同じものを使います.レベルコンバータのRxD端子を付属基板の23pin(U1TX),レベルコンバータのTxD端子を付属基板の24pin(U1RX)に接続します.

jikken070729.jpg

■dsPIC←→PC データ送受信実験
 Windowsに付属している「ハイパーターミナル」というソフトを使います.「接続の設定」で接続方法を使用するCOMポートに設定します.COMのプロパティは,ビット/秒(bps):19200,データビット:8,パリティ:なし,ストップビット:1,フロー制御:なし,に設定します.

com_config_070729.png

com_test_070729.png
実験の様子.キーボードの'1'を入力すると'2'が,'A'を入力すると'B'が返ってきます.


さて,これの次にやるオーソドックスなネタといえば,やはり「PCから文字列を送り,PICで処理してLCD(液晶表示器)に表示」ですかね.


スポンサーサイト
代理人あるいは擬人化によるインタラクション
 アクセス解析経由で知ったのだが,ツンデレサーチというものがあるようだ.

「ツンデレサーチ!」とは、なかなか自分で決められない優柔不断なあなたのために、私が代わりに検索してくる「ツンデレ型検索エンジン」のことよ。私のオススメのキーワードで、あなたもネットサーフィンを楽しむといいわ。べっ、べつにあなたのために検索するんじゃないんだからねっ!

なるほど.ためしに「トランジスタ技術」を検索させてみよう.

tundere01.png
検索結果(クリックで大きな画像)


tundere02.png

ちょっ・・・えー?

tundere03.png

トランジスターってあんた,エンジニアは長音符はつけないんだよ!
優柔不断以前に「トランジスタ技術」が正式名称なんですが.

まぁいいや.
それじゃ君のオススメの「トランジスター技術」で検索してくれ.

tundere04.png

tundere05.png

ちょっと待て


 どうも彼女はソーシャルブックマークから検索してきているらしい.同様のもので俺サーチ(兄貴型検索エンジン)というのもあるが,この手のサーチエンジンは公式サイトよりも,それに派生した話題を見つけるほうが得意のようだ.

 それにしても「検索エンジンの代理人 = おまえの代わりに私がやる」というインタフェースは面白い(Officeのイルカと同じだけど).体裁としては「ユーザ ←→ 代理人(エージェント) ←→ 検索エンジン」という形をとっているが,実際のところ「代理人=検索エンジン」としても同じことなので,検索エンジンを擬人化したとも言えなくもない.

 擬人化といえば,家電やゴミ箱にマイコン駆動の手足・目・口を取り付けて擬人化してしまうという珍妙な研究をインタラクション2007で見た[1].電子レンジに「僕の口に食べ物を入れてください」などとしゃべらせて,使い方の説明をわかりやすく伝えるというものだ.擬人化によって,ユーザと家電の間に直感的なインタラクションを生み出し,ユーザが装置の意図を受け取りやすくなるらしい.

 インターフェースを擬人化する,あるいは人間ライクなもの(代理人)を使用するだけで親しみやすいシステムが割と簡単に実現できてしまう,という点がミソだ.これはいろんなことに応用が利くけど,調子に乗りすぎて,そのうちマイコンを搭載したアンパンが「僕の頭をお食べ」とか言い出しそうな気がして怖い[2].


参考文献
[1] 大澤ら:擬人化した物体によるインタラクション手法の提案,インタラクション2007予稿集,pp.193-194,2007.
[2] Jamら:パンの擬人化に関する基礎提案,インタラクション200X予稿集,pp.100-103,200X.


【トラ技8月号】 PC側の通信ソフトを自分で作ってLEDピカピカ
トラ技8月号の付属基板は,半田付けなしでテストができます.
といっても最低限,クリップ付接続ケーブル,マンガン電池3つ,RS232Cケーブルが必要ですが.

toragi_070722.jpg
記事に習って接続してみたところ.

付属基板のdsPICにはあらかじめサンプルプログラムが書き込まれています.'0'~'5'の文字をシリアルで送信することにより,付属基板についている2つのLEDの点灯を制御できます.この通信には,CD-ROM収録のプログラムを使うようになっていますが,Windowsに付属している通信ソフト「ハイパーターミナル」を使ってもテストできます.

ですが,やっぱりPC側の通信ソフトも自分で作りたいところですよね.というわけで,Windowsでシリアル通信をやるC言語のプログラムはこちら↓ CD-ROM付属のソフトと同様に'0'~'5'の値を入力して値をdsPICに送信できます.

#include <windows.h>
#include <stdio.h>

int main(void)
{
HANDLE hCommHndl; // 通信ポートハンドル
DCB com_setting; // 通信設定
int port; // ポート番号
char port_name[64]; // ポート名
char data[64]; // 送信データ
DWORD nByte = 1; // 送信データバイト
DWORD nSentData; // 送信済データバイト

// ハンドル取得
printf("port番号:");
scanf("%d",&port);
sprintf(port_name,"COM%d",port);
hCommHndl = CreateFile( port_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if (hCommHndl == INVALID_HANDLE_VALUE) {
printf("ポートをオープンできませんでした\n");
return 0;
}

// 通信設定
GetCommState( hCommHndl, &com_setting );
com_setting.BaudRate = 19200; // 通信速度[bps]
com_setting.ByteSize = 8; // データサイズ
com_setting.Parity = NOPARITY; // パリティなし
com_setting.StopBits = ONESTOPBIT; // ストップビット 1
com_setting.fBinary = TRUE; // バイナリモードON
com_setting.fParity = FALSE; // パリティチェックOFF
com_setting.fOutX = FALSE; // 送信Xフロー制御OFF
com_setting.fInX = FALSE; // 受信Xフロー制御OFF
SetCommState( hCommHndl, &com_setting );

printf("qを入力して終了\n");

while (1) {
printf("send character = ");
scanf("%s",&data);
if (data[0]=='q') break;
WriteFile( hCommHndl, data, nByte, &nSentData, NULL );
Sleep(500);
}

CloseHandle( hCommHndl ); // ポートを閉じる
return 0;
}


scanfを使って逐次値を送信する場合は問題ないですが,連続して値を送る場合は適当にウェイト入れないといけません.(そのためのSleep(500))

それにしてもRS232Cの現役っぷりには驚かされますね.最近のPCにはRS232C端子がないのでUSB→RS232C変換ケーブルは必須です.


【07/07/23追記】
char data[64]; // 送信データ

この64という値は適当です.また,1文字送信のプログラムなのでこの変数を配列にする必要もありません.どうせ後で文字列送信をやるだろうからこれでいいか,と考えてこうしました.


トラ技8月号はdsPICマイコン基板付き
雑誌付録ってわくわくするもんですよね.
それが技術系雑誌になるとこうなる.マイコン基板付き!

CA340124.jpg
ついカッとなってやった.反省はしてない.

基板の販売元のマルツパーツ館のサイトを見に行ってビックリしました.
1980円で売られてましたよ.ちなみにトラ技は1080円
なんじゃこりゃー.(送料も考えると恐ろしい話です)

dsPIC02.png

dsPICについては完全に素人なんですが,PICにDSP(Digital Signal Processor)の機能が
付いたものらしいです.つまりは音声信号とかを処理できるようになるわけですな.

来月号は拡張基板が付いてくるぞ!
ほんとやりすぎなんだからもう!


台風が通り過ぎてった連休
連休中は,電脳コイル見て,山登って,lain見て,EZUSBいじってました.
台風の影響が特になかったのが幸い.

工学ナビのほうでUSB-IOとEZUSBの特集でも組もうかと思ってるんですが,
今月は2件論文を書かないといけないので微妙な状況です.

EZUSBといえば,去年やってたノートPCロボット.
あれはEZUSBで制御するつもりだったんですが,EZUSBをちょっと別件で
使ってしまったために企画が中断してしまいました.暇を見て再開したいと思います.

岩井さんのTENORI-ONがいつまでたっても出ないからEZUSBで作ってしまおうかと考えつつ,
ふらっと開発ブログのほうを覗いたら…そろそろ出るっぽいですよ!

ハードウェアいじりしてたらマイコン熱が再燃してきて,
ポケコンとかPICがやりたくなってきました.
8月号のトラ技はPICマイコン付なので買っておこうかな.2冊くらい.




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。