View previous topic :: View next topic |
Author |
Message |
tomcuga
Joined: 12 Jul 2007 Posts: 15
|
SHT11-too high temperature readings |
Posted: Wed Jul 14, 2010 12:05 am |
|
|
Hello,
My SHT11 sensor shows too high temperature values.
When I used 5V power supply with formula T=0.01*raw-40.1
temp reading was about 3.0 degrees higher and with 3.3V
sensor supply and formula T=0.01*raw-39.7 I have about
2.0 degrees higher value.
I used Hansolo's drivercode
http://www.ccsinfo.com/forum/viewtopic.php?t=28564&highlight=sht11
I didn't change anything except
output_bit(x,0) - output_low(x)
output_bit(x,1) - output_high(x)
My PIC is 18F2525 with 20MHz clock.
I used sht11 board from Mikroelektronika:
http://www.mikroe.com/sr/tools/sht1x-proto/
It has 1K pull-ups on both SCL and DATA lines.
Is there anything that I can try/do about it?
I have one more question about Hansolo's code:
This function definition confuses me:
Code: |
void sht_rd (float & temp, float & truehumid)
|
What is the function of address operator & in function
definition? I expected & operator in calling function
and then pointer variable in function definition if
call by reference is used, but here is usual call by value:
Code: |
sht_rd (restemp, truehumid);
|
Thanks |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Wed Jul 14, 2010 7:14 am |
|
|
Are you taking into account the heat generated by the operation of the SHT11 itself? Calculate the power dissipated by the SHT11, times the thermal resistance and see if that is a large part of your error. It makes sense it would be greater for 5V than for 3V.
I have never used your SHT11 so its self-heating may be minuscule, but for some sensors it is not. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
tomcuga
Joined: 12 Jul 2007 Posts: 15
|
|
Posted: Wed Jul 14, 2010 12:54 pm |
|
|
I found on Mikroelektronika's forum topic about the same problem I have.
Self heating is obviously a problem with this sensor. Some people suggest
to supply sensor from PIC pin - to be able to supply sensor only during
measuring. I try that but without any improvement.
I remove 1K pullups and put 10K only on SDA line as datasheet suggest.
I gain significant improvement with this - the part of excessive heat was obviously due to too lower pull up resistors which Mikroelektronika put on the sht1x board.
But I still have about 1.0 to 1.2 degree error so I'm still not happy. |
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1634 Location: Perth, Australia
|
|
Posted: Wed Jul 14, 2010 3:32 pm |
|
|
tomcuga wrote: | ...
Self heating is obviously a problem with this sensor. ...
But I still have about 1.0 to 1.2 degree error so I'm still not happy. |
I think you need more research into your problem.
I use my own driver. I have used these sensors for years in precision temperature sensing environments without seeing any noticeable error however the environment I am using in ranges from around 0 to 45 deg C. I cannot comment on the operation characteristics outside this range.
I suggest looking at the mechanism you are using to compare the temperature with your reference. Comparing an aspirated reference with a non aspirated sensor or comparing an aspirated sensor with a non aspirated reference will produce non meaningful results.
Things to be considered:
1. Are the reference and sensor under test identically aspirated?
2. Are they equally shield from solar radiation?
3. Are they immediately adjacent?
4. Are they of equivalent thermal mass?
5. Is the reference's calibration current, certified and in spec?
6. Have you inadvertently turned on the sensor's heater? _________________ Regards, Andrew
http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!! |
|
|
tomcuga
Joined: 12 Jul 2007 Posts: 15
|
|
Posted: Thu Jul 15, 2010 1:23 pm |
|
|
Thanks SherpaDoug and asmallri.
I am able to answer only on asmallri's questions 2 and 6. I'm not the expert
in temperature measurement so I don't understand other questions
Yes, my both sensors are close each other in my lab so there is no direct sun radiation. Also, I understand sensor protocol and code I use very well so I did not turn on sensor heating.
I don't have any special thermometers so as a reference I used Dallas DS18B20, my UT70B digital multimeter which shows 31 degree in situation on the picture and my home weather station which shows 31.2 degree.
So SHT shows the highest value. I know that i am comparing apples and pears but... These results are now ok I think.
Somehow, I believe to DS18B20 the most.
Can somebody just explain to me this strange definition:
Code: |
void sht_rd (float & temp, float & truehumid)
|
maybe I have some black hole in my C knowledge.
Thanks to all.
http://tinyurl.com/35ww75e |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Jul 15, 2010 2:05 pm |
|
|
He's using Reference Parameters in the sht_rd() function. It's a way to
return more than one value from a function.
Normally a function only returns one value. To return two or more
values you could use Global variables, but that's considered sloppy
programming. You could return a structure, but it takes time to
type in the structure definition. A quick way is to use reference
variables. Some (or all) of the parameters are not used to pass a
variable to the function (though, they could be). They are used to
hold the return values.
In the case of sht_rd(), notice that he defines the function as void.
But he then uses Reference Parameters for the temperature and the
humidity. That means that when the function is done and returns to
main(), the 'restemp' and 'truehumid' variables will hold the result.
You can see in main(), that he doesn't initialize those variables. He calls
sht_rd() and then uses printf() to display them. That clearly shows
that sht_rd() puts the results of reading the SHT chip into those variables.
Some online descriptions:
http://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/PARAMS.html#ref
http://www.macs.hw.ac.uk/~pjbk/pathways/cpp1/node170.html |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Thu Jul 15, 2010 4:16 pm |
|
|
For testing in the lab I often put several temperature sensors in an insulated cup of water and give it a stir. All the sensors will soon be at the same temperature.
This may not be good for a humidity sensor, I don't know much about them. _________________ The search for better is endless. Instead simply find very good and get the job done.
Last edited by SherpaDoug on Fri Jul 16, 2010 4:13 am; edited 1 time in total |
|
|
tomcuga
Joined: 12 Jul 2007 Posts: 15
|
|
Posted: Fri Jul 16, 2010 12:07 am |
|
|
Thank You very much PCM Programmer for great explanation as always!
I understand that, but it's more "clearer" to me and easier to understand
to use pointer variables:
send variables addresses to function
sht_rd (&temp, &truehumid)
and received it with pointer variables in function
void sht_rd (float *temp, float *truehumid)
It's the same thing in principle. Correct me if I'm wrong.
Thanks again! |
|
|
|