Dependencies:   TextLCD mbed

Committer:
higedura
Date:
Mon Apr 23 14:59:48 2012 +0000
Revision:
0:f5a5a0e5fefb

        

Who changed what in which revision?

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