線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1464
推到 Plurk!
推到 Facebook!

透過MCU解析特殊通訊

答題得分者是:walltsou
極光
初階會員


發表:32
回覆:96
積分:40
註冊:2005-01-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-09-29 08:21:50 IP:59.104.xxx.xxx 訂閱
最近有須解析一組特殊通訊!該通訊格式如下

SOF >> _-----_ 寬度為35uS

Bit H >> _--------___-- H = 16uS ; L = 8uS

Bit L >> _---______-- H = 8uS ; L = 16uS

當收到連續 --___________-- 超過75uS Low -> 表示通訊結束


我自己用了很多辦法去抓,都會有資料抓錯的問題;目前是透過兩組正負緣觸發去抓脈波寬度,再照時間去比較是H or L,單因現在使用的mcu中斷響應很慢,由波行觸發後要隔4uS才有辦法進中斷程式,這導致讀取資料錯誤。

不知個位有什麼好方法可以提供參考




walltsou
一般會員


發表:2
回覆:34
積分:22
註冊:2012-09-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-09-29 11:17:28 IP:219.87.xxx.xxx 訂閱
8 us有點短,對於低速MCU來說有些吃力。
不過還是有一點點機會。
因為1 bit傳輸需時24us。也就是在第8 us時一定要讀到IO。
所以設定中斷在上綠觸發啟動。經4us後在中斷程式中,要在8us後面一點讀取到IO,讀到hi/low就是這次bit的結果。然後就可退出中斷。
不配合IO及示波器會很不好做。
若以STM32系列的話,可以使用PWM In功能,用硬體去取得hi/low時間值。

PS: 感謝你推薦"簡單多工",最近改版已沒機會在8051上試跑了。使用有問題也請告知,我會改看看。
------
目前以STM32為主力
部落格
http://wallace7914032.blogspot.tw/
walltsou
一般會員


發表:2
回覆:34
積分:22
註冊:2012-09-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-09-29 12:00:44 IP:124.219.xxx.xxx 訂閱
設計需求:一個上緣中斷,一個70us中斷timer
SOF: 上緣中斷,讀取16 us後的IO,啟動timer,中斷退出。
1~n bit:: 上緣中斷,讀取8 us~15 us的 IO,記錄timer,timer漬0,中斷退出。
70 us timer中斷: 已超時,表示已無上緣中斷。啟動解碼及時間檢查的程式,中斷退出。
解碼程式:檢查時間合理性,及解碼正確與否。
------
目前以STM32為主力
部落格
http://wallace7914032.blogspot.tw/
極光
初階會員


發表:32
回覆:96
積分:40
註冊:2005-01-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-09-29 22:24:58 IP:59.104.xxx.xxx 訂閱

===================引 用 walltsou 文 章===================
設計需求:一個上緣中斷,一個70us中斷timer
SOF: 上緣中斷,讀取16 us後的IO,啟動timer,中斷退出。
1~n bit:: 上緣中斷,讀取8 us~15 us的 IO,記錄timer,timer漬0,中斷退出。
70 us timer中斷: 已超時,表示已無上緣中斷。啟動解碼及時間檢查的程式,中斷退出。
解碼程式:檢查時間合理性,及解碼正確與否。

做法為,上緣觸發後直接在中斷進行 XX us延遲後,讀取io狀態,判定SOF or BitH or BitL,同時透過70uS中斷時間來卻認是否超時!
我這樣說因該沒錯吧!

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

題外話: 您的"8051簡單多工"真的是對我幫助很大,在此先感謝您發表"8051簡單多工"這篇文章。
我工作上的程序沒有很多時後是兩件事件須同時進行的,但提供給我另外一的幫忙就是'有限狀態機',我大部分的程序都是 A -> B -> C。

以往我都用 Switch 旗標來判斷流程,但導入'簡單多工'做法,我把每個動作都看為一組TASK,透過TASK切換就可換到下一個TASK。就如同連連看一般。
程式寫起來好寫很多,主回圈都不用動,超級方便的! 我現在的案子都是以該架構去跑的!




walltsou
一般會員


發表:2
回覆:34
積分:22
註冊:2012-09-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-10-02 13:14:12 IP:219.87.xxx.xxx 訂閱
同時做SOF及Bit H及Bit L也可以。
不過我會分開。主要是要讓Bit H及Bit L執行時間短些,早些退出中斷程式。
因為在中斷中做延時並不是好方法,要不是硬要軟體去解,這種延時對MCU效能是無效的消耗。

------
目前以STM32為主力
部落格
http://wallace7914032.blogspot.tw/
aki
版主


發表:30
回覆:687
積分:753
註冊:2004-01-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-10-02 17:43:50 IP:203.69.xxx.xxx 訂閱


你的問題可以參考此書有詳細的解說!

ET13x210/211/221 無線通訊模組應用實例
作(譯)者:李仁貴、劉新盛、陳俊錩
出版者:全華
書號:05381
ISBN:9572148176

祝你好運!

===================引 用 極光 文 章===================
最近有須解析一組特殊通訊!該通訊格式如下

SOF >> _-----_ 寬度為35uS

Bit H >> _--------___-- H = 16uS ; L = 8uS

Bit L >> _---______-- H = 8uS ; L = 16uS

當收到連續 --___________-- 超過75uS Low -> 表示通訊結束


我自己用了很多辦法去抓,都會有資料抓錯的問題;目前是透過兩組正負緣觸發去抓脈波寬度,再照時間去比較是H or L,單因現在使用的mcu中斷響應很慢,由波行觸發後要隔4uS才有辦法進中斷程式,這導致讀取資料錯誤。

不知個位有什麼好方法可以提供參考





系統時間:2017-10-20 0:39:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!