cloud0812 發表於 2008-1-11 13:40:28

用VB寫一個SRF05的應用程式問題

是這樣.如果將SRF05的Echo output接RS232送到電腦去顯示
不知道該怎麼做
直接寫buf=MSComm1.intput
text1.text=buf
顯示出來都是亂碼...請問該如何去讀取Echo的資料?

[ 本帖最後由 cloud0812 於 2008-1-11 13:49 編輯 ]

crazyking 發表於 2008-1-11 14:01:55

看你貼的圖傳回值的長度應該是18BYTE,然後以FF結尾,你要查一下SRF05回傳值的格式,
然後寫一個解譯程式把回傳值變成你要的格式。還有VB的MSCOMM物件的INPUTMODE最好
設成COMINPUTMODEBINARY

cloud0812 發表於 2008-1-11 14:56:52

嗯...剛剛發現他送出的訊號是PWM訊號
要測得頻寬去做轉換.看來應該沒辦法直接用VB量

cloud0812 發表於 2008-1-11 18:15:28

既然是PWM信號
那如果想用8051去測它的頻寬
該怎麼做呢?感謝

crazyking 發表於 2008-1-11 18:47:59

可以利用中斷或是I/O配合內部計時器做,但是建議用外部電路來數

cloud0812 發表於 2008-1-11 20:57:04

何謂外部電路?..
SORRY......真的覺得自己很差

crazyking 發表於 2008-1-12 08:26:02

剛看了一下資料
http://www.robofun.net/forum/viewthread.php?tid=869
真的建議用外部電路來數,做法就是先做一個脈波產生器,產生1us的脈波,然後再做一個16bit的
計數器,而這個計數器就利用SRF05的ECHO來觸發(負緣觸發),一直到ECHO為HIGH時停止觸發
,然後利用單晶片來讀計數器的值,讀值時同時檢查ECHO是否已為HIGH以免讀到錯誤的值.
整個流程大致如上,如果要用單晶片做也可以,但是要注意如果在處理超音波ECHO計數時,有別的
副程式執行或中斷產生,可能會造成讀不到值或是讀到錯誤的值

cloud0812 發表於 2008-1-13 09:02:58

如果要在同一顆8051中做到
1.10us輸出給SRF05(驅動SRF05)
2.ECHO計數器(測頻寬)
3.串列埠輸出(傳給VB去讀)
是不可能的嗎?好像每個都要用到一個計數器.而8051只有2個計數器對吧

crazyking 發表於 2008-1-14 07:11:51

可以做得到,因為當在處理ECHO時,RS232是不需要動作的,只是在處理ECHO的過程中,如果有其他中斷或是其他副程式執行,可能會影
響ECHO的判讀,所以如果信號處理電路不熟,那就用一顆2051來專責處理

cloud0812 發表於 2008-1-20 15:10:11

總算成功寫好8051了.可以用超級終端機讀到
現在要做的是把8051的值讀到VB上
VB部份該怎麼寫呢?
我是寫下面這裡.但是有錯= =
Private Sub MSComm1_OnComm()
buf = MSComm1.Input
Text1.Text = buf
End Sub
是不是我8051串列埠地方沒寫好
附上我的8051程式

crazyking 發表於 2008-1-20 16:22:32

你所謂的錯是錯在那,要說清楚,不然幫不上忙耶

cloud0812 發表於 2008-1-20 20:03:07

其實也不算錯.因為8051會一直傳DATA到電腦所以寫buf = MSComm1.Input
Text1.Text=buf 顯示出來的不是固定一個數
而是一串.例如讀到距離為20時.顯示就是 20 20 20 20 20 20 20

現在有個問題是
我按command1會執行一個動作
按command2會執行另一個動作
如果在執行動作1時發現讀到的值小於20而必須做動作2
那麼該怎麼寫呢?

[ 本帖最後由 cloud0812 於 2008-1-20 20:55 編輯 ]

crazyking 發表於 2008-1-20 20:56:01

在 oncomm事件中加入
iftext1.text=20 then
   command2_click
end if

cloud0812 發表於 2008-1-20 23:04:50

但是...因為8051工作很快.所以每秒傳出很多次ECHO的值
如果用buf = MSComm1.Input      Text1.Text=buf 這樣的寫法
讀到的值顯示出來會像我的圖這樣
還有..我在每個動作後加buf = MSComm1.Input          Text1.Text=buf
會導致它動作出現問題.甚至當機-.-是不是我VB程式有問題

[ 本帖最後由 cloud0812 於 2008-1-20 23:08 編輯 ]

crazyking 發表於 2008-1-21 08:55:31

你所謂的在每個動作都加buf = MSComm1.Input          Text1.Text=buf 是指在每個按鈕的事件中
都加嗎,如果是的話那就不對了,應該在on_comm事件中處理就好,如果不是的話,你把你的
on_comm事件處理程式跟一兩個按鈕事件程式碼貼上來看看問題在哪

cloud0812 發表於 2008-1-21 11:26:05

找到問題了.是因為8051傳輸太快.導致於VB無法正常運作
感謝大大解惑

cloud0812 發表於 2008-1-21 12:53:58

我知道問題所在了
當8051傳送一個資料給VB時.他會將它存起來
然後當程式執行buf= MSComm1.Input時
VB則會將剛剛所存的資料一次傳給buf
那就是說當我8051程式傳輸資料(例如傳一個數字20)在VB未讀取出去之前又傳輸一次(20)的話
在執行buf= MSComm1.Input時.buf讀出的值將會是 20 20

但是我要做的是只讀一次也就是讀出第1次的20.那麼該怎麼做呢?

[ 本帖最後由 cloud0812 於 2008-1-21 16:50 編輯 ]
頁: [1]
查看完整版本: 用VB寫一個SRF05的應用程式問題