看板 ASM 關於我們 聯絡資訊
大家好,先感謝前篇回覆熱心的大大們 受到Y大的啟發,我利用邏輯分析器分析發現不是485晶片的問題 可以參考下圖,我直接分析Arduino的Tx與Rx訊號 https://upload.cc/i1/2020/03/18/cO4LC3.png
485晶片回傳TTL訊號到Rx這端訊號是正確的 但是Arduino讀取時,不知名原因數據錯誤如下圖所示 https://upload.cc/i1/2020/03/18/bwCP31.png
附上我Arduino讀取的程式碼 https://upload.cc/i1/2020/03/18/IDMrBv.png
Arduino版為 Mega R3 這問題已經完全超出我能力了 要請教大家,這會是什麼問題? 謝謝大家~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.197.146 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1584535887.A.106.html ※ 編輯: aaa7513231 (1.165.197.146 臺灣), 03/18/2020 20:53:48
alibuda174: 42 32 0 175 231是錯的,那正確的數據應是什麼? 03/18 21:01
aaa7513231: 可以參考第一張圖的Channel 2 應該讀到8碼 03/18 21:09
aaa7513231: 42 3 2 0 239 221 206 03/18 21:09
alibuda174: 想不到問題出在哪耶... 請問你的溫濕度計是哪個? 03/18 21:55
溫濕度計我是用GR8000 這是台灣一家自己生產的,因為我想這不是很重要就一直沒說
chuegou: 隨便猜 while裡的 delay(50)拿掉 03/18 22:23
delay我有拿掉,是什麼影響,畢竟收到的資料都已經現存Rx的暫存器了
alibuda174: 亂猜 修改通訊參數 9600,N81改成其他的試試 03/18 22:46
8N1也沒什麼關係~
easypro: 先用個buffer存資料,把printf拿掉,等資料收完再printf 03/19 08:54
easypro: 出來,另外delay拿掉。 03/19 08:54
easypro: 另外把溫度sensor型號列出來,不然誰知道資料是不是正確 03/19 08:57
easypro: 的 03/19 08:57
easypro: delay是ms等級的,你延遲500會不會w太久了。 03/19 09:03
原本500ms是因為Modbus訊號通常要等300ms以上比較安全我才這樣寫的~
n666160: 大概是Serial的時序跑掉了吧 03/19 18:15
我覺得問題應該就跟N大講的一樣,有錯位或時序問題,但我其實不清楚為什麼這樣 最後,這問題我改用SoftwareSerial的Serial就可以正常讀取 很神奇吧~謝謝大家的熱心回覆,我想應該是Serial的底層讀取方式有差異 所以導致的問題 謝謝~ ※ 編輯: aaa7513231 (1.165.197.146 臺灣), 03/19/2020 19:47:24 ※ 編輯: aaa7513231 (1.165.197.146 臺灣), 03/19/2020 19:49:21
easypro: 你怎麼會產生modbus訊號延遲會比較久的錯覺,你應該是要 03/20 08:53
easypro: 看spec去決定你的接收延遲時間才對。 03/20 08:53
smtmike: 接收中怎能用print來浪費時間,更糟的是delay |||^_^ 04/21 22:55