VEML7700 High Accuracy Ambient Light Sensor with I2C Interface
Dependents: testVEML7700 ROS_VEML7700_test ROSSerial_MultipleSensors
VEML7700.cpp@0:6dabb0ddf3d9, 2017-03-30 (annotated)
- Committer:
- Rhyme
- Date:
- Thu Mar 30 04:21:08 2017 +0000
- Revision:
- 0:6dabb0ddf3d9
- Child:
- 1:b64609747bc3
First commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:6dabb0ddf3d9 | 1 | #include "mbed.h" |
Rhyme | 0:6dabb0ddf3d9 | 2 | #include "VEML7700.h" |
Rhyme | 0:6dabb0ddf3d9 | 3 | |
Rhyme | 0:6dabb0ddf3d9 | 4 | /* COMMAND REGISTER FORMAT */ |
Rhyme | 0:6dabb0ddf3d9 | 5 | #define CMD_ALS_CONF 0x00 |
Rhyme | 0:6dabb0ddf3d9 | 6 | #define CMD_ALS_WH 0x01 |
Rhyme | 0:6dabb0ddf3d9 | 7 | #define CMD_ALS_WL 0x02 |
Rhyme | 0:6dabb0ddf3d9 | 8 | #define CMD_PWR_SAVINGS 0x03 |
Rhyme | 0:6dabb0ddf3d9 | 9 | #define CMD_ALS 0x04 |
Rhyme | 0:6dabb0ddf3d9 | 10 | #define CMD_WHITE 0x05 |
Rhyme | 0:6dabb0ddf3d9 | 11 | #define CMD_ASL_INT 0x06 |
Rhyme | 0:6dabb0ddf3d9 | 12 | |
Rhyme | 0:6dabb0ddf3d9 | 13 | /* Configuration Register #0 (REG_ALS_CONF) |
Rhyme | 0:6dabb0ddf3d9 | 14 | bit[15:13] (reserved) |
Rhyme | 0:6dabb0ddf3d9 | 15 | Set 000b |
Rhyme | 0:6dabb0ddf3d9 | 16 | |
Rhyme | 0:6dabb0ddf3d9 | 17 | bit[12:11] ALS_GAIN Gain Selection |
Rhyme | 0:6dabb0ddf3d9 | 18 | 00 = ALS gain x 1 |
Rhyme | 0:6dabb0ddf3d9 | 19 | 01 = ALS gain x 2 |
Rhyme | 0:6dabb0ddf3d9 | 20 | 10 = ALS gain x (1/8) |
Rhyme | 0:6dabb0ddf3d9 | 21 | 11 = ALS gain x (1/4) |
Rhyme | 0:6dabb0ddf3d9 | 22 | |
Rhyme | 0:6dabb0ddf3d9 | 23 | bit[10] (reserved) |
Rhyme | 0:6dabb0ddf3d9 | 24 | set 00b |
Rhyme | 0:6dabb0ddf3d9 | 25 | |
Rhyme | 0:6dabb0ddf3d9 | 26 | bit[9:6] ALS_IT ALS integration time settings |
Rhyme | 0:6dabb0ddf3d9 | 27 | 1100 = 2 5ms |
Rhyme | 0:6dabb0ddf3d9 | 28 | 1000 = 50 ms |
Rhyme | 0:6dabb0ddf3d9 | 29 | 0000 = 100 ms |
Rhyme | 0:6dabb0ddf3d9 | 30 | 0001 = 200 ms |
Rhyme | 0:6dabb0ddf3d9 | 31 | 0010 = 400 ms |
Rhyme | 0:6dabb0ddf3d9 | 32 | 0011 = 800 ms |
Rhyme | 0:6dabb0ddf3d9 | 33 | |
Rhyme | 0:6dabb0ddf3d9 | 34 | bit[5:4] ALS_PERS ALS Persistence protect number setting |
Rhyme | 0:6dabb0ddf3d9 | 35 | 00 = 1 |
Rhyme | 0:6dabb0ddf3d9 | 36 | 01 = 2 |
Rhyme | 0:6dabb0ddf3d9 | 37 | 10 = 4 |
Rhyme | 0:6dabb0ddf3d9 | 38 | 11 = 8 |
Rhyme | 0:6dabb0ddf3d9 | 39 | |
Rhyme | 0:6dabb0ddf3d9 | 40 | bit[3:2] (reserved) |
Rhyme | 0:6dabb0ddf3d9 | 41 | Set 00b |
Rhyme | 0:6dabb0ddf3d9 | 42 | |
Rhyme | 0:6dabb0ddf3d9 | 43 | bit[1] ALS_INT_EN ALS interrupt enable setting |
Rhyme | 0:6dabb0ddf3d9 | 44 | 0 = ALS INT disable |
Rhyme | 0:6dabb0ddf3d9 | 45 | 1 = ALS INT enable |
Rhyme | 0:6dabb0ddf3d9 | 46 | |
Rhyme | 0:6dabb0ddf3d9 | 47 | bit[0] ALS_SD ALS shut down setting |
Rhyme | 0:6dabb0ddf3d9 | 48 | 0 = ALS power on |
Rhyme | 0:6dabb0ddf3d9 | 49 | 1 = ALS shut down |
Rhyme | 0:6dabb0ddf3d9 | 50 | */ |
Rhyme | 0:6dabb0ddf3d9 | 51 | |
Rhyme | 0:6dabb0ddf3d9 | 52 | /* High Threshold Windows Setting #1 |
Rhyme | 0:6dabb0ddf3d9 | 53 | bit[15:8] ALS high threshold window setting (15:8 MSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 54 | bit[7:0] ALS high threshold window setting (7:0 LSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 55 | */ |
Rhyme | 0:6dabb0ddf3d9 | 56 | |
Rhyme | 0:6dabb0ddf3d9 | 57 | /* Low Threshold WIndows Setting #2 |
Rhyme | 0:6dabb0ddf3d9 | 58 | bit[15:8] ALS Low threshold window setting (15:8 MSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 59 | bit[7:0] ALS Low threshold window setting (7:0 LSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 60 | */ |
Rhyme | 0:6dabb0ddf3d9 | 61 | |
Rhyme | 0:6dabb0ddf3d9 | 62 | /* Power Saving Mode |
Rhyme | 0:6dabb0ddf3d9 | 63 | bit[15:3] (reserved) |
Rhyme | 0:6dabb0ddf3d9 | 64 | bit[2:1] PSM Power saving mode; see table "Refresh time" |
Rhyme | 0:6dabb0ddf3d9 | 65 | */ |
Rhyme | 0:6dabb0ddf3d9 | 66 | |
Rhyme | 0:6dabb0ddf3d9 | 67 | /* ALS High Resolution Output data #4 |
Rhyme | 0:6dabb0ddf3d9 | 68 | bit[15:8] ALS high resolution output data (15:8 MSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 69 | bit[7:0] ALS high resolution output data (7:0 LSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 70 | */ |
Rhyme | 0:6dabb0ddf3d9 | 71 | |
Rhyme | 0:6dabb0ddf3d9 | 72 | /* WHITE Channel Output data #5 |
Rhyme | 0:6dabb0ddf3d9 | 73 | bit[15:8] WHITE output data (15:8 MSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 74 | bit[7:0] WHITE output data (7:0 MSB 8 bits of whole 16 bits) |
Rhyme | 0:6dabb0ddf3d9 | 75 | */ |
Rhyme | 0:6dabb0ddf3d9 | 76 | |
Rhyme | 0:6dabb0ddf3d9 | 77 | /* Interrupt status #6 |
Rhyme | 0:6dabb0ddf3d9 | 78 | bit[15] int_th_low Read bit. Indicate a low threshold exceed. |
Rhyme | 0:6dabb0ddf3d9 | 79 | bit[14] int_th_high Read bit. Indicate a high threshold exceed. |
Rhyme | 0:6dabb0ddf3d9 | 80 | bit[13:0] (reserved) |
Rhyme | 0:6dabb0ddf3d9 | 81 | */ |
Rhyme | 0:6dabb0ddf3d9 | 82 | |
Rhyme | 0:6dabb0ddf3d9 | 83 | void VEML7700::setALSConf(uint16_t conf) |
Rhyme | 0:6dabb0ddf3d9 | 84 | { |
Rhyme | 0:6dabb0ddf3d9 | 85 | uint8_t data[3] ; |
Rhyme | 0:6dabb0ddf3d9 | 86 | data[0] = CMD_ALS_CONF ; |
Rhyme | 0:6dabb0ddf3d9 | 87 | data[1] = (conf >> 8) & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 88 | data[2] = conf & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 89 | writeRegs(data, 3) ; |
Rhyme | 0:6dabb0ddf3d9 | 90 | } |
Rhyme | 0:6dabb0ddf3d9 | 91 | |
Rhyme | 0:6dabb0ddf3d9 | 92 | void VEML7700::setALS_WH(uint16_t wh) |
Rhyme | 0:6dabb0ddf3d9 | 93 | { |
Rhyme | 0:6dabb0ddf3d9 | 94 | uint8_t data[3] ; |
Rhyme | 0:6dabb0ddf3d9 | 95 | data[0] = CMD_ALS_WH ; |
Rhyme | 0:6dabb0ddf3d9 | 96 | data[1] = (wh >> 8) & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 97 | data[2] = wh & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 98 | writeRegs(data, 3) ; |
Rhyme | 0:6dabb0ddf3d9 | 99 | } |
Rhyme | 0:6dabb0ddf3d9 | 100 | |
Rhyme | 0:6dabb0ddf3d9 | 101 | void VEML7700::setALS_WL(uint16_t wl) |
Rhyme | 0:6dabb0ddf3d9 | 102 | { |
Rhyme | 0:6dabb0ddf3d9 | 103 | uint8_t data[3] ; |
Rhyme | 0:6dabb0ddf3d9 | 104 | data[0] = CMD_ALS_WL ; |
Rhyme | 0:6dabb0ddf3d9 | 105 | data[1] = (wl >> 8) & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 106 | data[2] = wl & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 107 | writeRegs(data, 3) ; |
Rhyme | 0:6dabb0ddf3d9 | 108 | } |
Rhyme | 0:6dabb0ddf3d9 | 109 | |
Rhyme | 0:6dabb0ddf3d9 | 110 | void VEML7700::setPowerSaving(uint16_t ps) |
Rhyme | 0:6dabb0ddf3d9 | 111 | { |
Rhyme | 0:6dabb0ddf3d9 | 112 | uint8_t data[3] ; |
Rhyme | 0:6dabb0ddf3d9 | 113 | data[0] = CMD_PWR_SAVINGS ; |
Rhyme | 0:6dabb0ddf3d9 | 114 | data[1] = (ps >> 8) & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 115 | data[2] = ps & 0xFF ; |
Rhyme | 0:6dabb0ddf3d9 | 116 | writeRegs(data, 3) ; |
Rhyme | 0:6dabb0ddf3d9 | 117 | } |
Rhyme | 0:6dabb0ddf3d9 | 118 | |
Rhyme | 0:6dabb0ddf3d9 | 119 | uint16_t VEML7700::getALS(void) |
Rhyme | 0:6dabb0ddf3d9 | 120 | { |
Rhyme | 0:6dabb0ddf3d9 | 121 | uint16_t als = 0 ; |
Rhyme | 0:6dabb0ddf3d9 | 122 | uint8_t cmd = CMD_ALS ; |
Rhyme | 0:6dabb0ddf3d9 | 123 | uint8_t data[2] ; |
Rhyme | 0:6dabb0ddf3d9 | 124 | readRegs(cmd, data, 2) ; |
Rhyme | 0:6dabb0ddf3d9 | 125 | als = (data[0] << 8) | data[1] ; |
Rhyme | 0:6dabb0ddf3d9 | 126 | return( als ) ; |
Rhyme | 0:6dabb0ddf3d9 | 127 | } |
Rhyme | 0:6dabb0ddf3d9 | 128 | |
Rhyme | 0:6dabb0ddf3d9 | 129 | uint16_t VEML7700::getWHITE(void) |
Rhyme | 0:6dabb0ddf3d9 | 130 | { |
Rhyme | 0:6dabb0ddf3d9 | 131 | uint16_t white = 0 ; |
Rhyme | 0:6dabb0ddf3d9 | 132 | uint8_t cmd = CMD_WHITE ; |
Rhyme | 0:6dabb0ddf3d9 | 133 | uint8_t data[2] ; |
Rhyme | 0:6dabb0ddf3d9 | 134 | readRegs(cmd, data, 2) ; |
Rhyme | 0:6dabb0ddf3d9 | 135 | white = (data[0] << 8) | data[1] ; |
Rhyme | 0:6dabb0ddf3d9 | 136 | return( white ) ; |
Rhyme | 0:6dabb0ddf3d9 | 137 | } |
Rhyme | 0:6dabb0ddf3d9 | 138 | |
Rhyme | 0:6dabb0ddf3d9 | 139 | uint16_t VEML7700::getALS_INT(void) |
Rhyme | 0:6dabb0ddf3d9 | 140 | { |
Rhyme | 0:6dabb0ddf3d9 | 141 | uint16_t als_int = 0 ; |
Rhyme | 0:6dabb0ddf3d9 | 142 | uint8_t cmd = CMD_ASL_INT ; |
Rhyme | 0:6dabb0ddf3d9 | 143 | uint8_t data[2] ; |
Rhyme | 0:6dabb0ddf3d9 | 144 | readRegs(cmd, data, 2) ; |
Rhyme | 0:6dabb0ddf3d9 | 145 | als_int = (data[0] << 8) | data[1] ; |
Rhyme | 0:6dabb0ddf3d9 | 146 | return( als_int ) ; |
Rhyme | 0:6dabb0ddf3d9 | 147 | } |
Rhyme | 0:6dabb0ddf3d9 | 148 | |
Rhyme | 0:6dabb0ddf3d9 | 149 | VEML7700::VEML7700(PinName sda, PinName scl, int addr) : |
Rhyme | 0:6dabb0ddf3d9 | 150 | m_i2c(sda, scl), m_addr(addr<<1) |
Rhyme | 0:6dabb0ddf3d9 | 151 | { |
Rhyme | 0:6dabb0ddf3d9 | 152 | // activate the peripheral |
Rhyme | 0:6dabb0ddf3d9 | 153 | } |
Rhyme | 0:6dabb0ddf3d9 | 154 | |
Rhyme | 0:6dabb0ddf3d9 | 155 | |
Rhyme | 0:6dabb0ddf3d9 | 156 | VEML7700::~VEML7700() |
Rhyme | 0:6dabb0ddf3d9 | 157 | { |
Rhyme | 0:6dabb0ddf3d9 | 158 | } |
Rhyme | 0:6dabb0ddf3d9 | 159 | |
Rhyme | 0:6dabb0ddf3d9 | 160 | void VEML7700::readRegs(int addr, uint8_t * data, int len) { |
Rhyme | 0:6dabb0ddf3d9 | 161 | char t[1] = {addr}; |
Rhyme | 0:6dabb0ddf3d9 | 162 | m_i2c.write(m_addr, t, 1, true); |
Rhyme | 0:6dabb0ddf3d9 | 163 | m_i2c.read(m_addr, (char *)data, len); |
Rhyme | 0:6dabb0ddf3d9 | 164 | } |
Rhyme | 0:6dabb0ddf3d9 | 165 | |
Rhyme | 0:6dabb0ddf3d9 | 166 | void VEML7700::writeRegs(uint8_t * data, int len) { |
Rhyme | 0:6dabb0ddf3d9 | 167 | m_i2c.write(m_addr, (char *)data, len); |
Rhyme | 0:6dabb0ddf3d9 | 168 | } |