掲示板


[記事リスト] [返信する] [新着記事] [過去ログ] [ワード検索] [留意事項] [管理用]

記事No 852
タイトル Re^4: USART受信プログラム
投稿日 : 2017/03/23(Thu) 11:13:47
投稿者 radio
参照先
nさま

度々すみません。
少しずつ原因らしきものが見えてきました。


原因を解析するために、状態確認用のLEDを点灯させています。
最初の'S'を受信: 白色LED点滅
次の'S'を受信:  黄色LED点滅

この点滅をわざと、delay時間を設けて行ってみました。
50msecに設定して点滅させてみたところ、'S'、'S'の後の、5バイトデータを受信することができませんでした。
⇒LCDに何も表示されない + 5バイトデータの一致判定プログラム(Errorなら赤色LED、Errorが無ければ緑色LED)で確認

この時間を5msecに変更したところ、5バイトデータの一致判定プログラムまで進み、
Errorが無い(緑色LEDが500msecで点滅する)ことを確認することができました。

ただ、データを連続して受信することができません。
次の'S'、'S'受信まで行っているのですが、再びLEDに5バイトのデータが受信されません。

そこで、Errorが無いときに確認していた緑色のLEDの点滅周期を5msecに変更しました。
そしたら、連続してデータを受信することができ、送信側のデータに応じた動作(LED点灯)を行うことができました。


以上を踏まえて、何点か質問をさせてください。

@今の状態では根本的な解決になっておらず、送信側のデータに応じた動作(今はLEDを点灯するだけ)の時間が長くなると、同じような不具合(連続してデータを受信できない)が発生してしまいます。
 動作にdelay時間を設けてしまうと、受信できないのは何故でしょうか?


ABuf1[]内のでーたが"ffff"や"ffe8"になってしまうのは何故でしょうか?
先程の投稿でもお伝えしましたが、Xbeeを接続して、XCTUで送信データを確認してみると、送信側は02 00 00 00 00 の5バイトのはずですが、
LCDに表示されるデータが違ってしまいます。
(ただ、この表示のデータでも、送信側のデータに応じた動作はできていますので、私のLCD表示プログラムがおかしいのでしょうか。)
//Buf1[]内の数字を0〜4まで変更してLCDにデータを表示させました。
//Buf1[0]=02
//Buf1[1]=ffff
//Buf1[2]=ffe9 or ffea or ffe8
//Buf1[3]=00
//Buf1[4]=17


B初歩的な質問ですみません。
 LCDにBuf1[]の5バイト分を1行に表示させる場合、どのように記述すれば良いのでしょうか?  
今は、↓のように[]内の数字を変えて1つずつ確認しています。
sprintf(buff1,(const far rom char *)"Data=%02x",Buf1[1]);
lcd_cmd(0x80); //1行目へ移動
lcd_str(buff1);



5バイトデータ受信後のプログラムです。
照合一致(3 緑LED点灯、消灯)はコメントアウトしました。


void MotorControl(void)
{


/*** 2連送照合比較一致の場合のみ制御実行***/
Error = 0; // エラーフラグリセット
for(i=0; i<5; i++){
if(Buf1[i] != Buf2[i]) // 比較実行
{
Error = 0xFF; // エラーフラグオン
LED_R ^= 1; // 赤LED点滅
delay_ms(100);
}
}
if((Error == 0) && (RcvData == 'E')) // 照合一致か?
{
//LED_G = 1; // 3 緑LED点灯
//delay_ms(500);
//LED_G = 0; // 3 緑LED消灯
//delay_ms(500);


Direction = (int)Buf1[0]; // 方向セット
MLdata = (int)Buf1[1] * 256 + (int)Buf1[2];
MRdata = (int)Buf1[3] * 256 + (int)Buf1[4];
// 制御実行
switch(Direction) // 方向チェック
{
case 0:
//MLReverse(MLdata); // 後進の場合
//MRReverse(MRdata);
LED_G=1;
delay_ms(5);
//LED_G=0;
//delay_ms(500);
break;
case 1:
//MLFeed(MLdata); // 前進の場合
//MRFeed(MRdata);
LED_W=1;
delay_ms(5);
//LED_W=0;
//delay_ms(500);
break;
case 2:
MLStop(); // 停止の場合
MRStop();
LED_R=1; //4 赤LED点灯
delay_ms(5);
//LED_R=0; //4 赤LED消灯
//delay_ms(500);
break;
default: break;
}
}
}

- 関連一覧ツリー (▼ をクリックするとツリーを一括表示します)


- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ
参照先
画像UP
暗証キー (英数字で8文字以内)
投稿キー (右画像の数字を入力) 投稿キー


- 投稿記事修正/削除フォーム -
処理 No 暗証キー

- WebForum -