VEML6030, High Accuracy Ambient Light Sensor with I2C Interface

Dependents:   testVEML6030

Committer:
Rhyme
Date:
Sat Apr 29 07:56:03 2017 +0000
Revision:
1:00f62b381f9e
Parent:
0:852cb01d2317
Wrong Endian fixed

Who changed what in which revision?

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