> 我想請問 如果我用 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 來代表有意義的資料
送到無線模組~~說完了>_<||
沒有留言:
張貼留言