HMC 5843 lib

Fork of HMC5843 by Jose R Padron

Committer:
rulla
Date:
Tue Oct 03 16:36:59 2017 +0000
Revision:
3:ce0cf45dbec7
Parent:
0:ae7d06398888
Child:
1:65e41eb3c291
Working

Who changed what in which revision?

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