Arduino Mega 2560 ADC read Minivolts at ADC port A8

I am stuck up to find a way by reading analog input at port A8 of Arduino Mega 2560 at a resolution of 1 mV. I have a Water Conductivity sensor which gives value of 1 mV which equal to 1 ppm and so on. Its range is from 1mV to 2000mV

I have been referring to articles mentioned below:

http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

So will my code look like this:

   int analogPin = A8;
    int val = 0;           // variable to store the value read
    
    long readVcc() {
      // Read 1.1V reference against AVcc
      // set the reference to Vcc and the measurement to the internal 1.1V reference
      #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
        ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
      #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
         ADMUX = _BV(MUX5) | _BV(MUX0) ;
      #else
        ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
      #endif  
      ADCSRB &= ~_BV(MUX5); 
      delay(2); // Wait for Vref to settle
      ADCSRA |= _BV(ADSC); // Start conversion
      while (bit_is_set(ADCSRA,ADSC)); // measuring
     
      uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
      uint8_t high = ADCH; // unlocks both
     
      long result = (high<<8) | low;
     
      result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
      return result; // Vcc in millivolts
    }
    
     void setup() {
      Serial.begin(9600);
    }
    
    
    void setup()
    {
      Serial.begin(9600);          //  setup serial
    }
    
    void loop()
    {
      val = analogRead(analogPin);    // read the input pin
      Serial.println(val);             // debug value
    }

Will I get the expected output means reading ADC with changes in 1mV?

1 Like