MAX44008 RGB Color, Infrared, and Temperature Sensor

Dependents:   test_MAX44008 testSensor

Committer:
Rhyme
Date:
Tue Dec 22 06:02:58 2015 +0000
Revision:
1:45b23a5fff8e
Parent:
0:7d913e68a6d7
Child:
2:e4631b2273f8
commit before publishing; basic functions have been tested, but not all the functions have not.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:7d913e68a6d7 1 /**
Rhyme 0:7d913e68a6d7 2 * MAX44008 RGB Color, Infrared,
Rhyme 0:7d913e68a6d7 3 * and Temperature Sensor
Rhyme 0:7d913e68a6d7 4 * I2C 7bit address: 0x40 (A0 = 1) 0x41 (A0 = 0)
Rhyme 0:7d913e68a6d7 5 */
Rhyme 0:7d913e68a6d7 6 #include "mbed.h"
Rhyme 0:7d913e68a6d7 7 #include "MAX44008.h"
Rhyme 0:7d913e68a6d7 8
Rhyme 0:7d913e68a6d7 9 /* STATUS */
Rhyme 0:7d913e68a6d7 10 #define REG_INT_STATUS 0x00
Rhyme 0:7d913e68a6d7 11
Rhyme 0:7d913e68a6d7 12 /* CONFIGURATION */
Rhyme 0:7d913e68a6d7 13 #define REG_MAIN_CONFIG 0x01
Rhyme 0:7d913e68a6d7 14 #define REG_AMB_CONFIG 0x02
Rhyme 0:7d913e68a6d7 15
Rhyme 0:7d913e68a6d7 16 /* AMBIENT READING */
Rhyme 0:7d913e68a6d7 17 #define REG_AMB_CLR_MSB 0x04
Rhyme 0:7d913e68a6d7 18 #define REG_AMB_CLR_LSB 0x05
Rhyme 0:7d913e68a6d7 19 #define REG_AMB_RED_MSB 0x06
Rhyme 0:7d913e68a6d7 20 #define REG_AMB_RED_LSB 0x07
Rhyme 0:7d913e68a6d7 21 #define REG_AMB_GRN_MSB 0x08
Rhyme 0:7d913e68a6d7 22 #define REG_AMB_GRN_LSB 0x09
Rhyme 0:7d913e68a6d7 23 #define REG_AMB_BLU_MSB 0x0A
Rhyme 0:7d913e68a6d7 24 #define REG_AMB_BLU_LSB 0x0B
Rhyme 0:7d913e68a6d7 25 #define REG_AMB_IR_MSB 0x0C
Rhyme 0:7d913e68a6d7 26 #define REG_AMB_IR_LSB 0x0D
Rhyme 0:7d913e68a6d7 27 #define REG_AMB_IRCMP_MSB 0x0E
Rhyme 0:7d913e68a6d7 28 #define REG_AMB_IRCMP_LSB 0x0F
Rhyme 0:7d913e68a6d7 29 #define REG_TMP_MSB 0x12
Rhyme 0:7d913e68a6d7 30 #define REG_TMP_LSB 0x13
Rhyme 0:7d913e68a6d7 31
Rhyme 0:7d913e68a6d7 32 /* Interrupt Thresholds */
Rhyme 0:7d913e68a6d7 33 #define REG_AMB_UPTHR_MSB 0x14
Rhyme 0:7d913e68a6d7 34 #define REG_AMB_UPTHR_LSB 0x15
Rhyme 0:7d913e68a6d7 35 #define REG_AMB_LOTHR_MSB 0x16
Rhyme 0:7d913e68a6d7 36 #define REG_AMB_LOTHR_LSB 0x17
Rhyme 0:7d913e68a6d7 37 #define REG_AMB_PST 0x18
Rhyme 0:7d913e68a6d7 38
Rhyme 0:7d913e68a6d7 39 /* Ambient ADC Gains */
Rhyme 0:7d913e68a6d7 40 #define REG_TRIM_GAIN_CLR 0x1D
Rhyme 0:7d913e68a6d7 41 #define REG_TRIM_GAIN_RED 0x1E
Rhyme 0:7d913e68a6d7 42 #define REG_TRIM_GAIN_GRN 0x1F
Rhyme 0:7d913e68a6d7 43 #define REG_TRIM_GAIN_BLU 0x20
Rhyme 0:7d913e68a6d7 44 #define REG_TRIM_GAIN_IR 0x21
Rhyme 0:7d913e68a6d7 45
Rhyme 1:45b23a5fff8e 46 #if 0
Rhyme 0:7d913e68a6d7 47 /* Operation Mode */
Rhyme 0:7d913e68a6d7 48 #define MODE_CLEAR 0x00
Rhyme 0:7d913e68a6d7 49 #define MODE_CLEAR_IR 0x01
Rhyme 0:7d913e68a6d7 50 #define MODE_CLEAR_RGB_IR 0x02
Rhyme 0:7d913e68a6d7 51
Rhyme 0:7d913e68a6d7 52 /* Ambient Interrupt Select */
Rhyme 0:7d913e68a6d7 53 #define AMB_INT_CLEAR 0x00
Rhyme 0:7d913e68a6d7 54 #define AMB_INT_GREEN 0x01
Rhyme 0:7d913e68a6d7 55 #define AMB_INT_IR 0x02
Rhyme 0:7d913e68a6d7 56 #define AMB_INT_TEMP 0x03
Rhyme 1:45b23a5fff8e 57 #endif
Rhyme 0:7d913e68a6d7 58
Rhyme 0:7d913e68a6d7 59 MAX44008::MAX44008(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
Rhyme 0:7d913e68a6d7 60 // activate the peripheral
Rhyme 0:7d913e68a6d7 61 }
Rhyme 0:7d913e68a6d7 62
Rhyme 0:7d913e68a6d7 63 MAX44008::~MAX44008() { }
Rhyme 0:7d913e68a6d7 64
Rhyme 0:7d913e68a6d7 65 void MAX44008::readRegs(int addr, uint8_t *data, int len)
Rhyme 0:7d913e68a6d7 66 {
Rhyme 0:7d913e68a6d7 67 char t[1] = {addr} ;
Rhyme 0:7d913e68a6d7 68 m_i2c.write(m_addr, t, 1, true) ;
Rhyme 0:7d913e68a6d7 69 m_i2c.read(m_addr, (char*)data, len) ;
Rhyme 0:7d913e68a6d7 70 }
Rhyme 0:7d913e68a6d7 71
Rhyme 0:7d913e68a6d7 72 void MAX44008::writeRegs(uint8_t *data, int len)
Rhyme 0:7d913e68a6d7 73 {
Rhyme 0:7d913e68a6d7 74 m_i2c.write(m_addr, (char *)data, len) ;
Rhyme 0:7d913e68a6d7 75 }
Rhyme 0:7d913e68a6d7 76
Rhyme 0:7d913e68a6d7 77 /**
Rhyme 0:7d913e68a6d7 78 * REGISTER: Interrupt Status
Rhyme 0:7d913e68a6d7 79 * Bit7: -
Rhyme 0:7d913e68a6d7 80 * Bit6: -
Rhyme 0:7d913e68a6d7 81 * Bit5: -
Rhyme 0:7d913e68a6d7 82 * Bit4: RESET : Reset Control
Rhyme 0:7d913e68a6d7 83 * 0 : The part is in normal operation.
Rhyme 0:7d913e68a6d7 84 * 1 : The part undergoes a forced POR sequence.
Rhyme 0:7d913e68a6d7 85 * All configuration, threshold, and data registers are
Rhyme 0:7d913e68a6d7 86 * reset to a power-on state by writing a 1 to this bit,
Rhyme 0:7d913e68a6d7 87 * and an internal hardware reset pulse is generated.
Rhyme 0:7d913e68a6d7 88 * This bit then automatically becomes 0 after the RESET sequence is completed.
Rhyme 0:7d913e68a6d7 89 * After resettign, the PWRON interrupt is triggered.
Rhyme 0:7d913e68a6d7 90 * Bit3: SHDN : Shutdown Control
Rhyme 0:7d913e68a6d7 91 * 0 : The part is in normal operatin.
Rhyme 0:7d913e68a6d7 92 * When the part returns from shutdown, note that the value in data registers
Rhyme 0:7d913e68a6d7 93 * is not current until the first conversion cycle is completed.
Rhyme 0:7d913e68a6d7 94 * 1 : The part can be put into a power-save mode by writing a 1 to this bit.
Rhyme 0:7d913e68a6d7 95 * Supply current is reduced to approximately 0.5uA with no I2C clock activity.
Rhyme 0:7d913e68a6d7 96 * While all registers remain accessible and retain data, ADC conversion data
Rhyme 0:7d913e68a6d7 97 * contained in them may not be current. Writeable registers also remain
Rhyme 0:7d913e68a6d7 98 * accessible in shutdown. All interrupts are cleared.
Rhyme 0:7d913e68a6d7 99 * Bit2: PWRON : Power-On INTERRUPT STATUS Flag
Rhyme 0:7d913e68a6d7 100 * 0 : Normal operating mode.
Rhyme 0:7d913e68a6d7 101 * 1 : The part went through a power-up event, either because the part was turned on,
Rhyme 0:7d913e68a6d7 102 * or because there was a power-supply voltage glitch.
Rhyme 0:7d913e68a6d7 103 * All interrupt threshold settings in the registers have been reset to power-on
Rhyme 0:7d913e68a6d7 104 * default states, and should be examined if nccessary. The /INT pin is also pulled low.
Rhyme 0:7d913e68a6d7 105 * Once this bit is set, the only way to clear this bit is to read this register.
Rhyme 0:7d913e68a6d7 106 * Bit1: -
Rhyme 0:7d913e68a6d7 107 * Bit0: AMBINTS : Ambient INTERRUPT STATUS Flag
Rhyme 0:7d913e68a6d7 108 * 0 : No interrupt trigger ever has occurred.
Rhyme 0:7d913e68a6d7 109 * 1 : The ambient light has exceeded the designated window limits defined
Rhyme 0:7d913e68a6d7 110 * by the threshold registers for longer than persist timer count AMBPST[1:0].
Rhyme 0:7d913e68a6d7 111 * It also causes the /INT pin to be pulled low. Once set,
Rhyme 0:7d913e68a6d7 112 * the only way to clear this bit is to read this register.
Rhyme 0:7d913e68a6d7 113 * This bit is always set to 0 if AMBINTE bit is set to 0.
Rhyme 0:7d913e68a6d7 114 */
Rhyme 0:7d913e68a6d7 115 uint8_t MAX44008::getIntStatus(void)
Rhyme 0:7d913e68a6d7 116 {
Rhyme 0:7d913e68a6d7 117 uint8_t value = 0 ;
Rhyme 0:7d913e68a6d7 118 readRegs(REG_INT_STATUS, &value, 1) ;
Rhyme 0:7d913e68a6d7 119 return( value ) ;
Rhyme 0:7d913e68a6d7 120 }
Rhyme 0:7d913e68a6d7 121
Rhyme 0:7d913e68a6d7 122 void MAX44008::setIntStatus(uint8_t newValue)
Rhyme 0:7d913e68a6d7 123 {
Rhyme 0:7d913e68a6d7 124 uint8_t val[2] ;
Rhyme 0:7d913e68a6d7 125 val[0] = REG_INT_STATUS ;
Rhyme 0:7d913e68a6d7 126 val[1] = newValue ;
Rhyme 0:7d913e68a6d7 127 writeRegs(val, 2) ;
Rhyme 0:7d913e68a6d7 128 }
Rhyme 0:7d913e68a6d7 129
Rhyme 0:7d913e68a6d7 130 /**
Rhyme 0:7d913e68a6d7 131 * REGISTER: Main Configuration
Rhyme 0:7d913e68a6d7 132 * Bit7: -
Rhyme 0:7d913e68a6d7 133 * Bit6: -
Rhyme 0:7d913e68a6d7 134 * Bit5: MODE[1]
Rhyme 0:7d913e68a6d7 135 * Bit4: MODE[0]
Rhyme 0:7d913e68a6d7 136 * 00 : Clear : CLEAR + TEMP(*) channels active
Rhyme 0:7d913e68a6d7 137 * 01 : Clear + IR : CLEAR + TEMP(*) + IR channels active
Rhyme 0:7d913e68a6d7 138 * 10 : Clear + RGB + IR : CLEAR + TEMP(*) + RGB + IR channels active
Rhyme 0:7d913e68a6d7 139 * (*) When TEMPEN set to 1.
Rhyme 0:7d913e68a6d7 140 * Bit3: AMBSEL[1] : Ambient Interrupt Select
Rhyme 0:7d913e68a6d7 141 * Bit2: AMBSEL[0] : Ambient Interrupt Select
Rhyme 0:7d913e68a6d7 142 * 00 : CLEAR channel data is used to compare with ambient interrupt thresholds and ambient timer settings.
Rhyme 0:7d913e68a6d7 143 01 : GREEN channel data is used to compare with ambinet interrupt thresholds and ambient timer settings.
Rhyme 0:7d913e68a6d7 144 10 : IR channel data is used to compare with ambient interrupt thresholds and ambient timer settings.
Rhyme 0:7d913e68a6d7 145 11 : TEMP channel data is used to compare with ambinet interrupt thresholds and ambinet timer settings.
Rhyme 0:7d913e68a6d7 146 * Bit1: -
Rhyme 0:7d913e68a6d7 147 * Bit0: AMBINTE : Ambient Interrupt Enable
Rhyme 0:7d913e68a6d7 148 * 0 : The AMBINTS bit and /INT pin remain unasserted even if an ambient interrupt event has occurred.
Rhyme 0:7d913e68a6d7 149 * The AMBINTS bit is set to 0 if previously set to 1.
Rhyme 0:7d913e68a6d7 150 * 1 : Detection of ambient interrupt is enabled (see the AMBINTS bit for more details).
Rhyme 0:7d913e68a6d7 151 * An ambient interrupt can trigger a hardware interrupt (/INT pin pullued low)
Rhyme 0:7d913e68a6d7 152 * and set AMBINTS bit (register 0x00, BIT0)
Rhyme 0:7d913e68a6d7 153 */
Rhyme 0:7d913e68a6d7 154 uint8_t MAX44008::getMainConfig(void)
Rhyme 0:7d913e68a6d7 155 {
Rhyme 0:7d913e68a6d7 156 uint8_t value = 0 ;
Rhyme 0:7d913e68a6d7 157 readRegs(REG_MAIN_CONFIG, &value, 1) ;
Rhyme 0:7d913e68a6d7 158 return( value ) ;
Rhyme 0:7d913e68a6d7 159 }
Rhyme 0:7d913e68a6d7 160
Rhyme 0:7d913e68a6d7 161 void MAX44008::setMainConfig(uint8_t newConfig)
Rhyme 0:7d913e68a6d7 162 {
Rhyme 0:7d913e68a6d7 163 uint8_t val[2] ;
Rhyme 0:7d913e68a6d7 164 val[0] = REG_MAIN_CONFIG ;
Rhyme 0:7d913e68a6d7 165 val[1] = newConfig ;
Rhyme 0:7d913e68a6d7 166 writeRegs(val, 2) ;
Rhyme 0:7d913e68a6d7 167 }
Rhyme 0:7d913e68a6d7 168
Rhyme 0:7d913e68a6d7 169 /**
Rhyme 0:7d913e68a6d7 170 * REGISTER: Ambient Configuration
Rhyme 0:7d913e68a6d7 171 * Bit7: TRIM
Rhyme 0:7d913e68a6d7 172 * 0 : Use factory-programmed gains for all the channels.
Rhyme 0:7d913e68a6d7 173 * Ignore any bytes written to TRIM_GAIN_GREEN[6:0],
Rhyme 0:7d913e68a6d7 174 * TRIM_GAIN_RED[6:0], TRIM_GAIN_BLUE[6:0], TRIM_GAIN_CLEAR[6:0],
Rhyme 0:7d913e68a6d7 175 * and TRIM_GAIN_IR[6:0] registers.
Rhyme 0:7d913e68a6d7 176 * 1 : Use bytes written to TRIM_GAIN_GREEN[6:0], TRIM_GAIN_RED[6:0],
Rhyme 0:7d913e68a6d7 177 * TRIM_GAIN_BLUE[6:0], TRIM_GAIN_CLEAR[6:0],
Rhyme 0:7d913e68a6d7 178 * and TRIM_GAIN_IR[6:0] registers to set the gain for each channel.
Rhyme 0:7d913e68a6d7 179 * Bit6: COMPEN
Rhyme 0:7d913e68a6d7 180 * 0 : Disables IR compensation.
Rhyme 0:7d913e68a6d7 181 * 1 : Enables IR compensation.
Rhyme 0:7d913e68a6d7 182 * Only for MODE[1:0] = 00 Mode.
Rhyme 0:7d913e68a6d7 183 * The integration time of compensation channel is controlled by the AMB mode settings.
Rhyme 0:7d913e68a6d7 184 * The compensation is enabled only when the clear channel is on.
Rhyme 0:7d913e68a6d7 185 * When COMPEN = 1, the CLEAR data is automatically compensated
Rhyme 0:7d913e68a6d7 186 * for stray IR leakeds and temperature variations.
Rhyme 0:7d913e68a6d7 187 * When COMPEN = 0, the IR compensation is disabled,
Rhyme 0:7d913e68a6d7 188 * but the output of the IR compensation data exits.
Rhyme 0:7d913e68a6d7 189 * Bit5: TEMPEN
Rhyme 0:7d913e68a6d7 190 * 0 : Disables temperature sensor.
Rhyme 0:7d913e68a6d7 191 * 1 : Enables temperature sensor.
Rhyme 0:7d913e68a6d7 192 * The integration time of temperature sensor is controlled by the ambient mode settings.
Rhyme 0:7d913e68a6d7 193 * The temperature sensor is enabled only if the clear channel is on.
Rhyme 0:7d913e68a6d7 194 * Bit4: AMBTIM[2]
Rhyme 0:7d913e68a6d7 195 * Bit3: AMBTIM[1]
Rhyme 0:7d913e68a6d7 196 * Bit2: AMBTIM[0]
Rhyme 0:7d913e68a6d7 197 * | Integration Time | Full-scale ADC | Bit Resolution | Relative LSB Size |
Rhyme 0:7d913e68a6d7 198 * | (ms) | (counts) | | for fixed AMPGA[1:0] |
Rhyme 0:7d913e68a6d7 199 * 000 : 100 | 16,384 | 14 | 1x |
Rhyme 0:7d913e68a6d7 200 * 001 : 25 | 4,096 | 12 | 4x |
Rhyme 0:7d913e68a6d7 201 * 010 : 6.25 | 1,024 | 10 | 16x |
Rhyme 0:7d913e68a6d7 202 * 011 : 1.5625 | 256 | 8 | 64x |
Rhyme 0:7d913e68a6d7 203 * 100 : 400 | 16,384 | 14 | 1/4x |
Rhyme 0:7d913e68a6d7 204 * 101 : Reserved | Not applicable | Not applicable | Not applicable |
Rhyme 0:7d913e68a6d7 205 * 110 : Reserved | Not applicable | Not applicable | Not applicable |
Rhyme 0:7d913e68a6d7 206 * 111 : Reserved | Not applicable | Not applicable | Not applicable |
Rhyme 0:7d913e68a6d7 207 * Bit1: AMBPGA[1]
Rhyme 0:7d913e68a6d7 208 * Bit0: AMBPGA[0]
Rhyme 0:7d913e68a6d7 209 * In AMBTIM[2:0] = 000 Mode (100ms integraation time)
Rhyme 0:7d913e68a6d7 210 * | CLEAR/RED/GREEN/IR | BLUE |
Rhyme 0:7d913e68a6d7 211 * | nW/cm^2 per LSB | Full-scale (nW/cm^2) | nW/cm^2 per LSB | Full-scale (nW/cm^2) |
Rhyme 0:7d913e68a6d7 212 * 00 : 2 | 32.768 | 4 | 65.536 |
Rhyme 0:7d913e68a6d7 213 * 01 : 8 | 131.072 | 16 | 262.144 |
Rhyme 0:7d913e68a6d7 214 * 10 : 32 | 524.288 | 64 | 1048.573 |
Rhyme 0:7d913e68a6d7 215 * 11 : 512 | 8388.61 | 1024 | 16777.2 |
Rhyme 0:7d913e68a6d7 216 * In AMBTIM[2:0] = 100 Mode (400ms integration time)
Rhyme 0:7d913e68a6d7 217 * | CLEAR/RED/GREEN/IR | BLUE |
Rhyme 0:7d913e68a6d7 218 * | nW/cm^2 per LSB | Full-scale (nW/cm^2) | nW/cm^2 per LSB | Full-scale (nW/cm^2) |
Rhyme 0:7d913e68a6d7 219 * 00 : 0.5 | 8.192 | 1 | 16.384 |
Rhyme 0:7d913e68a6d7 220 * 01 : 2 | 32.768 | 4 | 65.536 |
Rhyme 0:7d913e68a6d7 221 * 10 : 8 | 131.072 | 16 | 262.1433 |
Rhyme 0:7d913e68a6d7 222 * 11 : 128 | 2097.153 | 256 | 4194.3 |
Rhyme 0:7d913e68a6d7 223 */
Rhyme 0:7d913e68a6d7 224 uint8_t MAX44008::getAMB_Config(void)
Rhyme 0:7d913e68a6d7 225 {
Rhyme 0:7d913e68a6d7 226 uint8_t value = 0 ;
Rhyme 0:7d913e68a6d7 227 readRegs(REG_AMB_CONFIG, &value, 1) ;
Rhyme 0:7d913e68a6d7 228 return( value ) ;
Rhyme 0:7d913e68a6d7 229 }
Rhyme 0:7d913e68a6d7 230
Rhyme 0:7d913e68a6d7 231 void MAX44008::setAMB_Config(uint8_t newConfig)
Rhyme 0:7d913e68a6d7 232 {
Rhyme 0:7d913e68a6d7 233 uint8_t val[2] ;
Rhyme 0:7d913e68a6d7 234 val[0] = REG_AMB_CONFIG ;
Rhyme 0:7d913e68a6d7 235 val[1] = newConfig ;
Rhyme 0:7d913e68a6d7 236 writeRegs(val, 2) ;
Rhyme 0:7d913e68a6d7 237 }
Rhyme 0:7d913e68a6d7 238
Rhyme 0:7d913e68a6d7 239 int16_t MAX44008::getAMB_CLEAR(void) {
Rhyme 0:7d913e68a6d7 240 int16_t value;
Rhyme 0:7d913e68a6d7 241 uint8_t res[2];
Rhyme 0:7d913e68a6d7 242 readRegs(REG_AMB_CLR_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 243 value = (res[0] << 8)+res[1] ;
Rhyme 0:7d913e68a6d7 244 return( value ) ;
Rhyme 0:7d913e68a6d7 245 }
Rhyme 0:7d913e68a6d7 246
Rhyme 0:7d913e68a6d7 247 int16_t MAX44008::getAMB_RED(void) {
Rhyme 0:7d913e68a6d7 248 int16_t value;
Rhyme 0:7d913e68a6d7 249 uint8_t res[2];
Rhyme 0:7d913e68a6d7 250 readRegs(REG_AMB_RED_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 251 value = (res[0] << 8)+res[1] ;
Rhyme 0:7d913e68a6d7 252 return( value ) ;
Rhyme 0:7d913e68a6d7 253 }
Rhyme 0:7d913e68a6d7 254
Rhyme 0:7d913e68a6d7 255 int16_t MAX44008::getAMB_GREEN(void) {
Rhyme 0:7d913e68a6d7 256 int16_t value;
Rhyme 0:7d913e68a6d7 257 uint8_t res[2];
Rhyme 0:7d913e68a6d7 258 readRegs(REG_AMB_GRN_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 259 value = (res[0] << 8)+res[1] ;
Rhyme 0:7d913e68a6d7 260 return( value ) ;
Rhyme 0:7d913e68a6d7 261 }
Rhyme 0:7d913e68a6d7 262
Rhyme 0:7d913e68a6d7 263 int16_t MAX44008::getAMB_BLUE(void) {
Rhyme 0:7d913e68a6d7 264 int16_t value;
Rhyme 0:7d913e68a6d7 265 uint8_t res[2];
Rhyme 0:7d913e68a6d7 266 readRegs(REG_AMB_BLU_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 267 value = (res[0] << 8)+res[1] ;
Rhyme 0:7d913e68a6d7 268 return( value ) ;
Rhyme 0:7d913e68a6d7 269 }
Rhyme 0:7d913e68a6d7 270
Rhyme 0:7d913e68a6d7 271 int16_t MAX44008::getIR(void) {
Rhyme 0:7d913e68a6d7 272 int16_t value;
Rhyme 0:7d913e68a6d7 273 uint8_t res[2];
Rhyme 0:7d913e68a6d7 274 readRegs(REG_AMB_IR_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 275 value = (res[0] << 8)+res[1] ;
Rhyme 0:7d913e68a6d7 276 return( value ) ;
Rhyme 0:7d913e68a6d7 277 }
Rhyme 0:7d913e68a6d7 278
Rhyme 0:7d913e68a6d7 279 int16_t MAX44008::getIRCOMP(void) {
Rhyme 0:7d913e68a6d7 280 int16_t value;
Rhyme 0:7d913e68a6d7 281 uint8_t res[2];
Rhyme 0:7d913e68a6d7 282 readRegs(REG_AMB_IRCMP_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 283 value = (res[0] << 8)+res[1] ;
Rhyme 0:7d913e68a6d7 284 return( value ) ;
Rhyme 0:7d913e68a6d7 285 }
Rhyme 0:7d913e68a6d7 286
Rhyme 0:7d913e68a6d7 287 int16_t MAX44008::getTEMP(void)
Rhyme 0:7d913e68a6d7 288 {
Rhyme 0:7d913e68a6d7 289 int16_t value;
Rhyme 0:7d913e68a6d7 290 uint8_t res[2];
Rhyme 0:7d913e68a6d7 291 readRegs(REG_TMP_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 292 value = (res[0] << 8)+res[1] ;
Rhyme 0:7d913e68a6d7 293 return( value ) ;
Rhyme 0:7d913e68a6d7 294 }
Rhyme 0:7d913e68a6d7 295
Rhyme 0:7d913e68a6d7 296 int16_t MAX44008::getAMB_UPTHR(void)
Rhyme 0:7d913e68a6d7 297 {
Rhyme 0:7d913e68a6d7 298 uint16_t value ;
Rhyme 0:7d913e68a6d7 299 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 300 readRegs(REG_AMB_UPTHR_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 301 value = (res[0] << 8) | res[1] ;
Rhyme 0:7d913e68a6d7 302 return( value ) ;
Rhyme 0:7d913e68a6d7 303 }
Rhyme 0:7d913e68a6d7 304
Rhyme 0:7d913e68a6d7 305 void MAX44008::setAMB_UPTHR(int16_t newTHR)
Rhyme 0:7d913e68a6d7 306 {
Rhyme 0:7d913e68a6d7 307 uint8_t res[3] ;
Rhyme 0:7d913e68a6d7 308 res[0] = REG_AMB_UPTHR_MSB ;
Rhyme 0:7d913e68a6d7 309 res[1] = (newTHR >> 8) & 0x3F ;
Rhyme 0:7d913e68a6d7 310 res[2] = newTHR & 0xFF ;
Rhyme 0:7d913e68a6d7 311 writeRegs(res, 3) ;
Rhyme 0:7d913e68a6d7 312 }
Rhyme 0:7d913e68a6d7 313
Rhyme 0:7d913e68a6d7 314 int16_t MAX44008::getAMB_LOTHR(void)
Rhyme 0:7d913e68a6d7 315 {
Rhyme 0:7d913e68a6d7 316 uint16_t value ;
Rhyme 0:7d913e68a6d7 317 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 318 readRegs(REG_AMB_LOTHR_MSB, res, 2) ;
Rhyme 0:7d913e68a6d7 319 value = (res[0] << 8) | res[1] ;
Rhyme 0:7d913e68a6d7 320 return( value ) ;
Rhyme 0:7d913e68a6d7 321 }
Rhyme 0:7d913e68a6d7 322
Rhyme 0:7d913e68a6d7 323 void MAX44008::setAMB_LOTHR(int16_t newTHR)
Rhyme 0:7d913e68a6d7 324 {
Rhyme 0:7d913e68a6d7 325 uint8_t res[3] ;
Rhyme 0:7d913e68a6d7 326 res[0] = REG_AMB_LOTHR_MSB ;
Rhyme 0:7d913e68a6d7 327 res[1] = (newTHR >> 8) & 0x3F ;
Rhyme 0:7d913e68a6d7 328 res[2] = newTHR & 0xFF ;
Rhyme 0:7d913e68a6d7 329 writeRegs(res, 3) ;
Rhyme 0:7d913e68a6d7 330 }
Rhyme 0:7d913e68a6d7 331
Rhyme 0:7d913e68a6d7 332 uint8_t MAX44008::getAMB_PST(void)
Rhyme 0:7d913e68a6d7 333 {
Rhyme 0:7d913e68a6d7 334 uint8_t value ;
Rhyme 0:7d913e68a6d7 335 readRegs(REG_AMB_PST, &value, 1) ;
Rhyme 0:7d913e68a6d7 336 return( value ) ;
Rhyme 0:7d913e68a6d7 337 }
Rhyme 0:7d913e68a6d7 338
Rhyme 0:7d913e68a6d7 339 void MAX44008::setAMB_PST(uint8_t newValue)
Rhyme 0:7d913e68a6d7 340 {
Rhyme 0:7d913e68a6d7 341 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 342 res[0] = REG_AMB_PST ;
Rhyme 0:7d913e68a6d7 343 res[1] = newValue ;
Rhyme 0:7d913e68a6d7 344 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 345 }
Rhyme 0:7d913e68a6d7 346
Rhyme 0:7d913e68a6d7 347 /* Ambient ADC Gains */
Rhyme 0:7d913e68a6d7 348 uint8_t MAX44008::getTRIM_GAIN_CLEAR(void)
Rhyme 0:7d913e68a6d7 349 {
Rhyme 0:7d913e68a6d7 350 uint8_t value ;
Rhyme 0:7d913e68a6d7 351 readRegs(REG_TRIM_GAIN_CLR, &value, 1) ;
Rhyme 0:7d913e68a6d7 352 return(value) ;
Rhyme 0:7d913e68a6d7 353 }
Rhyme 0:7d913e68a6d7 354
Rhyme 0:7d913e68a6d7 355 void MAX44008::setTRIM_GAIN_CLEAR(uint8_t newValue)
Rhyme 0:7d913e68a6d7 356 {
Rhyme 0:7d913e68a6d7 357 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 358 res[0] = REG_TRIM_GAIN_CLR ;
Rhyme 0:7d913e68a6d7 359 res[1] = newValue ;
Rhyme 0:7d913e68a6d7 360 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 361 }
Rhyme 0:7d913e68a6d7 362
Rhyme 0:7d913e68a6d7 363 uint8_t MAX44008::getTRIM_GAIN_RED(void)
Rhyme 0:7d913e68a6d7 364 {
Rhyme 0:7d913e68a6d7 365 uint8_t value ;
Rhyme 0:7d913e68a6d7 366 readRegs(REG_TRIM_GAIN_RED, &value, 1) ;
Rhyme 0:7d913e68a6d7 367 return(value) ;
Rhyme 0:7d913e68a6d7 368 }
Rhyme 0:7d913e68a6d7 369
Rhyme 0:7d913e68a6d7 370 void MAX44008::setTRIM_GAIN_RED(uint8_t newValue)
Rhyme 0:7d913e68a6d7 371 {
Rhyme 0:7d913e68a6d7 372 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 373 res[0] = REG_TRIM_GAIN_RED ;
Rhyme 0:7d913e68a6d7 374 res[1] = newValue ;
Rhyme 0:7d913e68a6d7 375 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 376 }
Rhyme 0:7d913e68a6d7 377
Rhyme 0:7d913e68a6d7 378 uint8_t MAX44008::getTRIM_GAIN_GREEN(void)
Rhyme 0:7d913e68a6d7 379 {
Rhyme 0:7d913e68a6d7 380 uint8_t value ;
Rhyme 0:7d913e68a6d7 381 readRegs(REG_TRIM_GAIN_GRN, &value, 1) ;
Rhyme 0:7d913e68a6d7 382 return(value) ;
Rhyme 0:7d913e68a6d7 383 }
Rhyme 0:7d913e68a6d7 384
Rhyme 0:7d913e68a6d7 385 void MAX44008::setTRIM_GAIN_GREEN(uint8_t newValue)
Rhyme 0:7d913e68a6d7 386 {
Rhyme 0:7d913e68a6d7 387 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 388 res[0] = REG_TRIM_GAIN_GRN ;
Rhyme 0:7d913e68a6d7 389 res[1] = newValue ;
Rhyme 0:7d913e68a6d7 390 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 391 }
Rhyme 0:7d913e68a6d7 392
Rhyme 0:7d913e68a6d7 393 uint8_t MAX44008::getTRIM_GAIN_BLUE(void)
Rhyme 0:7d913e68a6d7 394 {
Rhyme 0:7d913e68a6d7 395 uint8_t value ;
Rhyme 0:7d913e68a6d7 396 readRegs(REG_TRIM_GAIN_BLU, &value, 1) ;
Rhyme 0:7d913e68a6d7 397 return(value) ;
Rhyme 0:7d913e68a6d7 398 }
Rhyme 0:7d913e68a6d7 399
Rhyme 0:7d913e68a6d7 400 void MAX44008::setTRIM_GAIN_BLUE(uint8_t newValue)
Rhyme 0:7d913e68a6d7 401 {
Rhyme 0:7d913e68a6d7 402 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 403 res[0] = REG_TRIM_GAIN_BLU ;
Rhyme 0:7d913e68a6d7 404 res[1] = newValue ;
Rhyme 0:7d913e68a6d7 405 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 406 }
Rhyme 0:7d913e68a6d7 407
Rhyme 0:7d913e68a6d7 408 uint8_t MAX44008::getTRIM_GAIN_IR(void)
Rhyme 0:7d913e68a6d7 409 {
Rhyme 0:7d913e68a6d7 410 uint8_t value ;
Rhyme 0:7d913e68a6d7 411 readRegs(REG_TRIM_GAIN_IR, &value, 1) ;
Rhyme 0:7d913e68a6d7 412 return(value) ;
Rhyme 0:7d913e68a6d7 413 }
Rhyme 0:7d913e68a6d7 414
Rhyme 0:7d913e68a6d7 415 void MAX44008::setTRIM_GAIN_IR(uint8_t newValue)
Rhyme 0:7d913e68a6d7 416 {
Rhyme 0:7d913e68a6d7 417 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 418 res[0] = REG_TRIM_GAIN_IR ;
Rhyme 0:7d913e68a6d7 419 res[1] = newValue ;
Rhyme 0:7d913e68a6d7 420 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 421 }
Rhyme 0:7d913e68a6d7 422
Rhyme 0:7d913e68a6d7 423 void MAX44008::enableTRIM(void)
Rhyme 0:7d913e68a6d7 424 {
Rhyme 0:7d913e68a6d7 425 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 426 res[0] = REG_AMB_CONFIG ;
Rhyme 0:7d913e68a6d7 427 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 428 res[1] |= 0x80 ; /* BIT7 = TRIM */
Rhyme 0:7d913e68a6d7 429 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 430 }
Rhyme 0:7d913e68a6d7 431
Rhyme 0:7d913e68a6d7 432 void MAX44008::disableTRIM(void)
Rhyme 0:7d913e68a6d7 433 {
Rhyme 0:7d913e68a6d7 434 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 435 res[0] = REG_AMB_CONFIG ;
Rhyme 0:7d913e68a6d7 436 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 437 res[1] &= (uint8_t)(0x7F) ; /* BIT7 = TRIM */
Rhyme 0:7d913e68a6d7 438 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 439 }
Rhyme 0:7d913e68a6d7 440
Rhyme 0:7d913e68a6d7 441 void MAX44008::enableCOMP(void)
Rhyme 0:7d913e68a6d7 442 {
Rhyme 0:7d913e68a6d7 443 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 444 res[0] = REG_AMB_CONFIG ;
Rhyme 0:7d913e68a6d7 445 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 446 res[1] |= 0x40 ; /* BIT6 = COMPEN */
Rhyme 0:7d913e68a6d7 447 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 448 }
Rhyme 0:7d913e68a6d7 449
Rhyme 0:7d913e68a6d7 450 void MAX44008::disableCOMP(void)
Rhyme 0:7d913e68a6d7 451 {
Rhyme 0:7d913e68a6d7 452 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 453 res[0] = REG_AMB_CONFIG ;
Rhyme 0:7d913e68a6d7 454 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 455 res[1] &= (uint8_t)(0xBF) ; /* BIT6 = COMPEN */
Rhyme 0:7d913e68a6d7 456 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 457 }
Rhyme 0:7d913e68a6d7 458
Rhyme 0:7d913e68a6d7 459 void MAX44008::enableTEMP(void)
Rhyme 0:7d913e68a6d7 460 {
Rhyme 0:7d913e68a6d7 461 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 462 res[0] = REG_AMB_CONFIG ;
Rhyme 0:7d913e68a6d7 463 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 464 res[1] |= 0x20 ; /* BIT5 = TEMPEN */
Rhyme 0:7d913e68a6d7 465 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 466 }
Rhyme 0:7d913e68a6d7 467
Rhyme 0:7d913e68a6d7 468 void MAX44008::disableTEMP(void)
Rhyme 0:7d913e68a6d7 469 {
Rhyme 0:7d913e68a6d7 470 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 471 res[0] = REG_AMB_CONFIG ;
Rhyme 0:7d913e68a6d7 472 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 473 res[1] &= (uint8_t)(0xDF) ; /* BIT5 = TEMPEN */
Rhyme 0:7d913e68a6d7 474 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 475 }
Rhyme 0:7d913e68a6d7 476
Rhyme 0:7d913e68a6d7 477 void MAX44008::enableAMBINT(void)
Rhyme 0:7d913e68a6d7 478 {
Rhyme 0:7d913e68a6d7 479 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 480 res[0] = REG_MAIN_CONFIG ;
Rhyme 0:7d913e68a6d7 481 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 482 res[1] |= 0x01 ; /* BIT0 = AMBINTE */
Rhyme 0:7d913e68a6d7 483 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 484 }
Rhyme 0:7d913e68a6d7 485
Rhyme 0:7d913e68a6d7 486 void MAX44008::disableAMBINT(void)
Rhyme 0:7d913e68a6d7 487 {
Rhyme 0:7d913e68a6d7 488 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 489 res[0] = REG_MAIN_CONFIG ;
Rhyme 0:7d913e68a6d7 490 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 491 res[1] &= (uint8_t)(0xFE) ; /* BIT0 = AMBINTE */
Rhyme 0:7d913e68a6d7 492 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 493 }
Rhyme 0:7d913e68a6d7 494
Rhyme 0:7d913e68a6d7 495 void MAX44008::selectAMBINT(uint8_t newChannel)
Rhyme 0:7d913e68a6d7 496 {
Rhyme 0:7d913e68a6d7 497 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 498 res[0] = REG_MAIN_CONFIG ;
Rhyme 0:7d913e68a6d7 499 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 500 res[1] &= 0xF3 ; /* clear AMBSEL[1:0] */
Rhyme 0:7d913e68a6d7 501 res[1] |= ((newChannel & 0x03) << 2) ;
Rhyme 0:7d913e68a6d7 502 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 503 }
Rhyme 0:7d913e68a6d7 504 void MAX44008::setMode(uint8_t newMode)
Rhyme 0:7d913e68a6d7 505 {
Rhyme 0:7d913e68a6d7 506 uint8_t res[2] ;
Rhyme 0:7d913e68a6d7 507 res[0] = REG_MAIN_CONFIG ;
Rhyme 0:7d913e68a6d7 508 readRegs(res[0], &res[1], 1) ;
Rhyme 0:7d913e68a6d7 509 res[1] &= 0xCF ; /* clear MODE[1:0] */
Rhyme 0:7d913e68a6d7 510 res[1] |= ((newMode & 0x03) << 4) ;
Rhyme 0:7d913e68a6d7 511 writeRegs(res, 2) ;
Rhyme 0:7d913e68a6d7 512 }