HMC5843 Library as part of the 9DOF stick from Sparkfun.com

Committer:
Digixx
Date:
Fri Oct 07 21:06:52 2011 +0000
Revision:
0:03b72060cd83

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Digixx 0:03b72060cd83 1 /**
Digixx 0:03b72060cd83 2 * @author Uwe Gartmann
Digixx 0:03b72060cd83 3 * @author Used HMC5843 library developed by Jose R. Padron and Aaron Berk as template
Digixx 0:03b72060cd83 4 *
Digixx 0:03b72060cd83 5 * @section LICENSE
Digixx 0:03b72060cd83 6 *
Digixx 0:03b72060cd83 7 * Copyright (c) 2010 ARM Limited
Digixx 0:03b72060cd83 8 *
Digixx 0:03b72060cd83 9 * Permission is hereby granted, free of charge, to any person obtaining a copy
Digixx 0:03b72060cd83 10 * of this software and associated documentation files (the "Software"), to deal
Digixx 0:03b72060cd83 11 * in the Software without restriction, including without limitation the rights
Digixx 0:03b72060cd83 12 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Digixx 0:03b72060cd83 13 * copies of the Software, and to permit persons to whom the Software is
Digixx 0:03b72060cd83 14 * furnished to do so, subject to the following conditions:
Digixx 0:03b72060cd83 15 *
Digixx 0:03b72060cd83 16 * The above copyright notice and this permission notice shall be included in
Digixx 0:03b72060cd83 17 * all copies or substantial portions of the Software.
Digixx 0:03b72060cd83 18 *
Digixx 0:03b72060cd83 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Digixx 0:03b72060cd83 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Digixx 0:03b72060cd83 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Digixx 0:03b72060cd83 22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Digixx 0:03b72060cd83 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Digixx 0:03b72060cd83 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Digixx 0:03b72060cd83 25 * THE SOFTWARE.
Digixx 0:03b72060cd83 26 *
Digixx 0:03b72060cd83 27 * @section DESCRIPTION
Digixx 0:03b72060cd83 28 *
Digixx 0:03b72060cd83 29 * Honeywell HMC5843 digital compass.
Digixx 0:03b72060cd83 30 *
Digixx 0:03b72060cd83 31 * Datasheet:
Digixx 0:03b72060cd83 32 *
Digixx 0:03b72060cd83 33 * http://www.ssec.honeywell.com/magnetic/datasheets/HMC5843.pdf
Digixx 0:03b72060cd83 34 */
Digixx 0:03b72060cd83 35
Digixx 0:03b72060cd83 36 #ifndef HMC5843_H
Digixx 0:03b72060cd83 37 #define HMC5843_H
Digixx 0:03b72060cd83 38
Digixx 0:03b72060cd83 39 /**
Digixx 0:03b72060cd83 40 * Includes
Digixx 0:03b72060cd83 41 */
Digixx 0:03b72060cd83 42 #include "mbed.h"
Digixx 0:03b72060cd83 43
Digixx 0:03b72060cd83 44 /**
Digixx 0:03b72060cd83 45 * Defines
Digixx 0:03b72060cd83 46 */
Digixx 0:03b72060cd83 47 #define HMC5843_I2C_ADDRESS 0x1E //7-bit address. 0x3C write, 0x3D read.
Digixx 0:03b72060cd83 48 #define HMC5843_I2C_WRITE 0x3C
Digixx 0:03b72060cd83 49 #define HMC5843_I2C_READ 0x3D
Digixx 0:03b72060cd83 50
Digixx 0:03b72060cd83 51 //Values Config A
Digixx 0:03b72060cd83 52 #define HMC5843_0_5HZ_NORMAL 0x00
Digixx 0:03b72060cd83 53 #define HMC5843_0_5HZ_POSITIVE 0x01
Digixx 0:03b72060cd83 54 #define HMC5843_0_5HZ_NEGATIVE 0x02
Digixx 0:03b72060cd83 55
Digixx 0:03b72060cd83 56 #define HMC5843_1HZ_NORMAL 0x04
Digixx 0:03b72060cd83 57 #define HMC5843_1HZ_POSITIVE 0x05
Digixx 0:03b72060cd83 58 #define HMC5843_1HZ_NEGATIVE 0x06
Digixx 0:03b72060cd83 59
Digixx 0:03b72060cd83 60 #define HMC5843_2HZ_NORMAL 0x08
Digixx 0:03b72060cd83 61 #define HMC5843_2HZ_POSITIVE 0x09
Digixx 0:03b72060cd83 62 #define HMC5843_2HZ_NEGATIVE 0x0A
Digixx 0:03b72060cd83 63
Digixx 0:03b72060cd83 64 #define HMC5843_5HZ_NORMAL 0x0C
Digixx 0:03b72060cd83 65 #define HMC5843_5HZ_POSITIVE 0x0D
Digixx 0:03b72060cd83 66 #define HMC5843_5HZ_NEGATIVE 0x0E
Digixx 0:03b72060cd83 67
Digixx 0:03b72060cd83 68 #define HMC5843_10HZ_NORMAL 0x10
Digixx 0:03b72060cd83 69 #define HMC5843_10HZ_POSITIVE 0x11
Digixx 0:03b72060cd83 70 #define HMC5843_10HZ_NEGATIVE 0x12
Digixx 0:03b72060cd83 71
Digixx 0:03b72060cd83 72 #define HMC5843_20HZ_NORMAL 0x14
Digixx 0:03b72060cd83 73 #define HMC5843_20HZ_POSITIVE 0x15
Digixx 0:03b72060cd83 74 #define HMC5843_20HZ_NEGATIVE 0x16
Digixx 0:03b72060cd83 75
Digixx 0:03b72060cd83 76 #define HMC5843_50HZ_NORMAL 0x18
Digixx 0:03b72060cd83 77 #define HMC5843_50HZ_POSITIVE 0x19
Digixx 0:03b72060cd83 78 #define HMC5843_50HZ_NEGATIVE 0x1A
Digixx 0:03b72060cd83 79
Digixx 0:03b72060cd83 80 //Values Config B
Digixx 0:03b72060cd83 81 #define HMC5843_0_7GA 0x00
Digixx 0:03b72060cd83 82 #define HMC5843_1_0GA 0x20
Digixx 0:03b72060cd83 83 #define HMC5843_1_5GA 0x40
Digixx 0:03b72060cd83 84 #define HMC5843_2_0GA 0x60
Digixx 0:03b72060cd83 85 #define HMC5843_3_2GA 0x80
Digixx 0:03b72060cd83 86 #define HMC5843_3_8GA 0xA0
Digixx 0:03b72060cd83 87 #define HMC5843_4_5GA 0xC0
Digixx 0:03b72060cd83 88 #define HMC5843_6_5GA 0xE0
Digixx 0:03b72060cd83 89
Digixx 0:03b72060cd83 90 //Values MODE
Digixx 0:03b72060cd83 91 #define HMC5843_CONTINUOUS 0x00
Digixx 0:03b72060cd83 92 #define HMC5843_SINGLE 0x01
Digixx 0:03b72060cd83 93 #define HMC5843_IDLE 0x02
Digixx 0:03b72060cd83 94 #define HMC5843_SLEEP 0x03
Digixx 0:03b72060cd83 95
Digixx 0:03b72060cd83 96
Digixx 0:03b72060cd83 97
Digixx 0:03b72060cd83 98 #define HMC5843_CONFIG_A 0x00
Digixx 0:03b72060cd83 99 #define HMC5843_CONFIG_B 0x01
Digixx 0:03b72060cd83 100 #define HMC5843_MODE 0x02
Digixx 0:03b72060cd83 101 #define HMC5843_X_MSB 0x03
Digixx 0:03b72060cd83 102 #define HMC5843_X_LSB 0x04
Digixx 0:03b72060cd83 103 #define HMC5843_Y_MSB 0x05
Digixx 0:03b72060cd83 104 #define HMC5843_Y_LSB 0x06
Digixx 0:03b72060cd83 105 #define HMC5843_Z_MSB 0x07
Digixx 0:03b72060cd83 106 #define HMC5843_Z_LSB 0x08
Digixx 0:03b72060cd83 107 #define HMC5843_STATUS 0x09
Digixx 0:03b72060cd83 108 #define HMC5843_IDENT_A 0x0A
Digixx 0:03b72060cd83 109 #define HMC5843_IDENT_B 0x0B
Digixx 0:03b72060cd83 110 #define HMC5843_IDENT_C 0x0C
Digixx 0:03b72060cd83 111
Digixx 0:03b72060cd83 112
Digixx 0:03b72060cd83 113
Digixx 0:03b72060cd83 114 /**
Digixx 0:03b72060cd83 115 * Honeywell HMC5843 digital compass.
Digixx 0:03b72060cd83 116 */
Digixx 0:03b72060cd83 117 class HMC5843 {
Digixx 0:03b72060cd83 118
Digixx 0:03b72060cd83 119 public:
Digixx 0:03b72060cd83 120
Digixx 0:03b72060cd83 121 /**
Digixx 0:03b72060cd83 122 * Constructor.
Digixx 0:03b72060cd83 123 *
Digixx 0:03b72060cd83 124 * @param sda mbed pin to use for SDA line of I2C interface.
Digixx 0:03b72060cd83 125 * @param scl mbed pin to use for SCL line of I2C interface.
Digixx 0:03b72060cd83 126 */
Digixx 0:03b72060cd83 127 HMC5843(PinName sda, PinName scl);
Digixx 0:03b72060cd83 128
Digixx 0:03b72060cd83 129
Digixx 0:03b72060cd83 130 /**
Digixx 0:03b72060cd83 131 * Enter into sleep mode.
Digixx 0:03b72060cd83 132 *
Digixx 0:03b72060cd83 133 */
Digixx 0:03b72060cd83 134 void setSleepMode();
Digixx 0:03b72060cd83 135
Digixx 0:03b72060cd83 136
Digixx 0:03b72060cd83 137 /**
Digixx 0:03b72060cd83 138 * Set Device in Default Mode.
Digixx 0:03b72060cd83 139 * HMC5843_CONTINUOUS, HMC5843_10HZ_NORMAL HMC5843_1_0GA
Digixx 0:03b72060cd83 140 */
Digixx 0:03b72060cd83 141 void setDefault();
Digixx 0:03b72060cd83 142
Digixx 0:03b72060cd83 143
Digixx 0:03b72060cd83 144 /**
Digixx 0:03b72060cd83 145 * Read the memory location on the device which contains the address.
Digixx 0:03b72060cd83 146 *
Digixx 0:03b72060cd83 147 * @param Pointer to a buffer to hold the address value
Digixx 0:03b72060cd83 148 * Expected H, 4 and 3.
Digixx 0:03b72060cd83 149 */
Digixx 0:03b72060cd83 150 void getAddress(char * address);
Digixx 0:03b72060cd83 151
Digixx 0:03b72060cd83 152
Digixx 0:03b72060cd83 153
Digixx 0:03b72060cd83 154 /**
Digixx 0:03b72060cd83 155 * Set the operation mode.
Digixx 0:03b72060cd83 156 *
Digixx 0:03b72060cd83 157 * @param mode 0x00 -> Continuous
Digixx 0:03b72060cd83 158 * 0x01 -> Single
Digixx 0:03b72060cd83 159 * 0x02 -> Idle
Digixx 0:03b72060cd83 160 * @param ConfigA values
Digixx 0:03b72060cd83 161 * @param ConfigB values
Digixx 0:03b72060cd83 162 */
Digixx 0:03b72060cd83 163 void setOpMode(int mode, int ConfigA, int ConfigB);
Digixx 0:03b72060cd83 164
Digixx 0:03b72060cd83 165 /**
Digixx 0:03b72060cd83 166 * Write to on the device.
Digixx 0:03b72060cd83 167 *
Digixx 0:03b72060cd83 168 * @param address Address to write to.
Digixx 0:03b72060cd83 169 * @param data Data to write.
Digixx 0:03b72060cd83 170 */
Digixx 0:03b72060cd83 171
Digixx 0:03b72060cd83 172 void write(int address, int data);
Digixx 0:03b72060cd83 173
Digixx 0:03b72060cd83 174 /**
Digixx 0:03b72060cd83 175 * Get the output of all three axes.
Digixx 0:03b72060cd83 176 *
Digixx 0:03b72060cd83 177 * @param Pointer to a buffer to hold the magnetics value for the
Digixx 0:03b72060cd83 178 * x-axis, y-axis and z-axis [in that order].
Digixx 0:03b72060cd83 179 */
Digixx 0:03b72060cd83 180 void readData(int* readings);
Digixx 0:03b72060cd83 181
Digixx 0:03b72060cd83 182 /**
Digixx 0:03b72060cd83 183 * Get the output of X axis.
Digixx 0:03b72060cd83 184 *
Digixx 0:03b72060cd83 185 * @return x-axis magnetic value
Digixx 0:03b72060cd83 186 */
Digixx 0:03b72060cd83 187 int getMx();
Digixx 0:03b72060cd83 188
Digixx 0:03b72060cd83 189 /**
Digixx 0:03b72060cd83 190 * Get the output of Y axis.
Digixx 0:03b72060cd83 191 *
Digixx 0:03b72060cd83 192 * @return y-axis magnetic value
Digixx 0:03b72060cd83 193 */
Digixx 0:03b72060cd83 194 int getMy();
Digixx 0:03b72060cd83 195
Digixx 0:03b72060cd83 196 /**
Digixx 0:03b72060cd83 197 * Get the output of Z axis.
Digixx 0:03b72060cd83 198 *
Digixx 0:03b72060cd83 199 * @return z-axis magnetic value
Digixx 0:03b72060cd83 200 */
Digixx 0:03b72060cd83 201 int getMz();
Digixx 0:03b72060cd83 202
Digixx 0:03b72060cd83 203
Digixx 0:03b72060cd83 204 /**
Digixx 0:03b72060cd83 205 * Get the current operation mode.
Digixx 0:03b72060cd83 206 *
Digixx 0:03b72060cd83 207 * @return Status register values
Digixx 0:03b72060cd83 208 */
Digixx 0:03b72060cd83 209 int getStatus(void);
Digixx 0:03b72060cd83 210
Digixx 0:03b72060cd83 211
Digixx 0:03b72060cd83 212
Digixx 0:03b72060cd83 213 I2C* i2c_;
Digixx 0:03b72060cd83 214
Digixx 0:03b72060cd83 215
Digixx 0:03b72060cd83 216
Digixx 0:03b72060cd83 217 };
Digixx 0:03b72060cd83 218
Digixx 0:03b72060cd83 219 #endif /* HMC5843_H */