1

Dependencies:   mbed

Committer:
viniciushl
Date:
Thu Dec 08 12:26:27 2016 +0000
Revision:
0:c4316ce25c75
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
viniciushl 0:c4316ce25c75 1 /**
viniciushl 0:c4316ce25c75 2 * @author Jose R. Padron
viniciushl 0:c4316ce25c75 3 * @author Used HMC6352 library developed by Aaron Berk as template
viniciushl 0:c4316ce25c75 4 * @section LICENSE
viniciushl 0:c4316ce25c75 5 *
viniciushl 0:c4316ce25c75 6 * Copyright (c) 2010 ARM Limited
viniciushl 0:c4316ce25c75 7 *
viniciushl 0:c4316ce25c75 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
viniciushl 0:c4316ce25c75 9 * of this software and associated documentation files (the "Software"), to deal
viniciushl 0:c4316ce25c75 10 * in the Software without restriction, including without limitation the rights
viniciushl 0:c4316ce25c75 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
viniciushl 0:c4316ce25c75 12 * copies of the Software, and to permit persons to whom the Software is
viniciushl 0:c4316ce25c75 13 * furnished to do so, subject to the following conditions:
viniciushl 0:c4316ce25c75 14 *
viniciushl 0:c4316ce25c75 15 * The above copyright notice and this permission notice shall be included in
viniciushl 0:c4316ce25c75 16 * all copies or substantial portions of the Software.
viniciushl 0:c4316ce25c75 17 *
viniciushl 0:c4316ce25c75 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
viniciushl 0:c4316ce25c75 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
viniciushl 0:c4316ce25c75 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
viniciushl 0:c4316ce25c75 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
viniciushl 0:c4316ce25c75 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
viniciushl 0:c4316ce25c75 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
viniciushl 0:c4316ce25c75 24 * THE SOFTWARE.
viniciushl 0:c4316ce25c75 25 *
viniciushl 0:c4316ce25c75 26 * @section DESCRIPTION
viniciushl 0:c4316ce25c75 27 *
viniciushl 0:c4316ce25c75 28 * Honeywell HMC5883Ldigital compass.
viniciushl 0:c4316ce25c75 29 *
viniciushl 0:c4316ce25c75 30 * Datasheet:
viniciushl 0:c4316ce25c75 31 *
viniciushl 0:c4316ce25c75 32 * http://www.ssec.honeywell.com/magnetic/datasheets/HMC5883L.pdf
viniciushl 0:c4316ce25c75 33 */
viniciushl 0:c4316ce25c75 34
viniciushl 0:c4316ce25c75 35 /**
viniciushl 0:c4316ce25c75 36 * Includes
viniciushl 0:c4316ce25c75 37 */
viniciushl 0:c4316ce25c75 38 #include "HMC5883L.h"
viniciushl 0:c4316ce25c75 39
viniciushl 0:c4316ce25c75 40 HMC5883L::HMC5883L(PinName sda, PinName scl) {
viniciushl 0:c4316ce25c75 41
viniciushl 0:c4316ce25c75 42 i2c_ = new I2C(sda, scl);
viniciushl 0:c4316ce25c75 43 //100KHz, as specified by the datasheet.
viniciushl 0:c4316ce25c75 44 i2c_->frequency(100000);
viniciushl 0:c4316ce25c75 45
viniciushl 0:c4316ce25c75 46
viniciushl 0:c4316ce25c75 47 }
viniciushl 0:c4316ce25c75 48
viniciushl 0:c4316ce25c75 49
viniciushl 0:c4316ce25c75 50 void HMC5883L::write(int address, int data) {
viniciushl 0:c4316ce25c75 51
viniciushl 0:c4316ce25c75 52 char tx[2];
viniciushl 0:c4316ce25c75 53
viniciushl 0:c4316ce25c75 54 tx[0]=address;
viniciushl 0:c4316ce25c75 55 tx[1]=data;
viniciushl 0:c4316ce25c75 56
viniciushl 0:c4316ce25c75 57 i2c_->write(HMC5883L_I2C_WRITE,tx,2);
viniciushl 0:c4316ce25c75 58
viniciushl 0:c4316ce25c75 59 wait_ms(100);
viniciushl 0:c4316ce25c75 60
viniciushl 0:c4316ce25c75 61 }
viniciushl 0:c4316ce25c75 62
viniciushl 0:c4316ce25c75 63
viniciushl 0:c4316ce25c75 64 void HMC5883L::setSleepMode() {
viniciushl 0:c4316ce25c75 65
viniciushl 0:c4316ce25c75 66 write(HMC5883L_MODE, HMC5883L_SLEEP);
viniciushl 0:c4316ce25c75 67 }
viniciushl 0:c4316ce25c75 68
viniciushl 0:c4316ce25c75 69 void HMC5883L::setDefault(void) {
viniciushl 0:c4316ce25c75 70
viniciushl 0:c4316ce25c75 71 write(HMC5883L_CONFIG_A,HMC5883L_10HZ_NORMAL);
viniciushl 0:c4316ce25c75 72 write(HMC5883L_CONFIG_B,HMC5883L_1_0GA);
viniciushl 0:c4316ce25c75 73 write(HMC5883L_MODE,HMC5883L_CONTINUOUS);
viniciushl 0:c4316ce25c75 74 wait_ms(100);
viniciushl 0:c4316ce25c75 75 }
viniciushl 0:c4316ce25c75 76
viniciushl 0:c4316ce25c75 77
viniciushl 0:c4316ce25c75 78 void HMC5883L::getAddress(char *buffer) {
viniciushl 0:c4316ce25c75 79
viniciushl 0:c4316ce25c75 80 char rx[3];
viniciushl 0:c4316ce25c75 81 char tx[1];
viniciushl 0:c4316ce25c75 82 tx[0]=HMC5883L_IDENT_A;
viniciushl 0:c4316ce25c75 83
viniciushl 0:c4316ce25c75 84
viniciushl 0:c4316ce25c75 85 i2c_->write(HMC5883L_I2C_WRITE, tx,1);
viniciushl 0:c4316ce25c75 86
viniciushl 0:c4316ce25c75 87 wait_ms(1);
viniciushl 0:c4316ce25c75 88
viniciushl 0:c4316ce25c75 89 i2c_->read(HMC5883L_I2C_READ,rx,3);
viniciushl 0:c4316ce25c75 90
viniciushl 0:c4316ce25c75 91 buffer[0]=rx[0];
viniciushl 0:c4316ce25c75 92 buffer[1]=rx[1];
viniciushl 0:c4316ce25c75 93 buffer[2]=rx[2];
viniciushl 0:c4316ce25c75 94 }
viniciushl 0:c4316ce25c75 95
viniciushl 0:c4316ce25c75 96
viniciushl 0:c4316ce25c75 97
viniciushl 0:c4316ce25c75 98 void HMC5883L::setOpMode(int mode, int ConfigA, int ConfigB) {
viniciushl 0:c4316ce25c75 99
viniciushl 0:c4316ce25c75 100
viniciushl 0:c4316ce25c75 101 write(HMC5883L_CONFIG_A,ConfigA);
viniciushl 0:c4316ce25c75 102 write(HMC5883L_CONFIG_B,ConfigB);
viniciushl 0:c4316ce25c75 103 write(HMC5883L_MODE,mode);
viniciushl 0:c4316ce25c75 104
viniciushl 0:c4316ce25c75 105
viniciushl 0:c4316ce25c75 106 }
viniciushl 0:c4316ce25c75 107
viniciushl 0:c4316ce25c75 108
viniciushl 0:c4316ce25c75 109
viniciushl 0:c4316ce25c75 110
viniciushl 0:c4316ce25c75 111 void HMC5883L::readData(int* getMag) {
viniciushl 0:c4316ce25c75 112
viniciushl 0:c4316ce25c75 113
viniciushl 0:c4316ce25c75 114 char tx[1];
viniciushl 0:c4316ce25c75 115 char rx[2];
viniciushl 0:c4316ce25c75 116
viniciushl 0:c4316ce25c75 117
viniciushl 0:c4316ce25c75 118 tx[0]=HMC5883L_X_MSB;
viniciushl 0:c4316ce25c75 119 i2c_->write(HMC5883L_I2C_READ,tx,1);
viniciushl 0:c4316ce25c75 120 i2c_->read(HMC5883L_I2C_READ,rx,2);
viniciushl 0:c4316ce25c75 121 getMag[0]= (int)rx[0]<<8|(int)rx[1];
viniciushl 0:c4316ce25c75 122
viniciushl 0:c4316ce25c75 123
viniciushl 0:c4316ce25c75 124 tx[0]=HMC5883L_Y_MSB;
viniciushl 0:c4316ce25c75 125 i2c_->write(HMC5883L_I2C_READ,tx,1);
viniciushl 0:c4316ce25c75 126 i2c_->read(HMC5883L_I2C_READ,rx,2);
viniciushl 0:c4316ce25c75 127 getMag[1]= (int)rx[0]<<8|(int)rx[1];
viniciushl 0:c4316ce25c75 128
viniciushl 0:c4316ce25c75 129 tx[0]=HMC5883L_Z_MSB;
viniciushl 0:c4316ce25c75 130 i2c_->write(HMC5883L_I2C_READ,tx,1);
viniciushl 0:c4316ce25c75 131 i2c_->read(HMC5883L_I2C_READ,rx,2);
viniciushl 0:c4316ce25c75 132 getMag[2]= (int)rx[0]<<8|(int)rx[1];
viniciushl 0:c4316ce25c75 133
viniciushl 0:c4316ce25c75 134 }
viniciushl 0:c4316ce25c75 135
viniciushl 0:c4316ce25c75 136 int HMC5883L::getMx() {
viniciushl 0:c4316ce25c75 137
viniciushl 0:c4316ce25c75 138 char tx[1];
viniciushl 0:c4316ce25c75 139 char rx[2];
viniciushl 0:c4316ce25c75 140
viniciushl 0:c4316ce25c75 141
viniciushl 0:c4316ce25c75 142 tx[0]=HMC5883L_X_MSB;
viniciushl 0:c4316ce25c75 143 i2c_->write(HMC5883L_I2C_READ,tx,1);
viniciushl 0:c4316ce25c75 144 i2c_->read(HMC5883L_I2C_READ,rx,2);
viniciushl 0:c4316ce25c75 145 return ((int)rx[0]<<8|(int)rx[1]);
viniciushl 0:c4316ce25c75 146
viniciushl 0:c4316ce25c75 147 }
viniciushl 0:c4316ce25c75 148
viniciushl 0:c4316ce25c75 149 int HMC5883L::getMy() {
viniciushl 0:c4316ce25c75 150
viniciushl 0:c4316ce25c75 151 char tx[1];
viniciushl 0:c4316ce25c75 152 char rx[2];
viniciushl 0:c4316ce25c75 153
viniciushl 0:c4316ce25c75 154
viniciushl 0:c4316ce25c75 155 tx[0]=HMC5883L_Y_MSB;
viniciushl 0:c4316ce25c75 156 i2c_->write(HMC5883L_I2C_READ,tx,1);
viniciushl 0:c4316ce25c75 157 i2c_->read(HMC5883L_I2C_READ,rx,2);
viniciushl 0:c4316ce25c75 158 return ((int)rx[0]<<8|(int)rx[1]);
viniciushl 0:c4316ce25c75 159
viniciushl 0:c4316ce25c75 160 }
viniciushl 0:c4316ce25c75 161
viniciushl 0:c4316ce25c75 162
viniciushl 0:c4316ce25c75 163 int HMC5883L::getMz(){
viniciushl 0:c4316ce25c75 164
viniciushl 0:c4316ce25c75 165 char tx[1];
viniciushl 0:c4316ce25c75 166 char rx[2];
viniciushl 0:c4316ce25c75 167
viniciushl 0:c4316ce25c75 168
viniciushl 0:c4316ce25c75 169 tx[0]=HMC5883L_Z_MSB;
viniciushl 0:c4316ce25c75 170 i2c_->write(HMC5883L_I2C_READ,tx,1);
viniciushl 0:c4316ce25c75 171 i2c_->read(HMC5883L_I2C_READ,rx,2);
viniciushl 0:c4316ce25c75 172 return ((int)rx[0]<<8|(int)rx[1]);
viniciushl 0:c4316ce25c75 173
viniciushl 0:c4316ce25c75 174 }