MAX44000 Ambient and Infrared Proximity Sensor
Dependents: test_MAX44000 testSensor PMK2022_Agriculture
MAX44000.cpp@1:e3d11ab4c524, 2016-07-07 (annotated)
- Committer:
- Rhyme
- Date:
- Thu Jul 07 01:06:25 2016 +0000
- Revision:
- 1:e3d11ab4c524
- Parent:
- 0:c9c9e362ec57
the multi byte I2C read in getALS was not working, changed the read with a couple byte read fixed the problem.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:c9c9e362ec57 | 1 | /* |
Rhyme | 0:c9c9e362ec57 | 2 | * File description here |
Rhyme | 0:c9c9e362ec57 | 3 | */ |
Rhyme | 0:c9c9e362ec57 | 4 | #include "MAX44000.h" |
Rhyme | 0:c9c9e362ec57 | 5 | |
Rhyme | 0:c9c9e362ec57 | 6 | /* some definitions here */ |
Rhyme | 0:c9c9e362ec57 | 7 | #define REG_INT_STATUS 0x00 |
Rhyme | 0:c9c9e362ec57 | 8 | #define REG_MAIN_CONFIG 0x01 |
Rhyme | 0:c9c9e362ec57 | 9 | #define REG_RECV_CONFIG 0x02 |
Rhyme | 0:c9c9e362ec57 | 10 | #define REG_TRNS_CONFIG 0x03 |
Rhyme | 0:c9c9e362ec57 | 11 | |
Rhyme | 0:c9c9e362ec57 | 12 | /* ADC DATA */ |
Rhyme | 0:c9c9e362ec57 | 13 | #define REG_ADC_MSB 0x04 |
Rhyme | 0:c9c9e362ec57 | 14 | #define REG_ADC_LSB 0x05 |
Rhyme | 0:c9c9e362ec57 | 15 | #define REG_ADC_BYTE 0x16 |
Rhyme | 0:c9c9e362ec57 | 16 | |
Rhyme | 0:c9c9e362ec57 | 17 | /* THRESHOLD SET */ |
Rhyme | 0:c9c9e362ec57 | 18 | #define REG_ALS_UMSB 0x06 |
Rhyme | 0:c9c9e362ec57 | 19 | #define REG_ALS_ULSB 0x07 |
Rhyme | 0:c9c9e362ec57 | 20 | #define REG_ALS_LMSB 0x08 |
Rhyme | 0:c9c9e362ec57 | 21 | #define REG_ALS_LLSB 0x09 |
Rhyme | 0:c9c9e362ec57 | 22 | #define REG_THR_PT 0x0A |
Rhyme | 0:c9c9e362ec57 | 23 | #define REG_PRXTHR_IND 0x0B |
Rhyme | 0:c9c9e362ec57 | 24 | #define REG_PRX_THR 0x0C |
Rhyme | 0:c9c9e362ec57 | 25 | #define REG_TRM_GAING 0x0F |
Rhyme | 0:c9c9e362ec57 | 26 | #define REG_TRM_GAINIR 0x10 |
Rhyme | 0:c9c9e362ec57 | 27 | |
Rhyme | 0:c9c9e362ec57 | 28 | MAX44000::MAX44000(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) { |
Rhyme | 0:c9c9e362ec57 | 29 | // activate the peripheral |
Rhyme | 1:e3d11ab4c524 | 30 | uint8_t conf = 0 ; |
Rhyme | 1:e3d11ab4c524 | 31 | conf = \ |
Rhyme | 1:e3d11ab4c524 | 32 | 0x20 /* Use factory-programmed gains for green and IR channels. */ |
Rhyme | 1:e3d11ab4c524 | 33 | | 0x10 /* ALS and PROX are interleaved ontinuously. */ |
Rhyme | 1:e3d11ab4c524 | 34 | ; |
Rhyme | 1:e3d11ab4c524 | 35 | setMainConfig(conf) ; |
Rhyme | 0:c9c9e362ec57 | 36 | } |
Rhyme | 0:c9c9e362ec57 | 37 | |
Rhyme | 0:c9c9e362ec57 | 38 | MAX44000::~MAX44000() { } |
Rhyme | 0:c9c9e362ec57 | 39 | |
Rhyme | 0:c9c9e362ec57 | 40 | void MAX44000::readRegs(int addr, uint8_t * data, int len) { |
Rhyme | 0:c9c9e362ec57 | 41 | char t[1] = {addr} ; |
Rhyme | 0:c9c9e362ec57 | 42 | m_i2c.write(m_addr, t, 1, true) ; |
Rhyme | 0:c9c9e362ec57 | 43 | m_i2c.read(m_addr, (char*)data, len) ; |
Rhyme | 0:c9c9e362ec57 | 44 | } |
Rhyme | 0:c9c9e362ec57 | 45 | |
Rhyme | 0:c9c9e362ec57 | 46 | void MAX44000::writeRegs(uint8_t * data, int len) { |
Rhyme | 0:c9c9e362ec57 | 47 | m_i2c.write(m_addr, (char *)data, len) ; |
Rhyme | 0:c9c9e362ec57 | 48 | } |
Rhyme | 0:c9c9e362ec57 | 49 | |
Rhyme | 0:c9c9e362ec57 | 50 | void MAX44000::getIntStatus(uint8_t *data) |
Rhyme | 0:c9c9e362ec57 | 51 | { |
Rhyme | 0:c9c9e362ec57 | 52 | readRegs(REG_INT_STATUS, data, 1) ; |
Rhyme | 0:c9c9e362ec57 | 53 | } |
Rhyme | 0:c9c9e362ec57 | 54 | |
Rhyme | 0:c9c9e362ec57 | 55 | void MAX44000::getMainConfig(uint8_t *conf) |
Rhyme | 0:c9c9e362ec57 | 56 | { |
Rhyme | 0:c9c9e362ec57 | 57 | readRegs(REG_MAIN_CONFIG, conf, 1) ; |
Rhyme | 0:c9c9e362ec57 | 58 | } |
Rhyme | 0:c9c9e362ec57 | 59 | |
Rhyme | 0:c9c9e362ec57 | 60 | void MAX44000::setMainConfig(uint8_t newConf) |
Rhyme | 0:c9c9e362ec57 | 61 | { |
Rhyme | 0:c9c9e362ec57 | 62 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 63 | data[0] = REG_MAIN_CONFIG ; |
Rhyme | 0:c9c9e362ec57 | 64 | data[1] = newConf ; |
Rhyme | 0:c9c9e362ec57 | 65 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 66 | } |
Rhyme | 0:c9c9e362ec57 | 67 | |
Rhyme | 0:c9c9e362ec57 | 68 | void MAX44000::getRxConfig(uint8_t *conf) |
Rhyme | 0:c9c9e362ec57 | 69 | { |
Rhyme | 0:c9c9e362ec57 | 70 | readRegs(REG_RECV_CONFIG, conf, 1) ; |
Rhyme | 0:c9c9e362ec57 | 71 | } |
Rhyme | 0:c9c9e362ec57 | 72 | |
Rhyme | 0:c9c9e362ec57 | 73 | void MAX44000::setRxConfig(uint8_t newConf) |
Rhyme | 0:c9c9e362ec57 | 74 | { |
Rhyme | 0:c9c9e362ec57 | 75 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 76 | data[0] = REG_RECV_CONFIG ; |
Rhyme | 0:c9c9e362ec57 | 77 | data[1] = newConf ; |
Rhyme | 0:c9c9e362ec57 | 78 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 79 | } |
Rhyme | 0:c9c9e362ec57 | 80 | |
Rhyme | 0:c9c9e362ec57 | 81 | void MAX44000::getTxConfig(uint8_t *conf) |
Rhyme | 0:c9c9e362ec57 | 82 | { |
Rhyme | 0:c9c9e362ec57 | 83 | readRegs(REG_TRNS_CONFIG, conf, 1) ; |
Rhyme | 0:c9c9e362ec57 | 84 | } |
Rhyme | 0:c9c9e362ec57 | 85 | |
Rhyme | 0:c9c9e362ec57 | 86 | void MAX44000::setTxConfig(uint8_t newConf) |
Rhyme | 0:c9c9e362ec57 | 87 | { |
Rhyme | 0:c9c9e362ec57 | 88 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 89 | data[0] = REG_TRNS_CONFIG ; |
Rhyme | 0:c9c9e362ec57 | 90 | data[1] = newConf ; |
Rhyme | 0:c9c9e362ec57 | 91 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 92 | } |
Rhyme | 0:c9c9e362ec57 | 93 | |
Rhyme | 0:c9c9e362ec57 | 94 | void MAX44000::getALS(uint8_t *ofl, uint16_t *value) |
Rhyme | 0:c9c9e362ec57 | 95 | { |
Rhyme | 0:c9c9e362ec57 | 96 | uint8_t data[2] ; |
Rhyme | 1:e3d11ab4c524 | 97 | // readRegs(REG_ADC_MSB, data, 2) ; |
Rhyme | 1:e3d11ab4c524 | 98 | readRegs(REG_ADC_MSB, data, 1) ; |
Rhyme | 1:e3d11ab4c524 | 99 | readRegs(REG_ADC_LSB, &data[1], 1) ; |
Rhyme | 0:c9c9e362ec57 | 100 | *value = ((data[0] & 0x3F)<<8) | data[1] ; |
Rhyme | 0:c9c9e362ec57 | 101 | *ofl = (data[0] >> 6) & 0x01 ; // overflow |
Rhyme | 0:c9c9e362ec57 | 102 | } |
Rhyme | 0:c9c9e362ec57 | 103 | |
Rhyme | 0:c9c9e362ec57 | 104 | void MAX44000::getProx(uint8_t *value) |
Rhyme | 0:c9c9e362ec57 | 105 | { |
Rhyme | 0:c9c9e362ec57 | 106 | readRegs(REG_ADC_BYTE, value, 1) ; |
Rhyme | 0:c9c9e362ec57 | 107 | } |
Rhyme | 0:c9c9e362ec57 | 108 | |
Rhyme | 0:c9c9e362ec57 | 109 | void MAX44000::getADC(uint8_t *ofl, uint16_t *als, uint8_t *prox) |
Rhyme | 0:c9c9e362ec57 | 110 | { |
Rhyme | 0:c9c9e362ec57 | 111 | getALS(ofl, als) ; |
Rhyme | 0:c9c9e362ec57 | 112 | getProx(prox) ; |
Rhyme | 0:c9c9e362ec57 | 113 | } |
Rhyme | 0:c9c9e362ec57 | 114 | |
Rhyme | 0:c9c9e362ec57 | 115 | void MAX44000::getUPTHR(uint16_t *thr) |
Rhyme | 0:c9c9e362ec57 | 116 | { |
Rhyme | 0:c9c9e362ec57 | 117 | readRegs(REG_ALS_UMSB, (uint8_t*)thr, 2) ; |
Rhyme | 0:c9c9e362ec57 | 118 | *thr &= 0x3FFF ; |
Rhyme | 0:c9c9e362ec57 | 119 | } |
Rhyme | 0:c9c9e362ec57 | 120 | |
Rhyme | 0:c9c9e362ec57 | 121 | void MAX44000::setUPTHR(uint16_t newThr) |
Rhyme | 0:c9c9e362ec57 | 122 | { |
Rhyme | 0:c9c9e362ec57 | 123 | uint8_t data[3] ; |
Rhyme | 0:c9c9e362ec57 | 124 | data[0] = REG_ALS_UMSB ; |
Rhyme | 0:c9c9e362ec57 | 125 | data[1] = (newThr >> 8) & 0x3F ; |
Rhyme | 0:c9c9e362ec57 | 126 | data[2] = (newThr & 0xFF) ; |
Rhyme | 0:c9c9e362ec57 | 127 | writeRegs(data, 3) ; |
Rhyme | 0:c9c9e362ec57 | 128 | } |
Rhyme | 0:c9c9e362ec57 | 129 | |
Rhyme | 0:c9c9e362ec57 | 130 | void MAX44000::getLOTHR(uint16_t *thr) |
Rhyme | 0:c9c9e362ec57 | 131 | { |
Rhyme | 0:c9c9e362ec57 | 132 | readRegs(REG_ALS_LMSB, (uint8_t*)thr, 2) ; |
Rhyme | 0:c9c9e362ec57 | 133 | *thr &= 0x3FFF ; |
Rhyme | 0:c9c9e362ec57 | 134 | } |
Rhyme | 0:c9c9e362ec57 | 135 | |
Rhyme | 0:c9c9e362ec57 | 136 | void MAX44000::setLOTHR(uint16_t newThr) |
Rhyme | 0:c9c9e362ec57 | 137 | { |
Rhyme | 0:c9c9e362ec57 | 138 | uint8_t data[3] ; |
Rhyme | 0:c9c9e362ec57 | 139 | data[0] = REG_ALS_LMSB ; |
Rhyme | 0:c9c9e362ec57 | 140 | data[1] = (newThr >> 8) & 0x3F ; |
Rhyme | 0:c9c9e362ec57 | 141 | data[2] = (newThr & 0xFF) ; |
Rhyme | 0:c9c9e362ec57 | 142 | writeRegs(data, 3) ; |
Rhyme | 0:c9c9e362ec57 | 143 | } |
Rhyme | 0:c9c9e362ec57 | 144 | |
Rhyme | 0:c9c9e362ec57 | 145 | void MAX44000::getTHRPT(uint8_t *data) |
Rhyme | 0:c9c9e362ec57 | 146 | { |
Rhyme | 0:c9c9e362ec57 | 147 | readRegs(REG_THR_PT, data, 1) ; |
Rhyme | 0:c9c9e362ec57 | 148 | } |
Rhyme | 0:c9c9e362ec57 | 149 | |
Rhyme | 0:c9c9e362ec57 | 150 | void MAX44000::setTHRPT(uint8_t newData) |
Rhyme | 0:c9c9e362ec57 | 151 | { |
Rhyme | 0:c9c9e362ec57 | 152 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 153 | data[0] = REG_THR_PT ; |
Rhyme | 0:c9c9e362ec57 | 154 | data[1] = newData ; |
Rhyme | 0:c9c9e362ec57 | 155 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 156 | } |
Rhyme | 0:c9c9e362ec57 | 157 | |
Rhyme | 0:c9c9e362ec57 | 158 | void MAX44000::getPRXTHR_IND(uint8_t *value) |
Rhyme | 0:c9c9e362ec57 | 159 | { |
Rhyme | 0:c9c9e362ec57 | 160 | uint8_t data ; |
Rhyme | 0:c9c9e362ec57 | 161 | readRegs(REG_PRXTHR_IND, &data, 1) ; |
Rhyme | 0:c9c9e362ec57 | 162 | *value = (data >> 6) & 0x01 ; |
Rhyme | 0:c9c9e362ec57 | 163 | } |
Rhyme | 0:c9c9e362ec57 | 164 | |
Rhyme | 0:c9c9e362ec57 | 165 | void MAX44000::setPRXTHR_IND(uint8_t newValue) |
Rhyme | 0:c9c9e362ec57 | 166 | { |
Rhyme | 0:c9c9e362ec57 | 167 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 168 | data[0] = REG_PRXTHR_IND ; |
Rhyme | 0:c9c9e362ec57 | 169 | data[1] = (newValue & 0x01) << 6 ; |
Rhyme | 0:c9c9e362ec57 | 170 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 171 | } |
Rhyme | 0:c9c9e362ec57 | 172 | |
Rhyme | 0:c9c9e362ec57 | 173 | void MAX44000::getPRX_THR(uint8_t *data) |
Rhyme | 0:c9c9e362ec57 | 174 | { |
Rhyme | 0:c9c9e362ec57 | 175 | readRegs(REG_PRX_THR, data, 1) ; |
Rhyme | 0:c9c9e362ec57 | 176 | } |
Rhyme | 0:c9c9e362ec57 | 177 | |
Rhyme | 0:c9c9e362ec57 | 178 | void MAX44000::setPRX_THR(uint8_t newValue) |
Rhyme | 0:c9c9e362ec57 | 179 | { |
Rhyme | 0:c9c9e362ec57 | 180 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 181 | data[0] = REG_PRX_THR ; |
Rhyme | 0:c9c9e362ec57 | 182 | data[1] = newValue ; |
Rhyme | 0:c9c9e362ec57 | 183 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 184 | } |
Rhyme | 0:c9c9e362ec57 | 185 | |
Rhyme | 0:c9c9e362ec57 | 186 | void MAX44000::getTRM_GAING(uint8_t *data) |
Rhyme | 0:c9c9e362ec57 | 187 | { |
Rhyme | 0:c9c9e362ec57 | 188 | readRegs(REG_TRM_GAING, data, 1) ; |
Rhyme | 0:c9c9e362ec57 | 189 | } |
Rhyme | 0:c9c9e362ec57 | 190 | |
Rhyme | 0:c9c9e362ec57 | 191 | void MAX44000::setTRM_GAING(uint8_t newValue) |
Rhyme | 0:c9c9e362ec57 | 192 | { |
Rhyme | 0:c9c9e362ec57 | 193 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 194 | data[0] = REG_TRM_GAING ; |
Rhyme | 0:c9c9e362ec57 | 195 | data[1] = newValue ; |
Rhyme | 0:c9c9e362ec57 | 196 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 197 | } |
Rhyme | 0:c9c9e362ec57 | 198 | |
Rhyme | 0:c9c9e362ec57 | 199 | void MAX44000::getTRM_GAINIR(uint8_t *data) |
Rhyme | 0:c9c9e362ec57 | 200 | { |
Rhyme | 0:c9c9e362ec57 | 201 | readRegs(REG_TRM_GAINIR, data, 1) ; |
Rhyme | 0:c9c9e362ec57 | 202 | } |
Rhyme | 0:c9c9e362ec57 | 203 | |
Rhyme | 0:c9c9e362ec57 | 204 | void MAX44000::setTRM_GAINIR(uint8_t newValue) |
Rhyme | 0:c9c9e362ec57 | 205 | { |
Rhyme | 0:c9c9e362ec57 | 206 | uint8_t data[2] ; |
Rhyme | 0:c9c9e362ec57 | 207 | data[0] = REG_TRM_GAINIR ; |
Rhyme | 0:c9c9e362ec57 | 208 | data[1] = newValue ; |
Rhyme | 0:c9c9e362ec57 | 209 | writeRegs(data, 2) ; |
Rhyme | 0:c9c9e362ec57 | 210 | } |