Grove - I2C ADC precision and data management

Hi at all
I am working on getting the Grove - I2C ADC converter working.
I chose this device because it has 12 bit resolution and is fast.
It interfaces with a Teensy 4.1.
Perfect grounds and power supplies.
Accuracy of my voltmeter: on a calibrated and stable source of 10,000 volts it reads 9.999V.
The ADC board is powered by a stable reference voltage REF02 of 5 volts, 4.98 volts real.
The ADC reference voltage is the internal 3 volt reference.
The documentation available on the board is poor, basically a reading routine that however works fine.
Problems:
Accuracy: with an input voltage of 1,250 volts measured with the voltmeter, on the Arduino serial monitor appears 1.192V, 60 mV less;
I didn't expect this from a 12-bit converter, I expected max +/- 0.7mV inaccuracy;
The original sw is available on https:/ /wiki.seeedstudio.com/Grove-I2C_ADC/
A summary of the SW:
#define V_REF 3.00 //Internal 3 volt reference
unsigned int getData;
unsigned int Raw;

//SUBROUTINE DECLARATION
void init_adc() {
Wire.beginTransmission(ADDR_ADC121);
Wire.write(REG_ADDR_CONFIG);
Wire.write(0x20);
Wire.endTransmission();
}

void read_adc() //unsigned int *data
{
Wire.beginTransmission(ADDR_ADC121); // transmit to device
Wire.write(REG_ADDR_RESULT); // get result
Wire.endTransmission();

Wire.requestFrom(ADDR_ADC121, 2); // request 2byte from device
delay(1);
if (Wire.available() <= 2) {
getData = (Wire.read() & 0x0f) << 8; //bitwiseAND with F (15) then shift left 8 position (like multiply for 256?)
getData |= Wire.read(); //getData bitwise OR with Wire.read().
}

void loop() {
read_adc();
Raw = (getData * V_REF * 2 / 4096); // It's not working properly
Serial.print("The analog value is:");
Serial.print((getData * V_REF * 2 / 4096),3); //With 1.250 volt input I read 1.192 volt
Serial.print(Raw); // With 1.250 volt input I read 6291455 (???)
Serial.println("V");
}

What about accuracy?
How to transfer the getData to another variable to be able to process it?

You need to read the forum guide in the sticky post at the top of most forum categories and follow it. When you have done that, fix your post above because it is breaking the rules.

Post a link to that.

Throw it in the trash. 10,000 volts would give you a fatal electrocution and your meter failed to warn you about this because it's calibration is 1000x inaccurate.

What is the actual ADC-chip on the board?
Do you have a data sheet (link)?
What does it say about accuracy, noise etc?

@colonial54 in English , is a thousands separator. use . as decimal separator in English communication.

in my opinion 9.999 is 10

No but it is doing what you told it to. Note that you are doing integer division here, never a good idea when looking for decimal point values.
Then you do:-

You are getting data again and then printing it out. This is taking another reading and the data will have changed. Why not print out the Raw you got previously?

Ever reading is at least +/- one significant bit.

It's a lot more complex than that.

Firstly how accurate is your multimeter really? Your measurement suggest 0.01%, which is not really credible. For professional multimeter a range of 0.1 to 0.5% is more likely. How did you calibrate the voltage source?

Secondly, there are many factors affecting the accuracy of an ADC. They all have errors such as gain and offset error. Also errors vary with temperature. Obviously they also depend on the accuracy of the reference voltage.

To be honest, I would not expect a lot of accuracy from this module, it is designed for hobby use not professional grade.

That ADC does not have an internal ref
The external ref on the board is 3.1V +/- 1.5% (or more)