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からなにかデータを送信させてみるか

2015年4月19日日曜日

FON2405EのGPIOでキャラクタ液晶を制御する(チェックサム追加)

目的

前回、なんとかFON2045E(RT3050)のGPIOを使って、キャラクタ液晶の制御を行ったが、受信が失敗してしまう場合があった。
そこで、チェックサムと到達確認(PICマイコンからFONに対して応答)を行うようにした。

結果

チェックサムの導入によって、受信失敗したものは、破棄できるようになった。
1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒
を送信し続けると、おおよそ1分に2回程度チャックサムエラーが発生している模様。

何をやったか

1.チェックサムの導入

   送信するデータを以下のように変更
   [STX][チェックサム][DATA][ETX]

   STX     : 02h
   チェックサム:DATA部の合計値を0〜15(下位4ビット分)
   DATA   :今まで送っていたデータ
   ETX    :03h
 
2.受信の追加
   
   送信後に、readしているだけ


PICからの戻りは画面に表示しているだけだけど、
今後は、再送とか実装していきたい。

2015年4月13日月曜日

WAPM-HP-AM54G54を入手

はじまり

近所のリサイクルショップで見慣れない形状の無線LANAPを発見。
業務用らしい。アンテナがなくて、500円。
別に無線を出したいわけでは無いので、これでもOKです。

どんなものか

 外観はこんな感じ。ぼろぼろ(笑)

 http://buffalo.jp/products/catalog/item/w/wapm-hp-am54g54/


赤丸のところにUARTがあるようだ。
miniPCI×2とか富豪だね。他のカードに変えたら面白いかな。
PoE対応なので、それで遊ぶのも面白いかも。

今後の目標

もちろんOpenWrt化

2015年4月5日日曜日

FON2405EのGPIOでキャラクタ液晶を制御する(高速化)

目的

先週、FON2045E(RT3050)のGPIOを使って、キャラクタ液晶の制御を行ったが、
1行(16文字)表示するのに、1.6秒かかってしまっていた。
今回これの高速化を目指す。

受信側(PIC)の高速化によって改善できないかを実験。

結果


 1.6秒→0.5秒にまで短縮することができた。

何をやったか


FON側・・・クロック生成をusleep(4ms)からビジータイマー1460μsに変更
PIC側・・・1ms周期の割り込みによるデータサンプリングを480usに変更
      デバック出力としてのUART出力をエラー時のみに変更

● クロック生成の変更
GPIOの制御に1.4μs要するので、これを1000回繰り返しただけ。
それで1460μs消費させる。

●割り込み間隔の変更
480μs もう少し攻めても大丈夫な気がするけど、余裕をみて。
PICは4MHzで動作しているので、1サイクルあたり1μs。
割り込み間隔100μsくらいでも 行けそうな気がする。