Greg (or anyone else) one small i2c question.
From: Reinder
Date: Sat Jul 17 2004 - 09:34:10 EST
Greg,
While having some fun, with the old 2.4 vt8231, ""porting"" that to the 2.6
Branche, my eyes raised some strange question, which I hope you can answer.
>From the Sysf-Interface, it states:
temp[1-4]_max Temperature max value.
Unit: Milidegrees Celsius
Read/Write value.
I far as I know, one Milidegrees is one thousand Grade Celsius.
The actual Reading, from the vt8231 inside the io space is an 8 bit value.
It contains for example a number "78" in "Celsius" for de 1f CPU temp
location.
Now, from various documentations floating around, for some undocumented or
well hidden reason, this mostly is multiplied by 0.88 giving a reading of
68.84
I assume somebody thought about it and calculated that m that was a nice
correction value.
Converting it to the required units, would be 68.84*1000 = 68840
Or, to avoid Floating points: ( (68*1000)*880)/1000 = 68840 Milidegrees
Celsius
That was, when life was easy.
However, my bet is somebody figured out, that bit 7 till 6 in the reserved
area from area 4b, contains also bits of temperature information. (Although
the datasheet I have, describe that area as "Reserved")
The value is readed, Anded with 192, then shifted to right by 6 to get the
reading. "0,1,2,3". We assume the value is 3.
Assuming that, this Value is stored in the same Magic Celsius Value,
Multiplied by 880, this gives a correction of 2640 Milidegrees.
That is, if it where separate 8 and 2 bit values. But As I can see, from the
original code, it assumed as 1 10bit value.
Thus the first value 79 is shifted to left by 2, and the second value is
orred into it. Which gives (79>>2) = 316.
Plus the low value "3" = 319
Returning, this, in the old version, to Human readable format, it was
multiplied by 10, and then divided by 4. Giving 797.5
I assume, that something has changed, with the sensor output format.
Thus, the new return formula would be:
Multi by 1000, divide by 4.
Now we have 79750.
Throwing in the 0.088 Correction Factor the final result is:
79750* 0.088 = 70180 Milidegrees Celsius
Or 319 * 880 /4 = 70180
Or 319 * 220 = 70180
If this was "temp3" , it would result in 1 sensors.conf line:
Compute temp3 @
Is my final concussing Right?
If so, I will move on to the voltage part :)
If not, I Hope somebody can point me out where to go...
http://tser.org/vt8231/
Regards
Reinder Kraaij.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/