i2c trial - does'nt work
Dependencies: ACD_ePaper aconno_I2C aconno_bsp mbed
Fork of acd52832_LSM9DS1 by
LSM9DS1/LSM9DS1.cpp@1:e97c56fb9629, 2018-02-14 (annotated)
- Committer:
- med2017
- Date:
- Wed Feb 14 21:16:43 2018 +0000
- Revision:
- 1:e97c56fb9629
testing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
med2017 | 1:e97c56fb9629 | 1 | #include "LSM9DS1.h" |
med2017 | 1:e97c56fb9629 | 2 | #include "mbed.h" |
med2017 | 1:e97c56fb9629 | 3 | #include "aconno_i2c.h" |
med2017 | 1:e97c56fb9629 | 4 | |
med2017 | 1:e97c56fb9629 | 5 | LSM9DS1::LSM9DS1(I2C *i2c_, char address) : i2c(i2c_, address){ |
med2017 | 1:e97c56fb9629 | 6 | } |
med2017 | 1:e97c56fb9629 | 7 | |
med2017 | 1:e97c56fb9629 | 8 | /*uint8_t LSM9DS1::whoIAm(){ |
med2017 | 1:e97c56fb9629 | 9 | char regAddr = (char)WHO_AM_I; |
med2017 | 1:e97c56fb9629 | 10 | char regData; |
med2017 | 1:e97c56fb9629 | 11 | i2c.readFromReg(regAddr, ®Data, 1); |
med2017 | 1:e97c56fb9629 | 12 | return (uint8_t)regData; |
med2017 | 1:e97c56fb9629 | 13 | } |
med2017 | 1:e97c56fb9629 | 14 | */ |
med2017 | 1:e97c56fb9629 | 15 | uint8_t LSM9DS1::setMode(Mode mode){ |
med2017 | 1:e97c56fb9629 | 16 | char ctrl1Copy; |
med2017 | 1:e97c56fb9629 | 17 | char ctrl4Copy; |
med2017 | 1:e97c56fb9629 | 18 | uint8_t success; |
med2017 | 1:e97c56fb9629 | 19 | |
med2017 | 1:e97c56fb9629 | 20 | //i2c.readFromReg((char)CTRL_REG1, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 21 | //i2c.readFromReg((char)CTRL_REG4, &ctrl4Copy, 1); |
med2017 | 1:e97c56fb9629 | 22 | |
med2017 | 1:e97c56fb9629 | 23 | /* DONT NEED TO SWITCH MODE CAUSE JUST USING ACCELERATION |
med2017 | 1:e97c56fb9629 | 24 | |
med2017 | 1:e97c56fb9629 | 25 | switch(mode){ |
med2017 | 1:e97c56fb9629 | 26 | case HIGH_RES: |
med2017 | 1:e97c56fb9629 | 27 | ctrl1Copy &= 0xF7; |
med2017 | 1:e97c56fb9629 | 28 | ctrl4Copy |= 0x08; |
med2017 | 1:e97c56fb9629 | 29 | break; |
med2017 | 1:e97c56fb9629 | 30 | case NORMAL: |
med2017 | 1:e97c56fb9629 | 31 | ctrl1Copy &= 0xF7; |
med2017 | 1:e97c56fb9629 | 32 | ctrl4Copy &= 0xF7; |
med2017 | 1:e97c56fb9629 | 33 | break; |
med2017 | 1:e97c56fb9629 | 34 | case LOW_POWER: |
med2017 | 1:e97c56fb9629 | 35 | ctrl1Copy |= 0x08; |
med2017 | 1:e97c56fb9629 | 36 | ctrl4Copy &= 0xF7; |
med2017 | 1:e97c56fb9629 | 37 | break; |
med2017 | 1:e97c56fb9629 | 38 | default: |
med2017 | 1:e97c56fb9629 | 39 | return 0; |
med2017 | 1:e97c56fb9629 | 40 | } |
med2017 | 1:e97c56fb9629 | 41 | i2c.writeToReg((char)CTRL_REG5_XL, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 42 | success = i2c.writeToReg((char)CTRL_REG6_XL, &ctrl4Copy, 1); |
med2017 | 1:e97c56fb9629 | 43 | return success; |
med2017 | 1:e97c56fb9629 | 44 | } |
med2017 | 1:e97c56fb9629 | 45 | |
med2017 | 1:e97c56fb9629 | 46 | */ |
med2017 | 1:e97c56fb9629 | 47 | |
med2017 | 1:e97c56fb9629 | 48 | uint8_t LSM9DS1::enableAxes(Axis axis){ |
med2017 | 1:e97c56fb9629 | 49 | char ctrl1Copy; |
med2017 | 1:e97c56fb9629 | 50 | i2c.readFromReg((char)CTRL_REG5_XL, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 51 | ctrl1Copy |= axis; |
med2017 | 1:e97c56fb9629 | 52 | i2c.writeToReg((char)CTRL_REG6_XL, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 53 | return 0; |
med2017 | 1:e97c56fb9629 | 54 | } |
med2017 | 1:e97c56fb9629 | 55 | |
med2017 | 1:e97c56fb9629 | 56 | uint8_t LSM9DS1::disableAxes(Axis axis){ |
med2017 | 1:e97c56fb9629 | 57 | char ctrl1Copy; |
med2017 | 1:e97c56fb9629 | 58 | i2c.readFromReg((char)CTRL_REG5_XL, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 59 | ctrl1Copy &= ~(1 << axis); |
med2017 | 1:e97c56fb9629 | 60 | i2c.writeToReg((char)CTRL_REG6_XL, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 61 | return 0; |
med2017 | 1:e97c56fb9629 | 62 | } |
med2017 | 1:e97c56fb9629 | 63 | |
med2017 | 1:e97c56fb9629 | 64 | int16_t LSM9DS1::readXAxis(){ |
med2017 | 1:e97c56fb9629 | 65 | int16_t rawData; |
med2017 | 1:e97c56fb9629 | 66 | char tempData; |
med2017 | 1:e97c56fb9629 | 67 | // Make sure new data is ready |
med2017 | 1:e97c56fb9629 | 68 | do{ |
med2017 | 1:e97c56fb9629 | 69 | i2c.readFromReg((char)STATUS_REG_0, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 70 | }while(!(tempData & 0x08)); |
med2017 | 1:e97c56fb9629 | 71 | do{ |
med2017 | 1:e97c56fb9629 | 72 | i2c.readFromReg((char)STATUS_REG_0, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 73 | }while(!(tempData & 0x80)); |
med2017 | 1:e97c56fb9629 | 74 | // Same data have been overwritten |
med2017 | 1:e97c56fb9629 | 75 | |
med2017 | 1:e97c56fb9629 | 76 | i2c.readFromReg((char)OUT_X_H_XL, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 77 | rawData = (int8_t)tempData << 8; |
med2017 | 1:e97c56fb9629 | 78 | i2c.readFromReg((char)OUT_X_L_XL, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 79 | rawData |= (int8_t)tempData; |
med2017 | 1:e97c56fb9629 | 80 | return rawData; |
med2017 | 1:e97c56fb9629 | 81 | } |
med2017 | 1:e97c56fb9629 | 82 | |
med2017 | 1:e97c56fb9629 | 83 | int16_t LSM9DS1::readYAxis(){ |
med2017 | 1:e97c56fb9629 | 84 | int16_t rawData; |
med2017 | 1:e97c56fb9629 | 85 | char tempData; |
med2017 | 1:e97c56fb9629 | 86 | i2c.readFromReg((char)OUT_Y_H_XL, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 87 | rawData = (int8_t)tempData << 8; |
med2017 | 1:e97c56fb9629 | 88 | i2c.readFromReg((char)OUT_Y_L_XL, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 89 | rawData |= (int8_t)tempData; |
med2017 | 1:e97c56fb9629 | 90 | return rawData; |
med2017 | 1:e97c56fb9629 | 91 | } |
med2017 | 1:e97c56fb9629 | 92 | |
med2017 | 1:e97c56fb9629 | 93 | int16_t LSM9DS1::readZAxis(){ |
med2017 | 1:e97c56fb9629 | 94 | int16_t rawData; |
med2017 | 1:e97c56fb9629 | 95 | char tempData; |
med2017 | 1:e97c56fb9629 | 96 | i2c.readFromReg((char)OUT_Z_H_XL, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 97 | rawData = (int8_t)tempData << 8; |
med2017 | 1:e97c56fb9629 | 98 | i2c.readFromReg((char)OUT_Z_L_XL, &tempData, 1); |
med2017 | 1:e97c56fb9629 | 99 | rawData |= (int8_t)tempData; |
med2017 | 1:e97c56fb9629 | 100 | return rawData; |
med2017 | 1:e97c56fb9629 | 101 | } |
med2017 | 1:e97c56fb9629 | 102 | |
med2017 | 1:e97c56fb9629 | 103 | //uint8_t LSM9DS1::setODR(Odr odr){ |
med2017 | 1:e97c56fb9629 | 104 | // char ctrl1Copy; |
med2017 | 1:e97c56fb9629 | 105 | //i2c.readFromReg((char)CTRL_REG8, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 106 | //ctrl1Copy |= (odr << 4); |
med2017 | 1:e97c56fb9629 | 107 | //i2c.writeToReg((char)CTRL_REG8, &ctrl1Copy, 1); |
med2017 | 1:e97c56fb9629 | 108 | //return 0; |
med2017 | 1:e97c56fb9629 | 109 | //} |
med2017 | 1:e97c56fb9629 | 110 | |
med2017 | 1:e97c56fb9629 | 111 | /*uint8_t LSM9DS1::setScale(Scale scale){ |
med2017 | 1:e97c56fb9629 | 112 | char ctrl4Copy; |
med2017 | 1:e97c56fb9629 | 113 | i2c.readFromReg((char)CTRL_REG9, &ctrl4Copy, 1); |
med2017 | 1:e97c56fb9629 | 114 | ctrl4Copy |= (scale << 4); |
med2017 | 1:e97c56fb9629 | 115 | i2c.writeToReg((char)CTRL_REG9, &ctrl4Copy, 1); |
med2017 | 1:e97c56fb9629 | 116 | return 0; |
med2017 | 1:e97c56fb9629 | 117 | } |
med2017 | 1:e97c56fb9629 | 118 | *? |
med2017 | 1:e97c56fb9629 | 119 | |
med2017 | 1:e97c56fb9629 | 120 | /* Interrupt activity 1 driven to INT1 pad */ |
med2017 | 1:e97c56fb9629 | 121 | |
med2017 | 1:e97c56fb9629 | 122 | /* |
med2017 | 1:e97c56fb9629 | 123 | uint8_t LSM9DS1::int1Setup(uint8_t setup){ |
med2017 | 1:e97c56fb9629 | 124 | char data = setup; |
med2017 | 1:e97c56fb9629 | 125 | i2c.writeToReg((char)CTRL_REG6_XL, &data, 1); |
med2017 | 1:e97c56fb9629 | 126 | return 0; |
med2017 | 1:e97c56fb9629 | 127 | } |
med2017 | 1:e97c56fb9629 | 128 | |
med2017 | 1:e97c56fb9629 | 129 | |
med2017 | 1:e97c56fb9629 | 130 | */ |
med2017 | 1:e97c56fb9629 | 131 | |
med2017 | 1:e97c56fb9629 | 132 | |
med2017 | 1:e97c56fb9629 | 133 | /*uint8_t LSM9DS1::int1Latch(uint8_t enable){ |
med2017 | 1:e97c56fb9629 | 134 | char ctrl5Copy; |
med2017 | 1:e97c56fb9629 | 135 | i2c.readFromReg((char)CTRL_REG5, &ctrl5Copy, 1); //reg for magnetometer |
med2017 | 1:e97c56fb9629 | 136 | ctrl5Copy |= enable; |
med2017 | 1:e97c56fb9629 | 137 | i2c.writeToReg((char)CTRL_REG5, &ctrl5Copy, 1); |
med2017 | 1:e97c56fb9629 | 138 | return 0; |
med2017 | 1:e97c56fb9629 | 139 | } |
med2017 | 1:e97c56fb9629 | 140 | */ |
med2017 | 1:e97c56fb9629 | 141 | |
med2017 | 1:e97c56fb9629 | 142 | /*uint8_t LSM9DS1::int1Duration(uint8_t duration){ |
med2017 | 1:e97c56fb9629 | 143 | char copy = duration; |
med2017 | 1:e97c56fb9629 | 144 | i2c.writeToReg((char)INT1_DURATION, ©, 1);//reg for magnetometer |
med2017 | 1:e97c56fb9629 | 145 | return 0; |
med2017 | 1:e97c56fb9629 | 146 | } |
med2017 | 1:e97c56fb9629 | 147 | */ |
med2017 | 1:e97c56fb9629 | 148 | |
med2017 | 1:e97c56fb9629 | 149 | |
med2017 | 1:e97c56fb9629 | 150 | /* |
med2017 | 1:e97c56fb9629 | 151 | uint8_t LSM9DS1::int1Threshold(uint8_t threshold){ |
med2017 | 1:e97c56fb9629 | 152 | char copy = threshold; |
med2017 | 1:e97c56fb9629 | 153 | i2c.writeToReg((char)INT1_THS, ©, 1); |
med2017 | 1:e97c56fb9629 | 154 | return 0; |
med2017 | 1:e97c56fb9629 | 155 | } |
med2017 | 1:e97c56fb9629 | 156 | |
med2017 | 1:e97c56fb9629 | 157 | uint8_t LSM9DS1::int1Config(uint8_t config){ |
med2017 | 1:e97c56fb9629 | 158 | char copy = config; |
med2017 | 1:e97c56fb9629 | 159 | i2c.writeToReg((char)INT1_CFG, ©, 1); |
med2017 | 1:e97c56fb9629 | 160 | return 0; |
med2017 | 1:e97c56fb9629 | 161 | } |
med2017 | 1:e97c56fb9629 | 162 | |
med2017 | 1:e97c56fb9629 | 163 | void LSM9DS1::clearIntFlag(){ |
med2017 | 1:e97c56fb9629 | 164 | char data; |
med2017 | 1:e97c56fb9629 | 165 | i2c.readFromReg((char)INT1_SRC, (char*)&data, 1); |
med2017 | 1:e97c56fb9629 | 166 | } |
med2017 | 1:e97c56fb9629 | 167 | |
med2017 | 1:e97c56fb9629 | 168 | */ |
med2017 | 1:e97c56fb9629 | 169 |