Search code examples
cfloating-pointdspicmplab-5.45

converting int into float dsPIC33


I am trying to convert int16_t to float

code is

int16_t ADC_value;

float voltage = (float)ADC_value/1000.0f;

printf("%f\r\n",voltage);

result

when the voltage exceeds 2.0V floating point values become (-)values. but before it converts to floating point values it is normal.

code:-

int16_t ADC_value;

printf("%u\r\n",ADC_Value);  //this is correct

is that int16_t to float conversion wrong?


Solution

  • For ADCs, I find this to be the prevailing pattern. Since you are using LTC1867, you need to determine whether the IC is operated in bipolar or uni-polar mode. The FSR is 4.096. If unipolar, you should use a uint16_t as the ADC value. If bipolar mode, you should use int16_t. In bipolar mode, the ADC is a signed twos complement, which can vary from +/- 32767, so you would need to alter the FSR variable I use below.

    const float fsr = 4.096;        // Full-scale range, Volts, depends on the ADC
    const float max_val = 65535.0f; // For 16-bit unsigned ADC, 2^16 -1 
    float voltage = fsr*((float)ADC_value / max_val);