會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





PIC18F4520馬達串聯通訊協議
初級會員
註冊日期:
2009/12/01 10:06
所屬群組:
註冊會員
文章: 26
等級: 3; EXP: 83
HP : 0 / 70
MP : 8 / 1736
離線
各位好,目前手邊有個機器手臂控制案件,MCU須配合功能如下

主控端為PC發出UART訊號-->通過USB/UART控制板-->控制多個可定址伺服馬達(馬達MCU使用PIC18F4520)

通訊協議已確定參照AX-12 protocol, 封包大略如下: 也就是判斷連續兩個8Bit 0xFF 0xFF開始收動作指令,最後以check sum結尾

Instruction Packet:
OXFF 0XFF ID 指令長度 指令 參數N CheckSum

因之前沒有這部分開發經驗,請教類似UART協議通訊接收寫法是否參考寫法或範例
http://www.crustcrawler.com/products/bioloid/docs/AX-12.pdf

3月31日 08:24:27
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
中級會員
註冊日期:
2014/06/15 23:13
所屬群組:
註冊會員
文章: 60
等級: 6; EXP: 62
HP : 0 / 140
MP : 20 / 1583
離線
UART範例應該不難找,
上google大神找一下就有了,
http://www.dmi.unict.it/~santoro/teac ... 1/slides_pic/UART_MCU.pdf,
或是也可以利用MCC產生看看(雖然我覺得MCC的UART很難懂)

3月31日 08:44:57
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
初級會員
註冊日期:
2009/12/01 10:06
所屬群組:
註冊會員
文章: 26
等級: 3; EXP: 83
HP : 0 / 70
MP : 8 / 1736
離線
不好意思照片上傳有點問題~
可參照附件P11

3月31日 09:14:06
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
初級會員
註冊日期:
2009/12/01 10:06
所屬群組:
註冊會員
文章: 26
等級: 3; EXP: 83
HP : 0 / 70
MP : 8 / 1736
離線
感謝大大回覆,

UART部分發送與設定沒問題, 只是protocol 連續接收部分沒有經驗
所以想找點參考資料

3月31日 09:20:51
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
資深會員
註冊日期:
2012/05/04 19:18
所屬群組:
註冊會員
文章: 200
等級: 13; EXP: 18
HP : 0 / 304
MP : 66 / 5311
離線
要接收,通常是使用uart中斷來做接收,但你要先定義好你資料的格式,
傳送及接收兩邊要講好收送的格式,舉例說固定送11byte,先送head(0x55,0xaa),再來就是data(byte2~9),接著是tail(0xaa,0x55),
當接收端收到連續0x55,0xaa後就知道後面跟著是data,當接收端收到連續的0xaa,0x55就知道傳送結束,透過特定的pattern的發送,你可以用來辨識哪裡開始哪裡結束,甚至你可以加入checksum等特定的byte進去來驗證!

附加檔案:



jpg  command.jpg (166.95 KB)
9227_5abf4e2a588ce.jpg 3256X1912 px

3月31日 17:05:20
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
初級會員
註冊日期:
2009/12/01 10:06
所屬群組:
註冊會員
文章: 26
等級: 3; EXP: 83
HP : 0 / 70
MP : 8 / 1736
離線
引用:

Edison_yu 寫道:
要接收,通常是使用uart中斷來做接收,但你要先定義好你資料的格式,
傳送及接收兩邊要講好收送的格式,舉例說固定送11byte,先送head(0x55,0xaa),再來就是data(byte2~9),接著是tail(0xaa,0x55),
當接收端收到連續0x55,0xaa後就知道後面跟著是data,當接收端收到連續的0xaa,0x55就知道傳送結束,透過特定的pattern的發送,你可以用來辨識哪裡開始哪裡結束,甚至你可以加入checksum等特定的byte進去來驗證!


感謝大大回覆,目前有試著開始寫了。因為常感覺自己的程式寫的不是很有效率,所以才想說參考別人的看看。後續有機會再將程式碼分享出來給各位指教

3月31日 23:20:43
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
資深會員
註冊日期:
2012/05/04 19:18
所屬群組:
註冊會員
文章: 200
等級: 13; EXP: 18
HP : 0 / 304
MP : 66 / 5311
離線
其實寫法沒有絕對,不用按照我說的方式也行,我只是大概講一個方式,你也可以都不需要head及tail來收送,只是在通訊上你要懂得判定哪裡是第一個byte,因為難保你不會有某些狀況而將第一個byte漏收,甚至漏了好幾個byte才開始收,因此你要懂得將收進來的資料做判定,若格式不對,資料就必須拋掉不要,等待新的資料進來,若每次傳送接收的資料不等長,那你更是要定義好收送的格式,比較不易出錯!

4月02日 08:40:04
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
資深會員
註冊日期:
2012/05/04 19:18
所屬群組:
註冊會員
文章: 200
等級: 13; EXP: 18
HP : 0 / 304
MP : 66 / 5311
離線
另外你也可以用自訂的data checksum來驗證你的資料對不對,假設你知道你何時會收完資料,舉個例子9600 8 n 1,每送1個byte需要用1ms,連續送10個byte,因此你需要約10ms的時間來送這些資料,設一個time out的機制,當10ms之後且uart已經沒有資料在送了,就將最後一個byte的check sum拿來驗證你的資料對不對,若不對則拋掉,若正確則就進行所需的控制,並等待下一次的transaction,當然盡量將每次transaction的間隔不要太短,至少留幾個ms來做緩衝,這樣應該不難寫!

4月02日 09:13:02
轉換PDF檔 列印


Re: PIC18F4520馬達串聯通訊協議
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14267
等級: 72; EXP: 69
HP : 1075 / 1792
MP : 4755 / 73217
離線
引用:

eulong 寫道:
引用:

Edison_yu 寫道:
要接收,通常是使用uart中斷來做接收,但你要先定義好你資料的格式,
傳送及接收兩邊要講好收送的格式,舉例說固定送11byte,先送head(0x55,0xaa),再來就是data(byte2~9),接著是tail(0xaa,0x55),
當接收端收到連續0x55,0xaa後就知道後面跟著是data,當接收端收到連續的0xaa,0x55就知道傳送結束,透過特定的pattern的發送,你可以用來辨識哪裡開始哪裡結束,甚至你可以加入checksum等特定的byte進去來驗證!


感謝大大回覆,目前有試著開始寫了。因為常感覺自己的程式寫的不是很有效率,所以才想說參考別人的看看。後續有機會再將程式碼分享出來給各位指教


eulong,

有關 UART 通訊的協議格式 (protocol),你可以打電話到 Microchip (0800 717 718) 找我討論一下。

之前網友有提到的 MCC UART接收部分。一般接收都會使用中斷方式來收,MCC 所提供的是使用 Ring Buffer 中斷接收方式。此種方式最具有效率,接收時只要將資料放入 Ring Buffer 的新位置,主程式只要檢查 Ring Buffer 是否有新資料被置放在 Ring Buffer 即可。

4月02日 09:29:37
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project