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