Add offset option to AD8495 module
authorerrolt <errol@errolsworld.com>
Sun, 22 Nov 2015 15:10:41 +0000 (17:10 +0200)
committererrolt <errol@errolsworld.com>
Sun, 22 Nov 2015 15:10:41 +0000 (17:10 +0200)
src/modules/tools/temperaturecontrol/AD8495.cpp
src/modules/tools/temperaturecontrol/AD8495.h

index 895878e..ae42675 100644 (file)
@@ -22,7 +22,9 @@
 
 #define UNDEFINED -1
 
+#define AD8495_checksum                CHECKSUM("AD8495")
 #define AD8495_pin_checksum            CHECKSUM("AD8495_pin")
+#define AD8495_offset_checksum         CHECKSUM("AD8495_offset")
 
 AD8495::AD8495()
 {
@@ -39,6 +41,8 @@ void AD8495::UpdateConfig(uint16_t module_checksum, uint16_t name_checksum)
 {
     // Thermistor pin for ADC readings
     this->AD8495_pin.from_string(THEKERNEL->config->value(module_checksum, name_checksum, AD8495_pin_checksum)->required()->as_string());
+    this->AD8495_offset = THEKERNEL->config->value(module_checksum, name_checksum, AD8495_offset_checksum)->by_default(0)->as_number(); // Stated offset. For Adafruit board it is 250C. If pin 2(REF) of amplifier is connected to 0V then there is 0C offset.
+       
     THEKERNEL->adc->enable_pin(&AD8495_pin);
 }
 
@@ -59,7 +63,9 @@ void AD8495::get_raw()
     const uint32_t max_adc_value= THEKERNEL->adc->get_max_value();
     float t=((float)adc_value)/(((float)max_adc_value)/3.3*0.005);
 
-    THEKERNEL->streams->printf("adc= %d, max_adc= %lu, temp= %f\n", adc_value,max_adc_value,t);
+    t = t - this->AD8495_offset;
+       
+    THEKERNEL->streams->printf("adc= %d, max_adc= %lu, temp= %f, offset = %f\n", adc_value,max_adc_value,t, this->AD8495_offset);
 
     // reset the min/max
     min_temp= max_temp= t;
@@ -73,6 +79,8 @@ float AD8495::adc_value_to_temperature(uint32_t adc_value)
 
     float t=((float)adc_value)/(((float)max_adc_value)/3.3*0.005);
 
+    t=t-this->AD8495_offset;
+       
     return t;
 }
 
index a2c4023..cea83c7 100644 (file)
@@ -34,7 +34,8 @@ class AD8495 : public TempSensor
         float adc_value_to_temperature(uint32_t adc_value);
 
         Pin  AD8495_pin;
-
+        float AD8495_offset;
+        
         float min_temp, max_temp;
 };