SCA3000 triple axis digital interface accelerometer

Committer:
aberk
Date:
Sun May 29 14:13:20 2011 +0000
Revision:
0:fe041345c169
Child:
1:f5f2e79304fb
Version 1.0

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 0:fe041345c169 88 * given axis.
aberk 0:fe041345c169 89 *
aberk 0:fe041345c169 90 * @param axis The axis to get acceleration values for.
aberk 0:fe041345c169 91 *
aberk 0:fe041345c169 92 * @return The acceleration on the specified axis in mg.
aberk 0:fe041345c169 93 */
aberk 0:fe041345c169 94 float getAcceleration(int axis);
aberk 0:fe041345c169 95
aberk 0:fe041345c169 96 private:
aberk 0:fe041345c169 97
aberk 0:fe041345c169 98 SPI spi_;
aberk 0:fe041345c169 99 DigitalOut nCS_;
aberk 0:fe041345c169 100 DigitalOut nR_;
aberk 0:fe041345c169 101
aberk 0:fe041345c169 102 /**
aberk 0:fe041345c169 103 * Converts the contents of acceleration registers (MSB << 8 | LSB)
aberk 0:fe041345c169 104 * to mg.
aberk 0:fe041345c169 105 *
aberk 0:fe041345c169 106 * @param counts The contents of acceleration registers.
aberk 0:fe041345c169 107 *
aberk 0:fe041345c169 108 * @return The acceleration in mg.
aberk 0:fe041345c169 109 */
aberk 0:fe041345c169 110 float countsToMg(int counts);
aberk 0:fe041345c169 111
aberk 0:fe041345c169 112 /**
aberk 0:fe041345c169 113 * Read one byte from a register on the device.
aberk 0:fe041345c169 114 *
aberk 0:fe041345c169 115 * @param address Address of the register to read.
aberk 0:fe041345c169 116 *
aberk 0:fe041345c169 117 * @return The contents of the register address.
aberk 0:fe041345c169 118 */
aberk 0:fe041345c169 119 int oneByteRead(int address);
aberk 0:fe041345c169 120
aberk 0:fe041345c169 121 /**
aberk 0:fe041345c169 122 * Write one byte to a register on the device.
aberk 0:fe041345c169 123 *
aberk 0:fe041345c169 124 * @param address Address of the register to write to.
aberk 0:fe041345c169 125 * @param data The data to write into the register.
aberk 0:fe041345c169 126 */
aberk 0:fe041345c169 127 void oneByteWrite(int address, char data);
aberk 0:fe041345c169 128
aberk 0:fe041345c169 129 };
aberk 0:fe041345c169 130
aberk 0:fe041345c169 131 #endif /* MBED_SCA3000_H */