/* * adc.cpp * * Created on: 03.10.2014 * Author: wn */ #include #include #include #include #include "measure.h" #include "PontCoopScheduler.h" #include "displayMuxer.h" #include "display.h" #include "gpio.h" const float R_REF = 3000.0; const uint16_t N_MAX = 1023; const float PT1000_R0 = 1000.0; const float PT1000_Coeff = 3.85e-3; void measureInit(void *handleArg) { ADC10CTL0 = SREF1 | ADC10SHT_3 | ADC10SR | REFOUT | REFON | REF2_5V | ADC10ON; ADC10CTL1 = INCH_3; ADC10AE0 = BIT3; } void measureCollectAndProcessConversion(void *handleArg); void measureStartConversion(void *handleArg) { //gpioSetPin(TESTPIN1, HIGH); ADC10CTL0 |= ENC | ADC10SC; schAdd(measureCollectAndProcessConversion, NULL, 10, 0); //gpioSetPin(TESTPIN1, LOW); } void measureCollectAndProcessConversion(void *handleArg) { //gpioSetPin(TESTPIN2, HIGH); uint16_t n = 0xffff; if ((ADC10CTL0 & ADC10IFG) != 0) { n = ADC10MEM; ADC10CTL0 &= ~(ADC10IFG | ENC); } // process adcValue // store result in variable temperature float r = ((((float)N_MAX) / ((float)n)) - 1.0) * R_REF; float t = (r / PT1000_R0 - 1) / PT1000_Coeff; uint8_t temperature = (uint8_t)t; // displaySetValue(temperature); displayMuxerSetValue(temperature, true, TEMPERATURE_MUX); //gpioSetPin(TESTPIN2, LOW); }