vine-users ML アーカイブ



[vine-users:078981] RS232C

  • From: kaz <okui@xxxxxxxxxxxx>
  • Subject: [vine-users:078981] RS232C
  • Date: Wed, 10 Dec 2008 23:58:26 +0900
こんばんは、奥井です。
LinuxとPICをRS232Cでつないで文字を送信するテストをやってます。(ボーレート2400、パリティなし、ストップビット1)
PICの方のプログラムはPCから送られるキャラクタ(ASCIIキャラクタの数字)を1文字ずつバッファに入れてそれをエコーバック、これをを5回繰り返したら5文字をLCDに表示します。
WindowsのHyperTerminalで確認したら5文字送信したらLCDに表示されました。但し1文字ずつ送信

Linuxで同じようにしようと思い調べたらデフォルトでボーレート9600、パリティなし、ストップビット1となってるらしいので2400に変更しました。
(LinuxはVine4.2  kernel2.6.16-76.39vl4 #1 SMP)
#stty ospeed 2400 --file /dev/ttyS0
#stty -F /dev/ttyS0
speed 2400 baud; line = 0;
-brkint -imaxbel

echoで文字を送信したらPICにつないだLCDに12345が表示されました。
# echo "12345" > /dev/ttyS0 <---1回目 LCD表示 12345

しかしつずけて文字を送信するとLCDの表示がずれていきました。
# echo "12345" > /dev/ttyS0 <---2回目 LCD表示 スペース スペース 123
# echo "12345" > /dev/ttyS0 <---3回目 LCD表示 2345 スペース
# echo "12345" > /dev/ttyS0 <---4回目 LCD表示 スペース 1234
# echo "12345" > /dev/ttyS0 <---5回目 LCD表示 345 スペース スペース
# echo "12345" > /dev/ttyS0 <---6回目 LCD表示 12345

6回目で元に戻ります。
1文字ずつ出力したら
# echo "1" > /dev/ttyS0 <---1回目 LCD表示 表示無し
# echo "1" > /dev/ttyS0 <---2回目 LCD表示 1 スペース スペース 1 スペース
# echo "1" > /dev/ttyS0 <---3回目 LCD表示 1 スペース スペース 1 スペース 
# echo "1" > /dev/ttyS0 <---4回目 LCD表示 スペース 1 スペース スペース 1
# echo "1" > /dev/ttyS0 <---5回目 LCD表示 スペース スペース 1 スペース スペース

どうやら送信文字以外の文字を送ってるようですがよくわかりません。
解決のヒントかもっと簡単な方法がありましたらご教授お願いします。

設定の詳細情報は以下のとうりです
# stty -a < /dev/ttyS0
speed 2400 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke