SCA3000 triple axis digital interface accelerometer

Committer:
aberk
Date:
Thu Jun 09 14:29:16 2011 +0000
Revision:
1:f5f2e79304fb
Parent:
0:fe041345c169
Added functionality for getting the acceleration values in raw counts as opposed to milli-gs.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aberk 0:fe041345c169 1 /**
aberk 0:fe041345c169 2 * @author Aaron Berk
aberk 0:fe041345c169 3 *
aberk 0:fe041345c169 4 * @section LICENSE
aberk 0:fe041345c169 5 *
aberk 0:fe041345c169 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
aberk 0:fe041345c169 7 * of this software and associated documentation files (the "Software"), to deal
aberk 0:fe041345c169 8 * in the Software without restriction, including without limitation the rights
aberk 0:fe041345c169 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
aberk 0:fe041345c169 10 * copies of the Software, and to permit persons to whom the Software is
aberk 0:fe041345c169 11 * furnished to do so, subject to the following conditions:
aberk 0:fe041345c169 12 *
aberk 0:fe041345c169 13 * The above copyright notice and this permission notice shall be included in
aberk 0:fe041345c169 14 * all copies or substantial portions of the Software.
aberk 0:fe041345c169 15 *
aberk 0:fe041345c169 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
aberk 0:fe041345c169 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
aberk 0:fe041345c169 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
aberk 0:fe041345c169 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
aberk 0:fe041345c169 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
aberk 0:fe041345c169 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
aberk 0:fe041345c169 22 * THE SOFTWARE.
aberk 0:fe041345c169 23 *
aberk 0:fe041345c169 24 * @section DESCRIPTION
aberk 0:fe041345c169 25 *
aberk 0:fe041345c169 26 * SCA3000, triple axis, digital interface, accelerometer.
aberk 0:fe041345c169 27 *
aberk 0:fe041345c169 28 * Datasheet:
aberk 0:fe041345c169 29 *
aberk 0:fe041345c169 30 * http://www.sparkfun.com/datasheets/Sensors/Accelerometer/SCA3000-D01.pdf
aberk 0:fe041345c169 31 */
aberk 0:fe041345c169 32
aberk 0:fe041345c169 33 #ifndef MBED_SCA3000_H
aberk 0:fe041345c169 34 #define MBED_SCA3000_H
aberk 0:fe041345c169 35
aberk 0:fe041345c169 36 /**
aberk 0:fe041345c169 37 * Includes
aberk 0:fe041345c169 38 */
aberk 0:fe041345c169 39 #include "mbed.h"
aberk 0:fe041345c169 40
aberk 0:fe041345c169 41 /**
aberk 0:fe041345c169 42 * Defines
aberk 0:fe041345c169 43 */
aberk 0:fe041345c169 44 //Registers.
aberk 0:fe041345c169 45 #define SCA3000_REVID_REG 0x00
aberk 0:fe041345c169 46 #define SCA3000_STATUS_REG 0x02
aberk 0:fe041345c169 47 #define SCA3000_X_LSB 0x04
aberk 0:fe041345c169 48 #define SCA3000_X_MSB 0x05
aberk 0:fe041345c169 49 #define SCA3000_Y_LSB 0x06
aberk 0:fe041345c169 50 #define SCA3000_Y_MSB 0x07
aberk 0:fe041345c169 51 #define SCA3000_Z_LSB 0x08
aberk 0:fe041345c169 52 #define SCA3000_Z_MSB 0x09
aberk 0:fe041345c169 53
aberk 0:fe041345c169 54 #define SCA3000_SPI_READ 0x00
aberk 0:fe041345c169 55 #define SCA3000_SPI_WRITE 0x02
aberk 0:fe041345c169 56
aberk 0:fe041345c169 57 #define SCA3000_X_AXIS 0x00
aberk 0:fe041345c169 58 #define SCA3000_Y_AXIS 0x01
aberk 0:fe041345c169 59 #define SCA3000_Z_AXIS 0x02
aberk 0:fe041345c169 60
aberk 0:fe041345c169 61 /**
aberk 0:fe041345c169 62 * SCA3000, triple axis, digital interface, accelerometer.
aberk 0:fe041345c169 63 */
aberk 0:fe041345c169 64 class SCA3000 {
aberk 0:fe041345c169 65
aberk 0:fe041345c169 66 public:
aberk 0:fe041345c169 67
aberk 0:fe041345c169 68 /**
aberk 0:fe041345c169 69 * Constructor.
aberk 0:fe041345c169 70 *
aberk 0:fe041345c169 71 * @param mosi mbed pin to use for MOSI line of SPI interface.
aberk 0:fe041345c169 72 * @param miso mbed pin to use for MISO line of SPI interface.
aberk 0:fe041345c169 73 * @param sck mbed pin to use for SCK line of SPI interface.
aberk 0:fe041345c169 74 * @param cs mbed pin to use for not chip select line of SPI interface.
aberk 0:fe041345c169 75 * @param nr mbed pin to use for the not reset line.
aberk 0:fe041345c169 76 */
aberk 0:fe041345c169 77 SCA3000(PinName mosi, PinName miso, PinName sck, PinName cs, PinName nr);
aberk 0:fe041345c169 78
aberk 0:fe041345c169 79 /**
aberk 0:fe041345c169 80 * Read the revision ID register on the device.
aberk 0:fe041345c169 81 *
aberk 0:fe041345c169 82 * @return The revision ID number.
aberk 0:fe041345c169 83 */
aberk 0:fe041345c169 84 int getRevId(void);
aberk 0:fe041345c169 85
aberk 0:fe041345c169 86 /**
aberk 0:fe041345c169 87 * Get the register contents acceleration value for the
aberk 1:f5f2e79304fb 88 * given axis, using the nominal sensitivity values
aberk 1:f5f2e79304fb 89 * found in the datasheet.
aberk 0:fe041345c169 90 *
aberk 0:fe041345c169 91 * @param axis The axis to get acceleration values for.
aberk 0:fe041345c169 92 *
aberk 0:fe041345c169 93 * @return The acceleration on the specified axis in mg.
aberk 0:fe041345c169 94 */
aberk 0:fe041345c169 95 float getAcceleration(int axis);
aberk 1:f5f2e79304fb 96
aberk 1:f5f2e79304fb 97 /**
aberk 1:f5f2e79304fb 98 * Get the register contents acceleration value for the
aberk 1:f5f2e79304fb 99 * given axis, in counts.
aberk 1:f5f2e79304fb 100 *
aberk 1:f5f2e79304fb 101 * @param axis The axis to get the counts values for.
aberk 1:f5f2e79304fb 102 *
aberk 1:f5f2e79304fb 103 * @return The acceleration on the specified axis in counts.
aberk 1:f5f2e79304fb 104 */
aberk 1:f5f2e79304fb 105 int getCounts(int axis);
aberk 0:fe041345c169 106
aberk 0:fe041345c169 107 private:
aberk 0:fe041345c169 108
aberk 0:fe041345c169 109 SPI spi_;
aberk 0:fe041345c169 110 DigitalOut nCS_;
aberk 0:fe041345c169 111 DigitalOut nR_;
aberk 0:fe041345c169 112
aberk 0:fe041345c169 113 /**
aberk 0:fe041345c169 114 * Read one byte from a register on the device.
aberk 0:fe041345c169 115 *
aberk 0:fe041345c169 116 * @param address Address of the register to read.
aberk 0:fe041345c169 117 *
aberk 0:fe041345c169 118 * @return The contents of the register address.
aberk 0:fe041345c169 119 */
aberk 0:fe041345c169 120 int oneByteRead(int address);
aberk 0:fe041345c169 121
aberk 0:fe041345c169 122 /**
aberk 0:fe041345c169 123 * Write one byte to a register on the device.
aberk 0:fe041345c169 124 *
aberk 0:fe041345c169 125 * @param address Address of the register to write to.
aberk 0:fe041345c169 126 * @param data The data to write into the register.
aberk 0:fe041345c169 127 */
aberk 0:fe041345c169 128 void oneByteWrite(int address, char data);
aberk 0:fe041345c169 129
aberk 0:fe041345c169 130 };
aberk 0:fe041345c169 131
aberk 0:fe041345c169 132 #endif /* MBED_SCA3000_H */