float FDC1004::getCapacitance()

in FDC1004.cpp [174:203]


float FDC1004::getCapacitance(uint8_t measurement, uint8_t rate)
{
  float data;
  uint32_t rawdata = getRawData(measurement, rate);

  //Serial.println(rawdata, BIN);
  rawdata = (rawdata & 0xFFFFFF); //make sure it is only 24 bit data
  //Serial.println(rawdata, BIN);
  
  //get capdac value for this measurement channel
  uint16_t capdac = readRegister16(FDC1004_CONF_MEAS1+(measurement-1));
  capdac = (capdac >> 5) & 0x1F; //isolate 5 bits [9:5] with capdac value
  //Serial.println(capdac);
  //capdac = capdac * 3.125; //in pF
  //Serial.println(capdac);
  //convert from 2's complement to binary
  if((rawdata & 0x800000) > 0)
  {
      data = -1*((~rawdata)+1);   
  }
  else
  {
      data = rawdata;
  }
  
  data = ( data / 524288.0); //pow(2,19) equation from page 16 of datasheet
  // Serial.println(data);
  // Serial.println(capdac);
  return data+(capdac*3.125);
}