MAX44000 Ambient and Infrared Proximity Sensor

Dependents:   test_MAX44000 testSensor PMK2022_Agriculture

Committer:
Rhyme
Date:
Tue Dec 15 01:15:52 2015 +0000
Revision:
0:c9c9e362ec57
Child:
1:e3d11ab4c524
First commit, no documentation yet

Who changed what in which revision?

UserRevisionLine numberNew 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 0:c9c9e362ec57 30 }
Rhyme 0:c9c9e362ec57 31
Rhyme 0:c9c9e362ec57 32 MAX44000::~MAX44000() { }
Rhyme 0:c9c9e362ec57 33
Rhyme 0:c9c9e362ec57 34 void MAX44000::readRegs(int addr, uint8_t * data, int len) {
Rhyme 0:c9c9e362ec57 35 char t[1] = {addr} ;
Rhyme 0:c9c9e362ec57 36 m_i2c.write(m_addr, t, 1, true) ;
Rhyme 0:c9c9e362ec57 37 m_i2c.read(m_addr, (char*)data, len) ;
Rhyme 0:c9c9e362ec57 38 }
Rhyme 0:c9c9e362ec57 39
Rhyme 0:c9c9e362ec57 40 void MAX44000::writeRegs(uint8_t * data, int len) {
Rhyme 0:c9c9e362ec57 41 m_i2c.write(m_addr, (char *)data, len) ;
Rhyme 0:c9c9e362ec57 42 }
Rhyme 0:c9c9e362ec57 43
Rhyme 0:c9c9e362ec57 44 void MAX44000::getIntStatus(uint8_t *data)
Rhyme 0:c9c9e362ec57 45 {
Rhyme 0:c9c9e362ec57 46 readRegs(REG_INT_STATUS, data, 1) ;
Rhyme 0:c9c9e362ec57 47 }
Rhyme 0:c9c9e362ec57 48
Rhyme 0:c9c9e362ec57 49 void MAX44000::getMainConfig(uint8_t *conf)
Rhyme 0:c9c9e362ec57 50 {
Rhyme 0:c9c9e362ec57 51 readRegs(REG_MAIN_CONFIG, conf, 1) ;
Rhyme 0:c9c9e362ec57 52 }
Rhyme 0:c9c9e362ec57 53
Rhyme 0:c9c9e362ec57 54 void MAX44000::setMainConfig(uint8_t newConf)
Rhyme 0:c9c9e362ec57 55 {
Rhyme 0:c9c9e362ec57 56 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 57 data[0] = REG_MAIN_CONFIG ;
Rhyme 0:c9c9e362ec57 58 data[1] = newConf ;
Rhyme 0:c9c9e362ec57 59 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 60 }
Rhyme 0:c9c9e362ec57 61
Rhyme 0:c9c9e362ec57 62 void MAX44000::getRxConfig(uint8_t *conf)
Rhyme 0:c9c9e362ec57 63 {
Rhyme 0:c9c9e362ec57 64 readRegs(REG_RECV_CONFIG, conf, 1) ;
Rhyme 0:c9c9e362ec57 65 }
Rhyme 0:c9c9e362ec57 66
Rhyme 0:c9c9e362ec57 67 void MAX44000::setRxConfig(uint8_t newConf)
Rhyme 0:c9c9e362ec57 68 {
Rhyme 0:c9c9e362ec57 69 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 70 data[0] = REG_RECV_CONFIG ;
Rhyme 0:c9c9e362ec57 71 data[1] = newConf ;
Rhyme 0:c9c9e362ec57 72 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 73 }
Rhyme 0:c9c9e362ec57 74
Rhyme 0:c9c9e362ec57 75 void MAX44000::getTxConfig(uint8_t *conf)
Rhyme 0:c9c9e362ec57 76 {
Rhyme 0:c9c9e362ec57 77 readRegs(REG_TRNS_CONFIG, conf, 1) ;
Rhyme 0:c9c9e362ec57 78 }
Rhyme 0:c9c9e362ec57 79
Rhyme 0:c9c9e362ec57 80 void MAX44000::setTxConfig(uint8_t newConf)
Rhyme 0:c9c9e362ec57 81 {
Rhyme 0:c9c9e362ec57 82 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 83 data[0] = REG_TRNS_CONFIG ;
Rhyme 0:c9c9e362ec57 84 data[1] = newConf ;
Rhyme 0:c9c9e362ec57 85 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 86 }
Rhyme 0:c9c9e362ec57 87
Rhyme 0:c9c9e362ec57 88 void MAX44000::getALS(uint8_t *ofl, uint16_t *value)
Rhyme 0:c9c9e362ec57 89 {
Rhyme 0:c9c9e362ec57 90 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 91 readRegs(REG_ADC_MSB, data, 2) ;
Rhyme 0:c9c9e362ec57 92 *value = ((data[0] & 0x3F)<<8) | data[1] ;
Rhyme 0:c9c9e362ec57 93 *ofl = (data[0] >> 6) & 0x01 ; // overflow
Rhyme 0:c9c9e362ec57 94 }
Rhyme 0:c9c9e362ec57 95
Rhyme 0:c9c9e362ec57 96 void MAX44000::getProx(uint8_t *value)
Rhyme 0:c9c9e362ec57 97 {
Rhyme 0:c9c9e362ec57 98 readRegs(REG_ADC_BYTE, value, 1) ;
Rhyme 0:c9c9e362ec57 99 }
Rhyme 0:c9c9e362ec57 100
Rhyme 0:c9c9e362ec57 101 void MAX44000::getADC(uint8_t *ofl, uint16_t *als, uint8_t *prox)
Rhyme 0:c9c9e362ec57 102 {
Rhyme 0:c9c9e362ec57 103 getALS(ofl, als) ;
Rhyme 0:c9c9e362ec57 104 getProx(prox) ;
Rhyme 0:c9c9e362ec57 105 }
Rhyme 0:c9c9e362ec57 106
Rhyme 0:c9c9e362ec57 107 void MAX44000::getUPTHR(uint16_t *thr)
Rhyme 0:c9c9e362ec57 108 {
Rhyme 0:c9c9e362ec57 109 readRegs(REG_ALS_UMSB, (uint8_t*)thr, 2) ;
Rhyme 0:c9c9e362ec57 110 *thr &= 0x3FFF ;
Rhyme 0:c9c9e362ec57 111 }
Rhyme 0:c9c9e362ec57 112
Rhyme 0:c9c9e362ec57 113 void MAX44000::setUPTHR(uint16_t newThr)
Rhyme 0:c9c9e362ec57 114 {
Rhyme 0:c9c9e362ec57 115 uint8_t data[3] ;
Rhyme 0:c9c9e362ec57 116 data[0] = REG_ALS_UMSB ;
Rhyme 0:c9c9e362ec57 117 data[1] = (newThr >> 8) & 0x3F ;
Rhyme 0:c9c9e362ec57 118 data[2] = (newThr & 0xFF) ;
Rhyme 0:c9c9e362ec57 119 writeRegs(data, 3) ;
Rhyme 0:c9c9e362ec57 120 }
Rhyme 0:c9c9e362ec57 121
Rhyme 0:c9c9e362ec57 122 void MAX44000::getLOTHR(uint16_t *thr)
Rhyme 0:c9c9e362ec57 123 {
Rhyme 0:c9c9e362ec57 124 readRegs(REG_ALS_LMSB, (uint8_t*)thr, 2) ;
Rhyme 0:c9c9e362ec57 125 *thr &= 0x3FFF ;
Rhyme 0:c9c9e362ec57 126 }
Rhyme 0:c9c9e362ec57 127
Rhyme 0:c9c9e362ec57 128 void MAX44000::setLOTHR(uint16_t newThr)
Rhyme 0:c9c9e362ec57 129 {
Rhyme 0:c9c9e362ec57 130 uint8_t data[3] ;
Rhyme 0:c9c9e362ec57 131 data[0] = REG_ALS_LMSB ;
Rhyme 0:c9c9e362ec57 132 data[1] = (newThr >> 8) & 0x3F ;
Rhyme 0:c9c9e362ec57 133 data[2] = (newThr & 0xFF) ;
Rhyme 0:c9c9e362ec57 134 writeRegs(data, 3) ;
Rhyme 0:c9c9e362ec57 135 }
Rhyme 0:c9c9e362ec57 136
Rhyme 0:c9c9e362ec57 137 void MAX44000::getTHRPT(uint8_t *data)
Rhyme 0:c9c9e362ec57 138 {
Rhyme 0:c9c9e362ec57 139 readRegs(REG_THR_PT, data, 1) ;
Rhyme 0:c9c9e362ec57 140 }
Rhyme 0:c9c9e362ec57 141
Rhyme 0:c9c9e362ec57 142 void MAX44000::setTHRPT(uint8_t newData)
Rhyme 0:c9c9e362ec57 143 {
Rhyme 0:c9c9e362ec57 144 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 145 data[0] = REG_THR_PT ;
Rhyme 0:c9c9e362ec57 146 data[1] = newData ;
Rhyme 0:c9c9e362ec57 147 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 148 }
Rhyme 0:c9c9e362ec57 149
Rhyme 0:c9c9e362ec57 150 void MAX44000::getPRXTHR_IND(uint8_t *value)
Rhyme 0:c9c9e362ec57 151 {
Rhyme 0:c9c9e362ec57 152 uint8_t data ;
Rhyme 0:c9c9e362ec57 153 readRegs(REG_PRXTHR_IND, &data, 1) ;
Rhyme 0:c9c9e362ec57 154 *value = (data >> 6) & 0x01 ;
Rhyme 0:c9c9e362ec57 155 }
Rhyme 0:c9c9e362ec57 156
Rhyme 0:c9c9e362ec57 157 void MAX44000::setPRXTHR_IND(uint8_t newValue)
Rhyme 0:c9c9e362ec57 158 {
Rhyme 0:c9c9e362ec57 159 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 160 data[0] = REG_PRXTHR_IND ;
Rhyme 0:c9c9e362ec57 161 data[1] = (newValue & 0x01) << 6 ;
Rhyme 0:c9c9e362ec57 162 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 163 }
Rhyme 0:c9c9e362ec57 164
Rhyme 0:c9c9e362ec57 165 void MAX44000::getPRX_THR(uint8_t *data)
Rhyme 0:c9c9e362ec57 166 {
Rhyme 0:c9c9e362ec57 167 readRegs(REG_PRX_THR, data, 1) ;
Rhyme 0:c9c9e362ec57 168 }
Rhyme 0:c9c9e362ec57 169
Rhyme 0:c9c9e362ec57 170 void MAX44000::setPRX_THR(uint8_t newValue)
Rhyme 0:c9c9e362ec57 171 {
Rhyme 0:c9c9e362ec57 172 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 173 data[0] = REG_PRX_THR ;
Rhyme 0:c9c9e362ec57 174 data[1] = newValue ;
Rhyme 0:c9c9e362ec57 175 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 176 }
Rhyme 0:c9c9e362ec57 177
Rhyme 0:c9c9e362ec57 178 void MAX44000::getTRM_GAING(uint8_t *data)
Rhyme 0:c9c9e362ec57 179 {
Rhyme 0:c9c9e362ec57 180 readRegs(REG_TRM_GAING, data, 1) ;
Rhyme 0:c9c9e362ec57 181 }
Rhyme 0:c9c9e362ec57 182
Rhyme 0:c9c9e362ec57 183 void MAX44000::setTRM_GAING(uint8_t newValue)
Rhyme 0:c9c9e362ec57 184 {
Rhyme 0:c9c9e362ec57 185 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 186 data[0] = REG_TRM_GAING ;
Rhyme 0:c9c9e362ec57 187 data[1] = newValue ;
Rhyme 0:c9c9e362ec57 188 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 189 }
Rhyme 0:c9c9e362ec57 190
Rhyme 0:c9c9e362ec57 191 void MAX44000::getTRM_GAINIR(uint8_t *data)
Rhyme 0:c9c9e362ec57 192 {
Rhyme 0:c9c9e362ec57 193 readRegs(REG_TRM_GAINIR, data, 1) ;
Rhyme 0:c9c9e362ec57 194 }
Rhyme 0:c9c9e362ec57 195
Rhyme 0:c9c9e362ec57 196 void MAX44000::setTRM_GAINIR(uint8_t newValue)
Rhyme 0:c9c9e362ec57 197 {
Rhyme 0:c9c9e362ec57 198 uint8_t data[2] ;
Rhyme 0:c9c9e362ec57 199 data[0] = REG_TRM_GAINIR ;
Rhyme 0:c9c9e362ec57 200 data[1] = newValue ;
Rhyme 0:c9c9e362ec57 201 writeRegs(data, 2) ;
Rhyme 0:c9c9e362ec57 202 }