カレンダー

04月 │2017年05月│ 06月
- 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月号】 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文字送信のプログラムなのでこの変数を配列にする必要もありません.どうせ後で文字列送信をやるだろうからこれでいいか,と考えてこうしました.


この記事に対するコメント

ほほう.これまたすっきりしたプログラムに.
でもDSP機能付のマイコンが付録とは…やるなトラ技!
【2007/07/24 04:19】 URL | hiro #Hj1FNbYI [ 編集]


でもDSP機能を使いこなせず普通にPCからパラレル信号を出すためのアダプタになってしまいそうなオチ.それはそれでロボットとかに使えるわけだけど.
【2007/07/30 20:46】 URL | なおき #F54KmX5Y [ 編集]




この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://kougaku.blog28.fc2.com/tb.php/245-bc372823
この記事にトラックバックする(FC2ブログユーザー)

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