diff options
Diffstat (limited to 'wpd/WpdBasicHardwareDriver/firmware/h48c_3-axis_wpd_enabled.bs2')
| -rw-r--r-- | wpd/WpdBasicHardwareDriver/firmware/h48c_3-axis_wpd_enabled.bs2 | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/wpd/WpdBasicHardwareDriver/firmware/h48c_3-axis_wpd_enabled.bs2 b/wpd/WpdBasicHardwareDriver/firmware/h48c_3-axis_wpd_enabled.bs2 deleted file mode 100644 index daba0fc9..00000000 --- a/wpd/WpdBasicHardwareDriver/firmware/h48c_3-axis_wpd_enabled.bs2 +++ /dev/null @@ -1,175 +0,0 @@ -' h48c_3-axis_wpd_enabled.bs2 -' -' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -' PARTICULAR PURPOSE. -' -' Copyright (c) Microsoft Corporation. All rights reserved -' -' {$STAMP BS2} -' {$PBASIC 2.5} -' -' ========================================================================= - -' -----[ Program Description ]--------------------------------------------- -' -' Test program for the H48C 3-Axis Accelerometer module. -' -' Connections: -' -' +------------+ -' | * | -' CLK | o o | Vdd (+5v) -' | +--+ | -' DIO [ o | | o | CS\ -' | +--+ | -' Vss | o o | 0G (free-fall indication) -' | | -' +------------+ -' -' How it Works: -' -' An onboard MCP3204 12-bit ADC is used to read the VRef, X-, Y-, and -' Z-axis outputs from the Hitachi H48C accelerometer. The reference -' voltage output from H48C is 1.65 volts (3.3 / 2). -' -' After reading the reference voltage and an output channel the g-force -' for the channel is calculated with this formula: -' -' axis - vref 3.3 -' G = ----------- x ------ -' 4095 0.3663 -' -' For use in the program the forumla can be simplified to: -' -' G = (axis - vref) x 0.0022 -' -' To allow the display of fractional g-force in the integer system of the -' BASIC Stamp we multiply 0.0022 by 100 -- this will allow us to display -' g-force in 0.01g units. - - - -' -----[ I/O Definitions ]------------------------------------------------- - -Dio PIN 15 ' data to/from module -Clk PIN 14 ' clock output -CS PIN 13 ' active-low chip select - - -' -----[ Constants ]------------------------------------------------------- - -XAxis CON 0 ' adc channels -YAxis CON 1 -ZAxis CON 2 -VRef CON 3 - -Cnt2Mv CON $CE4C ' counts to millivolts - ' 0.80586 with ** -GfCnv CON $3852 ' g-force conversion - ' 0.22 with ** - -' -----[ Variables ]------------------------------------------------------- - -axis VAR Nib ' axis selection -rvCount VAR Word ' ref voltage adc counts -axCount VAR Word ' axis voltage adc counts -mVolts VAR Word ' millivolts -Gforce VAR Word ' axis g-force - -xGforce VAR Word ' x-axis force -yGforce VAR Word ' y-axis force -zGforce VAR Word ' z-axis force - -dValue VAR Word ' display value -dPad VAR Nib ' display pad - -' Below lines are WPD additions - -SensorID VAR Byte 'Sensor identifier = 9 for Hitachi -ElementCount VAR Byte 'Count of elements in packet -ElementSize VAR Byte 'Size (in bytes) of each element - - -NewInterval VAR Word 'New interval requested by user -Interval VAR Word 'Interval value utlized by firmware - -SensorID = 9 -ElementSize = 4 'Each element contains a sign byte, followed by a G-force integer value, followed by a G-force fraction (in hundredths). -ElementCount = 3 'Each element corresponds to one of the three axis (X, Y, and Z) - -Interval = 2000 -NewInterval = 2000 - - -' -----[ EEPROM Data ]----------------------------------------------------- - - -' -----[ Initialization ]-------------------------------------------------- - -Reset: - HIGH CS ' deselect module - -' -----[ Program Code ]---------------------------------------------------- - -Main: - GOSUB GetGforces 'Retrieves G-forces along 3 axis - GOSUB RetrieveInterval 'Retrieves event-interval data - - Timeout: - SEROUT 16, 16780, [DEC1 SensorID, DEC1 ElementSize, DEC1 ElementCount, DEC1(xGforce.BIT15), DEC1(ABS xGforce/100),DEC2(ABS xGforce),DEC1(yGforce.BIT15),DEC1(ABS yGforce/100),DEC2(ABS yGforce),DEC1(zGforce.BIT15),DEC1(ABS zGforce/100),DEC2(ABS zGforce),DEC5 Interval ] - GOTO Main - - GOTO Main - - -' -----[ Subroutines ]----------------------------------------------------- - -' Retrieves the event-interval property from the WPD driver -RetrieveInterval: - SERIN 16, 16780, Interval, Timeout, [DEC NewInterval] 'Retrieve interval - IF NewInterval >= 10 AND NewInterval <= 60000 THEN - Interval = NewInterval - ENDIF - -' Retrieves G forces along all three axis -GetGforces: - FOR axis = XAxis TO ZAxis ' loop through each axis - GOSUB Get_H48C ' read vRef & axis counts - ' calculate g-force - ' -- "Gforce" is signed word - IF (axCount >= rvCount) THEN - Gforce = (axCount - rvCount) ** GfCnv ' positive g-force - ELSE - Gforce = -((rvCount - axCount) ** GfCnv) ' negative g-force - ENDIF - IF (axis = XAxis) THEN - xGforce = Gforce - ENDIF - IF (axis = YAxis) THEN - yGforce = Gforce - ENDIF - IF (axis = ZAxis) THEN - zGforce = Gforce - ENDIF - NEXT - RETURN - -' Reads VRef and selected H48C axis through an MCP3204 ADC -' -- pass axis (0 - 2) in "axis" -' -- returns reference voltage counts in "rvCount" -' -- returns axis voltage counts in "axCounts" - -Get_H48C: - LOW CS - SHIFTOUT Dio, Clk, MSBFIRST, [%11\2, VRef\3] ' select vref register - SHIFTIN Dio, Clk, MSBPOST, [rvCount\13] ' read ref voltage counts - HIGH CS - PAUSE 1 - LOW CS - SHIFTOUT Dio, Clk, MSBFIRST, [%11\2, axis\3] ' select axis - SHIFTIN Dio, Clk, MSBPOST, [axCount\13] ' read axis voltage counts - HIGH CS - RETURN - |
