[請益] 關於單晶片的程式問題
最近因為某些因素
接觸到basic stamp及雙軸加速度計
但程式內容看不太懂
尤其是後半段部份
他是如何讀取受力及計算傾斜角度的部份
完全沒轍
希望有貴人相助
http://www.parallax.com/detail.asp?product_id=28017
這是雙軸加速度計.下面有他的相關文件可以參考
另外下面這是他網站所給的程式碼
紅色部份就是我看不懂的地方
希望有哪位高手行行好
解釋一下他運作原理及程式為何要這樣寫
謝謝!!
'{$STAMP BS2}
'{$PBASIC 2.5}
' -----[ Revision History ]------------------------------------------------
' -----[ I/O Definitions ]-------------------------------------------------
Xin PIN 8 ' X input from Memsic 2125
Yin PIN 9 ' Y input from Memsic 2125
' -----[ Constants ]-------------------------------------------------------
' Set scale factor for PULSIN
Scale CON $200 ' 2.0 us per unit
HiPulse CON 1 ' measure high-going pulse
LoPulse CON 0
' -----[ Variables ]-------------------------------------------------------
xRaw VAR Word ' pulse from Memsic 2125
xmG VAR Word ' g force (1000ths)
xTilt VAR Word ' tilt angle
yRaw VAR Word
ymG VAR Word
yTilt VAR Word
disp VAR Byte ' displacement (0.0 - 0.99)
angle VAR Byte ' tilt angle
pos VAR Word
' -----[ Initialization ]--------------------------------------------------
Setup:
PAUSE 5000 ' let DEBUG window open
DEBUG "Memsic 2125 Accelerometer", CR,
"-------------------------"
' -----[ Program Code ]----------------------------------------------------
Main:
pos = 0
DO
GOSUB Read_Tilt ' reads G-force and Tilt
WRITE pos,Word xTilt,Word yTilt
DEBUG DEC xTilt, CR
DEBUG DEC yTilt, CR
pos = pos + 2
PAUSE 500 ' update about 5x/second
LOOP
END
' -----[ Subroutines ]-----------------------------------------------------
Read_G_Force:
PULSIN Xin, HiPulse, xRaw ' read pulse output
xRaw = xRaw */ Scale ' convert to uSecs
xmG = ((xRaw / 10) - 500) * 8 ' calc 1/1000 g
PULSIN Yin, HiPulse, yRaw
yRaw = yRaw */ Scale
ymG = ((yRaw / 10) - 500) * 8
RETURN
Read_Tilt:
GOSUB Read_G_Force
disp = ABS xmG / 10 MAX 99 ' x displacement
GOSUB Arcsine
xTilt = angle * (-2 * xmG.BIT15 + 1) ' fix sign
disp = ABS ymG / 10 MAX 99 ' y displacement
GOSUB Arcsine
yTilt = angle * (-2 * ymG.BIT15 + 1) ' fix sign
RETURN
' Trig routines courtesy Tracy Allen, PhD. (www.emesystems.com)
Arccosine:
disp = disp */ 983 / 3 ' normalize input to 127
angle = 63 - (disp / 2) ' approximate angle
DO ' find angle
IF (COS angle <= disp) THEN EXIT
angle = angle + 1
LOOP
angle = angle */ 360 ' convert brads to degrees
RETURN
Arcsine:
GOSUB Arccosine
angle = 90 - angle
RETURN
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.71.104
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):