Difference between revisions of "SHIP:Data Types:Temperature"

From Serious Documentation
Jump to: navigation, search
Line 7: Line 7:
 
|}
 
|}
  
The {{DataType|Temperature}} datatype is returned by the {{Port|gpio|pcbTemp}} portvar (the exact format is configured by setting {{Port|gpio|tempPrecision}}). Generically, the value read from {{Port|gpio|pcbTemp}} is an 8-bit value in whole degrees followed by a <code>tempPrecision</code>-bit value in 1/256ths of a degree. The following are examples on how to properly interpret a {{DataType|Temperature}} value:
+
The {{DataType|Temperature}} datatype is returned by the {{Port|gpio|pcbTemp}} portvar (the exact format is configured by setting {{Port|gpio|tempPrecision}}).</onlyinclude> Generically, the value read from {{Port|gpio|pcbTemp}} is an 8-bit value in whole degrees followed by a <code>tempPrecision</code>-bit value in 1/256ths of a degree. The following are examples on how to properly interpret a {{DataType|Temperature}} value:
  
 
By default {{Port|gpio|tempPrecision}} is <code>0</code>:
 
By default {{Port|gpio|tempPrecision}} is <code>0</code>:
Line 19: Line 19:
 
  SIMTempFrac  = (SIMTempFrac*100)/256;                                // fix up the value to be a proper fraction (currently it is from 0/256 to 255/256 of a degree)</code>
 
  SIMTempFrac  = (SIMTempFrac*100)/256;                                // fix up the value to be a proper fraction (currently it is from 0/256 to 255/256 of a degree)</code>
  
'''''Note:''' ''<code>SIMTempWhole</code>'' and ''<code>SIMTempFrac</code>'' only need to be of type ''{{DataType|Byte}}'' to fit the highest possible values''</onlyinclude>
+
'''''Note:''' ''<code>SIMTempWhole</code>'' and ''<code>SIMTempFrac</code>'' only need to be of type ''{{DataType|Byte}}'' to fit the highest possible values''

Revision as of 16:07, 1 February 2013


Data Type Description
Temperature 16 bit fixed-point-integer in which the upper portion is in whole degrees and the lower portion is in 256ths of a degree. Set shipCelsius to true for Celsius, or false for Fahrenheit.

The Temperature datatype is returned by the pcbTemp portvar (the exact format is configured by setting tempPrecision). Generically, the value read from pcbTemp is an 8-bit value in whole degrees followed by a tempPrecision-bit value in 1/256ths of a degree. The following are examples on how to properly interpret a Temperature value:

By default tempPrecision is 0:

SIMTempWhole = GPIO.pcbTemp;  // the value is good as-is
SIMTempFrac  = 0;             // unnecessary

For handling any other value of tempPrecision:

SIMTempWhole = (GPIO.pcbTemp >> GPIO.tempPrecision);                  // once the fractional bits are gone, the value is correct
SIMTempFrac  = (GPIO.pcbTemp & (0x00FF >> (8 - GPIO.tempPrecision))); // get rid of the degree bits
SIMTempFrac  = (SIMTempFrac << (8 - GPIO.tempPrecision));             // re-adjust the fractional bits
SIMTempFrac  = (SIMTempFrac*100)/256;                                 // fix up the value to be a proper fraction (currently it is from 0/256 to 255/256 of a degree)

Note: SIMTempWhole and SIMTempFrac only need to be of type Byte to fit the highest possible values