2015年4月25日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(受信機能追加)

目的

前回、チェックサムと送達確認(PICマイコンからFONに対して応答)を行うようにした。
 今回は、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。

概要

チェックサムOKの場合に、FONに対してACKを送信する。
 シリアル通信のクロックはFON側で生成しているので、
 イメージとしてはSPI通信に近いと思う。

結果

前回同様に1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒を送信し続けると、
 400回のコマンド送信に対して、送信NGは15回
  80回のときは、2回 2〜3%くらい?
 結果は地味だけど、PIC→FON方向の通信ができるようになったのは大きい


何をやったか

・フォーマット
1.データを送信するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [STX][チェックサム][DATA][ETX]
  受信データPIC→FON  1byte前に対する受信結果

2.送信結果を確認するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [ENQ]
  受信データPIC→FON  1byte前に対する受信結果

黄色・・・クロック
水色・・・受信データ(PIC→FON)この場合はACK(0x06)

------------------------------------------------
gpio_write_sr Start:CLK=12 DATA_OUT=11 DATA_IN=14
Send:[STX][CHKSUM = 14][DATA][ETX]<-4ms->[ENQ]
Input      = 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
RcvChk     = OK
Total Time = 307ms
------------------------------------------------

・FON側
・PIC側
受信処理の後、に送信したいものを出力するだけ
↓受信処理
sr_buf = ((sr_buf<<1) & 0xFE) | (0x01 & DATA_PORT);
↓送信処理
 //DATA 出力
 if((sr_out & sr_out_mask) == 0){
   DATA_OUT_PORT = 0;
}else{
         DATA_OUT_PORT = 1;
 }
 sr_out_mask = sr_out_mask >> 1;

・エラー発生回数測定用スクリプト
今日はここまで、次回は、PICからなにかデータを送信させてみるか

0 件のコメント:

コメントを投稿