2008年10月30日 星期四

89C51 與 RF 發射模組的問題



> 我想請問 如果我用 89C51 的 txd 的串列傳輸


> 送出一各 8 bit 的串列訊號 如後


> 給 RF 的發射模組 (TG-11 303Mhz) 發射出去


> 然後 在 接收模組上 接到 RS232 送給PC


> 然後 用 VB MSCOMM 顯示出來


> 但市不知道為什麼 接收的訊後 都一直不對 會亂跳


> 如果不接發射模組 8051 直接接到 RS232


> 一切正常  想請問 這是什麼原因...


> 我們老師不讓我們用 編解碼 IC HT12E



  空中最好不要直接用 UART , 因為裡面的訊號中會有太長的定態, 也就是在資料中, 常常會有連


  續的 0 , 或連續的 1.



  在連續的期間, 只要有一丁點的干擾, 你的資料就完蛋了! 有空可以參考一下各種軟碟機的低階


  讀寫原理, 若你要用那些的編碼最好!



  有一個 PCM  的飛機遙控器, 就是用 APPLE ][ 軟碟的編碼方式...


  若你要直接用 UART, 最好編碼後, 使之沒有連續的 1 (或 0) , 再用.  傳送資料時, 定態不要超


  過三個 bit 的時間.



  所以你可能要把一個 byte 的資料, 拆成兩 byte, 編碼插一些 bit  後, 再來送. 對方接到後, 再


  組合回來.



  同步碼, 前導碼....等等控制碼, 用資料編碼沒有用到的, 這樣接收的程式比較好寫.


  當然, 無線通訊中, 由於失誤率遠大於有線, 故一定要有檢查碼 (有線幾乎都有在核對, 更何況是無


  線呢? ) ; 以便讓收方要求重送, 還是丟棄.



  另外 51 會干擾接收模組. 可的話, 用頻譜儀看一下在接收頻率附近的那幾根諧波, 有沒有很大根,


  有沒有命中接收頻率.



  注意 RF 模組的頻寬, 以便規化適合的鮑率.


  ~~~~~~


很精闢的見解,一針見血,佩服,這位仁兄所說得情形與敝人先行實驗的結果完全吻合,實為值得參考


的文章,好好研究個中道理,就會明白問題來源,編碼與通訊協定是重要的考慮與必要的措施..


Good luck....


--


Free Tech (Win32Asm, Electronics..)


http://freetech.hypermart.net/


Updated: May-9, 2001 / 20:15



以前的 post (2)


=========================


Re:使用無線模組(類似tg11)與rs232連接,做無線單向的資料傳輸遇到的問題


>


>TG11 模組..基本上是用來傳送簡單的命令而已..類似機車的遙控發動器...


>加上編解碼 IC,可以傳送的距離非常遠..我有測試過..可達到 50 幾公尺..再遠沒測過了..


>


>至於你說的這個架構..


>基本上我也是有嘗試過...


>只不過我的架構是...


>PC->RS-232->HIN232(電壓準位轉換)->無線發射模組 ~~ 無線接收模組->8051 的 RS-232 埠


>但是..可以傳送的距離很短..二~三公尺左右..


>


>因此..基本上你的架構應該是可行的..


>只是有些地方可能你可以嘗試一下...


>我傳送資料時..大概每秒要傳送 30 幾筆左右...每筆大約 10Byte 左右..


>8051 才能穩定的接收到資料...


>我的 Baud Rate = 4800 bps...8N1...


>給你參考...希望對你有幫助...^^


>


>另外..你可以到 Google 用 "RWS-434" 關鍵字應該可以查到很多資料..


>還有..元智大學也有相關的文件..


>http://designer.mech.yzu.edu.tw/article/articles/technical/(2001-08-30)


>無線電收發模組電路製作介紹.htm


>


>



你可能要嘗試著將傳送資料的"頻率"提高...


例如..每秒傳送字串"123456789"...30-40次...


也就是說..每隔 30mS 左右..就將字串"123456789"傳送過去...


這樣可以提高資料傳送時的穩定度...



另外..二個模組不要擺太遠..一開始最好離近一點...模組需要加上天線..會比較好..


嗯..是的..接收端會一直接收到雜訊..若要排除接收到雜訊..則可以自定接收的格式...


例如..若你要傳送"ABC"這三個字元過去...則你的格式可能可以類似寫成這樣子...



$ABCk@


$-->表示前導符號...


ABC-->表示欲傳送的資料..


k-->表示檢查碼..Check Sum


@-->表示結束符號...



程式可以寫成...


當接收到的字元..是 '$' 時..


則開始接收資料..並同時儲入 Buffer..


一直接收到..結束字元 '@' 出現...或資料長度大於某個值..才結束接收..


當字串接收完成後, 再比對 Check Sum 與傳送的資料是否符合..


若符合..則表示資料接收正確...



給你參考..希望有幫助..^^


呵呵~~~看來有人碰到跟我一樣的問題喔~~我之前有做一個題目,其中也是需要無線傳輸,


於是我用的架構跟你們討論的一樣(因為這是最方便的),但是我發現,這需要將傳送的包率


達到 115200 才能夠比較容易接收到,而且為了增加傳輸的可信度,使用了


handshake+boardbast+packet 的 Protocol,因為我這是一個 server 對很多的 client 做控制,


但都是使用一樣的頻率,所以我是用 TDM 方式來做,但還是不穩,有時不到 1 秒就可以控制


有時要等一分鐘?!@@a....這種通訊系統實在是太爛了....當下我也找不出方法可以解決就畢業了....


但是現在我知道問題所在了



原因是 "0","1" 分別要用不同的狀態來表示,不能直接把 "O" 當成電位 0V 送給模組,


這樣會變成接收段無法判斷現在是什麼狀態,這麼說好了,如果是送 1 出來的話還沒什麼錯誤,


但 RS232 是 狀態0 就是 0電位,這時接收端就會接收到雜訊,運氣好的話若雜訊是在 TTL 的


0準位以下,就收到 0,但雜訊一個過大,就變成 1 了,那這時就會出錯



所以很不幸的...不能直接送 RS232 訊號給模組....所以別偷懶了~~~自己寫個 protocol 來傳吧,


我建議可以遵循紅外線的傳送方式來送,因為 PT2262 這個無線遙控器 IC 就是用這樣的方式來傳,


大家可以去 GOOGLE 找這個 SPEC.裡面有 PROTOCOL 的詳細解說或是使用 Manchester 編碼


也是可以的~~不管是用什麼方法,反正原則就是千萬不要用電位 0 來代表有意義的資料


送到無線模組~~說完了>_<||



沒有留言: