NTC temperature sensor going to A:D input. Topology is: (Vref or 3.3V) -> Series_resistor -> A:D_input -> NTC -> GND. Easy modification of NTC parameters w/o recompile of library

Dependents:   ntc_helloworld

Revision:
0:c0bdc272d5da
Child:
2:c843c06cc651
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ntc.cpp	Fri Apr 07 00:30:39 2017 +0000
@@ -0,0 +1,88 @@
+/*
+ * mbed library program
+ */
+
+#include    "mbed.h"
+#include    "ntc.h"
+
+NTC::NTC(PinName p_ana, const NTC_TypeDef *ntc_parameter) :
+    _ana(p_ana)
+{
+    ntc_set_data = *ntc_parameter;
+    rawdata = NULL;
+}
+
+NTC::NTC(PinName p_ana) :
+    _ana(p_ana)
+{
+    ntc_set_data = ntc_std_paramtr;
+    rawdata = NULL;
+}
+
+uint16_t NTC::read_ad_reg() {
+    rawdata = _ana.read_u16();
+    return rawdata;
+    //return 19918; //85.00c * ntc=10k, b=3434, rser=3320
+}
+
+int NTC::get_ntc_res() {
+    return ntc_set_data.ntc_res;
+}
+
+int NTC::get_ntc_beta_2550() {
+    return ntc_set_data.ntc_beta_2550;
+}
+
+int NTC::get_ntc_beta_2580() {
+    return ntc_set_data.ntc_beta_2580;
+}
+
+int NTC::get_ntc_beta_2585() {
+    return ntc_set_data.ntc_beta_2585;
+}
+
+int NTC::get_ntc_beta_25100() {
+    return ntc_set_data.ntc_beta_25100;
+}
+
+int NTC::get_series_res() {
+    return ntc_set_data.sres_res;
+}
+
+float NTC::get_ntc_res_viaAD(uint16_t din) {
+    uint16_t ad = rawdata;
+    if(din == 0) {
+        ad = NTC::read_ad_reg();
+    }
+    float adv = ntc_set_data.vref / ntc_set_data.ad_resolution * (float)ad;
+    return (ntc_set_data.vref / ((ntc_set_data.vref - adv) / ntc_set_data.sres_res) - ntc_set_data.sres_res);
+}
+    
+float NTC::get_ntc_temp(int curve, uint16_t din) {
+    int beta = 0;
+    switch (curve) {
+        case B25_50:
+            beta = ntc_set_data.ntc_beta_2550;
+            break;
+        case B25_80:
+            beta = ntc_set_data.ntc_beta_2580;
+            break;
+        case B25_85:
+            beta = ntc_set_data.ntc_beta_2585;
+            break;
+        case B25_100:
+            beta = ntc_set_data.ntc_beta_25100;
+            break;
+        default:
+            beta = ntc_set_data.ntc_beta_2550;
+            break;
+    }
+    float ntc_res = 0.0f;
+    if(din == 0) {
+        ntc_res = NTC::get_ntc_res_viaAD();
+    } else {
+        ntc_res = NTC::get_ntc_res_viaAD(din);
+    }
+    return (beta / (log(ntc_res / (ntc_set_data.ntc_res * exp(-beta / 298.0f)))) - 273.0f);
+}
+