From 86e4059865e1c079d146195e9e073dbbc975b6a5 Mon Sep 17 00:00:00 2001
From: Leonardo Martinez <leonardo.martinez.hornak@fing.edu.uy>
Date: Mon, 17 May 2021 17:16:34 -0300
Subject: [PATCH] Temperature obtained in celsius degrees

---
 firmware/include/adc.h    |  4 ++--
 firmware/include/common.h |  1 +
 firmware/src/adc.c        | 16 ++++++++++------
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/firmware/include/adc.h b/firmware/include/adc.h
index 810d9a7..8dda0ec 100644
--- a/firmware/include/adc.h
+++ b/firmware/include/adc.h
@@ -37,8 +37,8 @@ void setTempCallbackFunction(void *callback_function);
 void runADCConversion(void);
 
 /**
- * @brief Obtains the last temperature reading in milicelsius
- * @return int temperature in celsius degrees divided by 1000
+ * @brief Obtains the last temperature reading in celsius
+ * @return int temperature in celsius degrees
  *
  */
 int getTemperatureReading(void);
diff --git a/firmware/include/common.h b/firmware/include/common.h
index a5e5a35..01bf49a 100644
--- a/firmware/include/common.h
+++ b/firmware/include/common.h
@@ -12,5 +12,6 @@
 #define INCLUDE_COMMON_H_
 
 //#define DEBUG
+#define REF_VOLTAGE_DIV_BY_ADC_10BITS_RESOLUTION 1.17
 
 #endif /* INCLUDE_COMMON_H_ */
diff --git a/firmware/src/adc.c b/firmware/src/adc.c
index 436ad9c..7c2d7bc 100644
--- a/firmware/src/adc.c
+++ b/firmware/src/adc.c
@@ -1,4 +1,5 @@
 #include <msp.h>
+#include "common.h"
 #include "adc.h"
 #include "fifo_function_queue.h"
 
@@ -55,25 +56,28 @@ void runADCConversion(){
 
 int getTemperatureReading(){
     int  temp;
-    //Converts mVolts to miliCelsius using temperature sensor transfer function (no calibration)
+    float aux;
+    //Converts ADC Reading to mVolts (1.2 Volts set for reference voltage)
+    aux = (float)(adcval) * REF_VOLTAGE_DIV_BY_ADC_10BITS_RESOLUTION;
+
+    //Converts mVolts to celsius using temperature sensor transfer function (no calibration)
     //Using 10 bits resolution
-    temp = (((adcval - 686) * 512)/1024);
+    temp = (int)((aux - 686) * 0.512);
 
     return temp;
 }
 
 void ADC14_IRQHandler(void)
 {
-    addToFunctionQueue(temperature_ready_callback);
-
     //Reading to ADC14MEM clears the IFG
     adcval = ADC14->MEM[0];
     ADC14->CTL0 &= ~ADC14_CTL0_ENC;
     ADC14->CTL0 &= ~ADC14_CTL0_ON;
 
-    __low_power_mode_off_on_exit();
-
     //Disable ISRs
     ADC14 -> IER0 &= ~ADC14_IER0_IE0;
     NVIC_DisableIRQ(ADC14_IRQn);
+
+    addToFunctionQueue(temperature_ready_callback);
+    __low_power_mode_off_on_exit();
 }
-- 
GitLab