Pages: [1]   Go Down
Author Topic: 1-wire temperature reading  (Read 726 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Based on the OneWire lib, I've wrote the following code to convert the DS18S20 reading into Celcius Degres. Please note my code display the High Resolution Mode.
I would like to create a library with some other component (DS2438 for voltage then Barometer, Humidity, etc...). But the first step is to validate with you my code and my syntax. So your comments are welcomed.

Code:
void DisplayTempHR(byte Temperature_LSB, byte Temperature_MSB, byte Count_Remain, byte Count_per_C)
{
  boolean SignBit = false;
  int Temperature;
  byte Whole;
  byte Fract;
  
  // Truncate the 0.5°C bit (the LSB) from the read value.  
  Temperature = Temperature_LSB>>1;

  // The MSB is the sign extension
  if (Temperature_MSB != 0)
  {
    SignBit = true;
    // set the sign bit
    Temperature |= B10000000;
  }
 
  // Temp = TempRead - 0.25 + (CountPerC-CountRemain)/CountPerC
  Temperature = Temperature<<8;

  // Ox40 is Ox100/4, the 0,25
  Temperature = Temperature - 0x40 + (((Count_per_C - Count_Remain)<<8)/Count_per_C);
  
  // Compute the complement if signbit set to 1
  if (Temperature >> 15)
  {
    SignBit = true;
    Temperature = ~Temperature;
  }
  Whole = Temperature>>8;
  Fract = ((Temperature % 0x100) * 0x64 ) >> 8;

  Serial.print(" Temp=");
  if (SignBit) Serial.print("-");
  Serial.print(Whole, DEC);
  Serial.print(".");
  if (Fract <10) Serial.print("0");
  Serial.print(Fract, DEC);
}
Logged

Pages: [1]   Go Up
Jump to: