Kart/sensors/VCNL4000
|
Ambient light sensor
The VCNL4000 is a fully integrated proximity and ambient light digital 16 bit resolution sensor in a miniature lead less package (LLP) for surface mounting. It communicates via an I2C bus.
I2C communication
The chip I2C address is 13
h.
The address is fixed so there is no direct way to connect several distance sensors on the same I2C bus.
For reading out 2 (or more) subsequent registers like the result registers, it is not necessary to address each of the registers separately. After one read command the internal register counter is increased automatically and any subsequent read command is accessing the next register.
The maximal SCL
clock rate is 3.4 MHz.
Registers
The registers are:
Address | access | register |
---|---|---|
0x80 | R/W | command |
0x81 | R | product and revision id |
0x82 | <unsused> | |
0x83 | R/W | LED current |
0x84 | R/W | acquisition parameters |
0x85 | R | ambient light H |
0x86 | R | ambient light L |
0x87 | R | proximity H |
0x88 | R | proximity L |
0x89 | R/W | acquisition frequency |
0x8A | R/W | acquisition timings |
System setup
The system setup is done by writing to the different control registers:
[start] 0x26 0x83 0x14 0x08 [stop] # LED current=200mA, no auto-conversion, auto-offset-compensation, averaging 128 measures. [start] 0x26 0x89 0x03 0x81 [stop] # Distance measure frequency is 390.625 kHz, delay time is 4 and dead time 1.
26
h is the chip's address 13
h followed by a 0
b for write access.
It is followed by the register address and by the data bytes.
Commands with multiple data bytes allow to write data into sequential registers.
Reading data form the sensor
Read ambient light
Read ambient light (data values in hex):
[start] 26 80 10 [stop] # Start measure. [start] 26 80 [start] 27 FF [stop] # Do this as long as (received_value and 40h) is 0. [start] 26 85 [start] 27 FF FF [stop] # Read the data from the two registers.
26
h is the chip's address 13
h followed by a 0
b for write access.
85
h is the base register address for the ambient light.
27
h is the chip's address 13
h followed by a 1
b for read access.
The sensor will pull down the SDA
line during the FF
h bytes to answer to the request.
When reading multiple bytes, the master has to pull ACK
low between the FF
h words.
Read distance
Read distance (data values in hex):
[start] 26 80 08 [stop] # Start measure. [start] 26 80 [start] 27 FF [stop] # Do this as long as (received_value and 20h) is 0. [start] 26 87 [start] 27 FF FF [stop] # Read the data from the two registers.
The command is the same as for ambient light, only the base register address changes.
Note: the returned value corresponds to something like the inverse of the distance (datasheet, figure 3, page 3).
Long distances give something like 0600
h,
5 cm gives something like 0800
h,
and close to zero can reach more than 8000
h.
Read ambient light and distance
Read both ambient light and distance (data values in hex):
[start] 26 80 18 [stop] # Start measure. [start] 26 80 [start] 27 FF [stop] # Do this as long as (received_value and 60h) is not 3h. [start] 26 87 [start] 27 FF FF FF FF [stop] # Read the data from the two registers.
Kart I/O pins
The sensor connectors are located in the I/O board's side row.
The sensor cable is to be connected as:
- orange: 3.3 V power supply
- yellow: SDA
- green: SCL
- blue: ground