There are ~30 Knowledge Base Articles (KBAs) in the Sensors section of the forum covering multiple sensors products. Sometimes, it's difficult to search for the information that you're interested in, especially when you don't know if that exists or not.
To simplify this task we have created a Sensors Knowledge Base Article List which has all the KBAs divided into sub-topics. This list only contains KBAs which are meaningful today, so you won't find anything related to legacy products. This is to avoid confusing our customers into reading material which is no longer applicable.
My application is: detect day versus night, indoors, in a room with south facing windows. I am exploring the Si1133 to measure UVA. I can put the detector within 10 feet of the windows, high and facing down so the detector gets reflected UV, and never gets direct sunlight, and gets only reflected artificial lights from typical room lighting of about 400 lux white, fluorescent light. My understanding is the window glass will transmit about 50% of UVA, that the sky will scatter significant UVA, that night sky has no UVA, and that artificial lights produce negligible UVA.
Might that work? Do you have any suggestions re diffuser, physical filters, parameters of the Si1133, and which set of diodes to use? My plan is to read only the UV diode.
I want to estimate sun time by detecting sundown and sunset, despite noise from artificial lights. I don't need accuracy. I plan to take samples over many days. I understand that the weather and season will have an effect.
I am using the chip "EFR32MG1P132F256GM48" in a customized pcb and "EmberZNet 6.7.6.0 GA SoC".
I need to read the "Si7021" sensor through I2c communication and send the information via ZigBee. However, I couldn't find any example/document showing how to enable and test the I2c using an "AppBuilder project".
I enabled the plugins "Temperature Si7021", "Relative Humidity Si7021" and "I2C Driver". In Hardware Configurator (.hwconf file), I configured it as follows:
However, when sending the reset command to the temperature sensor through the plugin, debugging I noticed that the callback: "halI2cWriteBytes(SI_7021_ADDR, & resetMsg, SEND_COMMAND_SIZE)" is returning "0xFF" (I2C_DRIVER_ERR_UNKOWN).
I don't know what may be happening to have this behavior. Does anyone have any assumptions or examples to suggest for me?
Considerations:
As I am using my own pcb, I do not need to use the "Sensor enable pin" in the "I2CSENSOR" on Hardware Configurator.
I suspect that the problem may be with my Bootloader. If someone finds this option plausible, I can send the settings I used to generate it.
I am working with a niche application where I create my own field and try to measure when objects are measuring through it, rather than the field itself moving. In doing so and the distance my object is away from the field, when graphing raw data I can physically see the change in measurement when the device enters and exists the field, though due to general background field, temperatures and measurement errors at roughly 2.8V (battery powered application), the single shot measurements done in sleep mode don't yield consistent results. Is there any of the ICs in the series that allow for setting the burst/averaging bits in the register by the user, or even any pre-programmed variants that have this value > 0.
From what I can tell in the datasheet, this value is set in factory in the OTP (One-Time-Program) bits and cannot be adjusted. Though it goes further to say that if it WERE set, it would do all the averaging required, though no parts currently exist with this set, does this mean I would need to do a customer order with a minimum supply quantity from Si Sales team?
Looking at the datasheet section 4.1.3 states that when Userstore bit is set, that only 4 registers are actually reloaded from user area, the rest are loaded from OTP?
I guess my question really is, can I set the IC to read more than 1 sample at a time, average it, make a decision on the output pin and go back to sleep automatically and continuously without an external MCU reconfiguring the IC every sleep cycle?
The amount of power required to run in IDLE would kill the battery too quick.
1, SI1151 have an interrupte register IRQ_ENABLE with the address 0X0F,but I didn't find the detail information to tell you how to config it.
2,how to increase the RPOX‘s distance ? when I use the demo board ,I can detect only 25cm with this configurations
3,about the funtion of the PROX. I saw if we need use the funtion of the PROX,we need to measure twice(LED ON/OFF), so we need to calculate the value between the two detections? or I can use the Interrupt to achieve this function?how to config it?
Can you explain the notation in the datasheet in the "operation" column of the ADCMUX row of the table for the ADCCONFIGx parameter? The notation uses for example "D + 10" for the UV "optical function." But the term "D" has no antecedent anywhere in the datasheet, as far as I know.
I assume "D" refers to a separate diode for UV.
Does the "+10" mean that the mcu on the chip adds ten to some raw result?
Also, what is the interpretation of a negative result? That the dark current is less than the light current (where you are measuring the diode in two ways, dark current and light current, and taking the difference) ?
Related to my other post about detecting daylight using UV indoors.
From the knowledge base articles, there is an example for calculating the power draw.
There seems to be a discrepancy with regards to the LED power calc in AN950 (LED current *48.8us * gain), as opposed to knowledgebase (LED current *24.4us*gain).
The knowledgebase seems correct based on the the standard 24.4uSec LED period. (and knowledgebase example assumes HW_GAIN = 0).
The si1153 sensor will perform 2 back-to-back measurements, one with the LED on and the other with the LED off. Therefore, if we assume integration time is set to default and LED current is set to maximum 354mA, the total power consumption will be:
6.4 LED Power
On each proximity measurement, the LED current is on for 48.8 μs times the gain. Thus, for each proximity channel, the LED duty cycle
is:
DC LED = 48.8μs × 2HW_GAIN
tMEASRATE
From the documentation, I see that I can specify the target "bank" (LED1_A/LED2_A/LED3_A or LED1_B/LED2_B/LED3_B) and "trim" (nominal, +9%, or +10%) in the MEASCONFIGx parameters for each channel, but I haven't been able to locate any documentation about how the "bank" parameters that are being pointed to are configured to specify a current value.
There should be "30 current settings between 5.6mA and 360mA", but the "bank" parameters aren't defined, and every piece of example code I've come across is setting all the "bank" parameters to 0x3F.
I am developing a product that uses Si7051 sensors. I am identifying the devices using the Electronic Serial Number described in Section 5.3 of the datasheet. I am able to retrieve the 8 bytes as described, but the serial numbers of some of my devices are not unique.
A typical value I am getting is 013126D4 33FF33FF. The last 4 bytes are always the same, which I suppose is expected. However, I would have expected the first 4 bytes to be different between devices. Two devices I tested just now both have the first four bytes as 01311542.
Do these sensors have a unique ID at all? If not then my job is made more difficult.
Is there a possibility I have some counterfeit sensors? I have run across that before with sensors from another manufacturer.
I'm testing the ADC overflow conditions in the si1133 and I'm getting a weird behavior when changing the Channel setup right after an overflow condition. Here's the setup:
Configured three channels (0, 1 and 2) with the sensors LARGE_IR, LARGE_WHITE and UV respectively, sw_gain=N (let's say initially 1), hw_gain=0, decimation normal, 24-bit output.
Issue a FORCE command, wait until the command finishes, then read the 24-bit values back.
Repeat the last step in a loop.
Here's what happens:
If all sensor values are below the limit, all is fine. I eventually get the CMMND_CTR value incremented and can send another FORCE command. Read values make sense and change accordingly when shining a light at the sensor.
If one of the sensor hits the overflow limit (0x7fffff), the RESPONSE0 will have the CMD_ERR bit set and CMMND_CTR will be 0x2 (Saturation of the ADC or overflow accumulation) which is expected. All the other channels read back reasonable values even if one of the sensors is saturated.
To reset this CMD_ERR condition I then send RESET_CMD_CTR which executes normally. If I don't change anything else the next FORCE command continues reading without problems (showing overflow for the channels that are overflowed until I remove the light pointing at the sensor). So far, all is good.
However, if after this overflow condition I send RESET_CMD_CTR, wait for the cmd to finish, and then reconfigure all channels to use sw_gain=0 instead of 1 then the sensor misbehaves:
The read values are off by one: the LARGE_WHITE sensor value would be in HOSTOUT3-5 normally, but after changing the config to sw_gain=0 and issuing a new FORCE command I see that the value that would make sense for LARGE_WHITE (about half of the previous) is now in HOSTOUT6-8; while the first two 24-bit channels are both 0x7fffff.
Moreover, if I continue repeating this process of changing the sw_gain, FORCE, RESET_CMD_CTR, the values keep shifting and after a few times the FORCE command fails with error 0x13 in RESPONSE0 ("Output buffer overflow"). My understanding is that a FORCE command should never fail with "Output buffer overflow" since there are only 6 channels max of 3 bytes output each (18 bytes) but 26 bytes of output. This is most obvious if after an overflow with sw_gain==1 you then change to sw_gain=2, then =3, then =4, since larger sw_gain will continue showing the overflow condition.
My suspicion without knowing how is the controller of this chip implemented, is that this is a bug in the chip in the error handling case: when there's an ADC overflow or SW_GAIN accumulation overflow the internal pointer to the output buffer (HOSTOUTx) is not reset when a PARAM_SET (0x82, 0x83 ....) command is send before the next FORCE; but it is reset when the next command is directly FORCE. To be clear:
FORCE, RESET_CMD_CTR, FORCE, RESET_CMD_CTR, .... works fine
FORCE, RESET_CMD_CTR, PARAM_SET ..., FORCE --> doesn't work, with 6 channels configured it fails with 0x13 on the second call.
HW_ID is 0x03
REV_ID is 0x10
Are you aware of this issue? Is there a workaround? I didn't find any errata on the topic. The only way I have found to work is to issue a RESET_SW but that requires to wait additional 25ms for the device to exit the "Initialization Mode" again and reconfigure everything. Arguably one should be able to change the sw_gain to a lower value when an accumulation error is detected.
I have an SI1147-M01-EB evaluation kit. I have downloaded the SI114x Programmers Toolkit, but I cannot get a connection to the hardware. The quick-start guide refers to Windows 7 only, so is it impossible to make this kit work on a Windows 10 machine?
In Device Manager, the device appears as an HID (Human Interface Device) rather than under Ports or USB - is this the problem?
If I launch SI1140 Control Panel, under devices I can see COM1 or TS004A572A. Pressing Connect with either device selected results in an error - unable to set baud rate for COM1 and unable to initialize SI114x. Function: InitSI114x for TS004A572A.
Also, when I launch the Firmware Updater, what should I choose from the evaluation board drop-down? Module?
Our first batch of boards work fine. Our driver uses the default I2C address of 0x53 (we have AD pulled high).
Our second batch do NOT work using address 0x53. They ONLY work if we use an I2C address of 0x51 which is very odd as this address is not documented anywhere. Again, we have AD tied high. BUT, if we pull AD low, we can successfully use address 0x52. Very odd.
We have verified clock speeds etc. As I said, we only have this issue on the second build. Also note that it fails on the all reads and writes. Also note that we do not attempt to change the I2C address parameter. Also note that we have confirmed that we have a clean powerup. We do not enable power to the sensor until our rail is solid.
I cannot find any eratta. Is there a known batch issue with the Si1153s? The part number is SI1151-AB09-GM
This has stumped us (I have over15 years commercial experience in I2C programming)
We use Si1152 for gesture detection and found that LED2 has no output. LED3 is floating on my schematic diagram. Is it caused by this? Or other reasons?
As shown in the figure, it is my schematic diagram and initialization code.
I am developing a ambient light sensor board with Si1133-AA00-GMR. The main controller is STM32F405. The status is as following:
1. All the direct accessed registers and indirected accessed parameters could be correctly write and read.
2. A function is designed to read all the parameters send to Si1133 and all values are matched with the original values.
3. The sensor is set to be working in autonomous mode and channel 1&2 is enabled.
4. The problem is that the interrupt pin of Si1133 is always at high level and no rising or falling edge is triggered after the measurement is start.
5. The interrupt pin is only found at low level for less than 100ns when software reset command is executed.
6. The interrupt status register is checked many times. The interrupt pin did't change at all whatever the status register is.
7. Two succeessive read command of the interrup status register is executed. It's found that the register value is not reset automatically as description in datasheet, after the first read command.
The initial code of the sensor as following:
Is there some problem about the interrupt setting issue?
Thanks a lot.
Update on Jan 20, 2020:
The sensor was configured to be working in forced mode. The sampling and data read back rate is decided by timer on controller board, while the value of IRQ_STATUS is ignored. The sensor is good working.
Hi! everyone i am building a project that involves measuring pressure on the road when a car stands over it. Now for testing i would be needing the same heavy duty sensor but some low level sensor which can provide the same functionality for say, hot wheels cars. I did some googling and came across the BMP sensor, which as far as my understanding tells me is just useless for measuring atmospheric pressure. I saw somewhere that maybe a pneumatic sensor would work best but i do not know which one would work with the arduino. So again, any sensor that the experienced people here can guide me regarding this?
Forum
Sensors Knowledge Base Article List
There are ~30 Knowledge Base Articles (KBAs) in the Sensors section of the forum covering multiple sensors products. Sometimes, it's difficult to search for the information that you're interested in, especially when you don't know if that exists or not.
To simplify this task we have created a Sensors Knowledge Base Article List which has all the KBAs divided into sub-topics. This list only contains KBAs which are meaningful today, so you won't find anything related to legacy products. This is to avoid confusing our customers into reading material which is no longer applicable.
Additionally please check out our Sensors training page -> https://www.silabs.com/support/training/sensors
Si1133 How to detect daylight indoors in south facing room while ignoring artificial lights, using UV.
My application is: detect day versus night, indoors, in a room with south facing windows. I am exploring the Si1133 to measure UVA. I can put the detector within 10 feet of the windows, high and facing down so the detector gets reflected UV, and never gets direct sunlight, and gets only reflected artificial lights from typical room lighting of about 400 lux white, fluorescent light. My understanding is the window glass will transmit about 50% of UVA, that the sky will scatter significant UVA, that night sky has no UVA, and that artificial lights produce negligible UVA.
Might that work? Do you have any suggestions re diffuser, physical filters, parameters of the Si1133, and which set of diodes to use? My plan is to read only the UV diode.
I want to estimate sun time by detecting sundown and sunset, despite noise from artificial lights. I don't need accuracy. I plan to take samples over many days. I understand that the weather and season will have an effect.
Using SI7021 with EFR32MG1xx on a custom board
I am using the chip "EFR32MG1P132F256GM48" in a customized pcb and "EmberZNet 6.7.6.0 GA SoC".
I need to read the "Si7021" sensor through I2c communication and send the information via ZigBee. However, I couldn't find any example/document showing how to enable and test the I2c using an "AppBuilder project".
I enabled the plugins "Temperature Si7021", "Relative Humidity Si7021" and "I2C Driver". In Hardware Configurator (.hwconf file), I configured it as follows:
However, when sending the reset command to the temperature sensor through the plugin, debugging I noticed that the callback: "halI2cWriteBytes(SI_7021_ADDR, & resetMsg, SEND_COMMAND_SIZE)" is returning "0xFF" (I2C_DRIVER_ERR_UNKOWN).
I don't know what may be happening to have this behavior. Does anyone have any assumptions or examples to suggest for me?
Considerations:
Si7210 Burst/Averaging in sleep
I am working with a niche application where I create my own field and try to measure when objects are measuring through it, rather than the field itself moving. In doing so and the distance my object is away from the field, when graphing raw data I can physically see the change in measurement when the device enters and exists the field, though due to general background field, temperatures and measurement errors at roughly 2.8V (battery powered application), the single shot measurements done in sleep mode don't yield consistent results. Is there any of the ICs in the series that allow for setting the burst/averaging bits in the register by the user, or even any pre-programmed variants that have this value > 0.
From what I can tell in the datasheet, this value is set in factory in the OTP (One-Time-Program) bits and cannot be adjusted. Though it goes further to say that if it WERE set, it would do all the averaging required, though no parts currently exist with this set, does this mean I would need to do a customer order with a minimum supply quantity from Si Sales team?
Looking at the datasheet section 4.1.3 states that when Userstore bit is set, that only 4 registers are actually reloaded from user area, the rest are loaded from OTP?
I guess my question really is, can I set the IC to read more than 1 sample at a time, average it, make a decision on the output pin and go back to sleep automatically and continuously without an external MCU reconfiguring the IC every sleep cycle?
The amount of power required to run in IDLE would kill the battery too quick.
How to increase the RPOX's distance with SI1151?
HI :
I have several problems with the use of Si1151。
1, SI1151 have an interrupte register IRQ_ENABLE with the address 0X0F,but I didn't find the detail information to tell you how to config it.
2,how to increase the RPOX‘s distance ? when I use the demo board ,I can detect only 25cm with this configurations
3,about the funtion of the PROX. I saw if we need use the funtion of the PROX,we need to measure twice(LED ON/OFF), so we need to calculate the value between the two detections? or I can use the Interrupt to achieve this function?how to config it?
si1133 diode selection parameter
Can you explain the notation in the datasheet in the "operation" column of the ADCMUX row of the table for the ADCCONFIGx parameter? The notation uses for example "D + 10" for the UV "optical function." But the term "D" has no antecedent anywhere in the datasheet, as far as I know.
I assume "D" refers to a separate diode for UV.
Does the "+10" mean that the mcu on the chip adds ten to some raw result?
Also, what is the interpretation of a negative result? That the dark current is less than the light current (where you are measuring the diode in two ways, dark current and light current, and taking the difference) ?
Related to my other post about detecting daylight using UV indoors.
Si1153: Clarification on LED power calculation
From the knowledge base articles, there is an example for calculating the power draw.
There seems to be a discrepancy with regards to the LED power calc in AN950 (LED current *48.8us * gain), as opposed to knowledgebase (LED current *24.4us*gain).
The knowledgebase seems correct based on the the standard 24.4uSec LED period. (and knowledgebase example assumes HW_GAIN = 0).
Can you confirm?
si1153 knowledgebase power calc example
with the appropriate snippet:
This references app note AN950
AN950
With this snippet:
Si115x Current Selection
From the documentation, I see that I can specify the target "bank" (LED1_A/LED2_A/LED3_A or LED1_B/LED2_B/LED3_B) and "trim" (nominal, +9%, or +10%) in the MEASCONFIGx parameters for each channel, but I haven't been able to locate any documentation about how the "bank" parameters that are being pointed to are configured to specify a current value.
There should be "30 current settings between 5.6mA and 360mA", but the "bank" parameters aren't defined, and every piece of example code I've come across is setting all the "bank" parameters to 0x3F.
Thanks!
Si7051 Electronic Serial Number
Hi All,
I am developing a product that uses Si7051 sensors. I am identifying the devices using the Electronic Serial Number described in Section 5.3 of the datasheet. I am able to retrieve the 8 bytes as described, but the serial numbers of some of my devices are not unique.
A typical value I am getting is 013126D4 33FF33FF. The last 4 bytes are always the same, which I suppose is expected. However, I would have expected the first 4 bytes to be different between devices. Two devices I tested just now both have the first four bytes as 01311542.
Do these sensors have a unique ID at all? If not then my job is made more difficult.
Is there a possibility I have some counterfeit sensors? I have run across that before with sensors from another manufacturer.
Thanks in advance,
Rob
SI1133 recovery after ADC overflow
I'm testing the ADC overflow conditions in the si1133 and I'm getting a weird behavior when changing the Channel setup right after an overflow condition. Here's the setup:
Here's what happens:
My suspicion without knowing how is the controller of this chip implemented, is that this is a bug in the chip in the error handling case: when there's an ADC overflow or SW_GAIN accumulation overflow the internal pointer to the output buffer (HOSTOUTx) is not reset when a PARAM_SET (0x82, 0x83 ....) command is send before the next FORCE; but it is reset when the next command is directly FORCE. To be clear:
HW_ID is 0x03
REV_ID is 0x10
Are you aware of this issue? Is there a workaround? I didn't find any errata on the topic. The only way I have found to work is to issue a RESET_SW but that requires to wait additional 25ms for the device to exit the "Initialization Mode" again and reconfigure everything. Arguably one should be able to change the sw_gain to a lower value when an accumulation error is detected.
SI1147-M01-EB with Windows 10
Hi,
I have an SI1147-M01-EB evaluation kit. I have downloaded the SI114x Programmers Toolkit, but I cannot get a connection to the hardware. The quick-start guide refers to Windows 7 only, so is it impossible to make this kit work on a Windows 10 machine?
In Device Manager, the device appears as an HID (Human Interface Device) rather than under Ports or USB - is this the problem?
If I launch SI1140 Control Panel, under devices I can see COM1 or TS004A572A. Pressing Connect with either device selected results in an error - unable to set baud rate for COM1 and unable to initialize SI114x. Function: InitSI114x for TS004A572A.
Also, when I launch the Firmware Updater, what should I choose from the evaluation board drop-down? Module?
Can someone help please?
Thanks
Si1153 Sensor I2C not responding to 0x53, but does reply to 0x51 (PN SI1151-AB09-GM)
Our first batch of boards work fine. Our driver uses the default I2C address of 0x53 (we have AD pulled high).
Our second batch do NOT work using address 0x53. They ONLY work if we use an I2C address of 0x51 which is very odd as this address is not documented anywhere. Again, we have AD tied high. BUT, if we pull AD low, we can successfully use address 0x52. Very odd.
We have verified clock speeds etc. As I said, we only have this issue on the second build. Also note that it fails on the all reads and writes. Also note that we do not attempt to change the I2C address parameter. Also note that we have confirmed that we have a clean powerup. We do not enable power to the sensor until our rail is solid.
I cannot find any eratta. Is there a known batch issue with the Si1153s? The part number is SI1151-AB09-GM
This has stumped us (I have over15 years commercial experience in I2C programming)
Cheers,
Oscar
Si1152 cannot drive LED2
Hi Silabs,
We use Si1152 for gesture detection and found that LED2 has no output. LED3 is floating on my schematic diagram. Is it caused by this? Or other reasons?
As shown in the figure, it is my schematic diagram and initialization code.
Why is the interrupt pin of Si1133 not working?
Hi,
I am developing a ambient light sensor board with Si1133-AA00-GMR. The main controller is STM32F405. The status is as following:
1. All the direct accessed registers and indirected accessed parameters could be correctly write and read.
2. A function is designed to read all the parameters send to Si1133 and all values are matched with the original values.
3. The sensor is set to be working in autonomous mode and channel 1&2 is enabled.
4. The problem is that the interrupt pin of Si1133 is always at high level and no rising or falling edge is triggered after the measurement is start.
5. The interrupt pin is only found at low level for less than 100ns when software reset command is executed.
6. The interrupt status register is checked many times. The interrupt pin did't change at all whatever the status register is.
7. Two succeessive read command of the interrup status register is executed. It's found that the register value is not reset automatically as description in datasheet, after the first read command.
The initial code of the sensor as following:
Is there some problem about the interrupt setting issue?
Thanks a lot.
Update on Jan 20, 2020:
The sensor was configured to be working in forced mode. The sampling and data read back rate is decided by timer on controller board, while the value of IRQ_STATUS is ignored. The sensor is good working.
Which sensor to use?
Hi! everyone i am building a project that involves measuring pressure on the road when a car stands over it. Now for testing i would be needing the same heavy duty sensor but some low level sensor which can provide the same functionality for say, hot wheels cars. I did some googling and came across the BMP sensor, which as far as my understanding tells me is just useless for measuring atmospheric pressure. I saw somewhere that maybe a pneumatic sensor would work best but i do not know which one would work with the arduino. So again, any sensor that the experienced people here can guide me regarding this?
thanks
https://jiofilocalhtml.co.in/
https://19216881.link/
https://router-network.uno/
P.S: you will have to dumb it down a bit for me as I do not know many technicalities