@peekay123 Just trying to adjust the conversion now, so that it yields a correct reading. In 12-bit mode, in the response, byte 0 is (MSB)XXXX SDDD(LSB) and byte 1 is DDDD DDDD, where ‘X’ bits are ignored, ‘S’ is the sign bit and ‘D’ bits are the data.

The interface board I’m using has an Op-Amp which means it can accept a larger voltage range. On the datasheet, they give the equation to convert the binary ‘code’ received into a voltage, as follows:

V = (code/2047)*(2.048/PGA)*(180/33).

I’ve modified the ‘switch’ case in the library to realise this equation, but it’s just returning zeros. I’d originally placed the values straight in-line, but decided to define them ‘long’ so that all arithmetic operations used the same type. I’ll comment each line so you can see my understanding:

```
switch (_resolution){
case 12:
_resultat = _Buffer[0]; //originally assigning _resultat to the first byte
_resultat&=0b00001111; //ANDING this to 'mask' the unwanted bits
_resultat = _resultat << 8; //Shifting 8 bits in the MSB direction
_resultat |= _Buffer[1]; //OR to add byte 1 to the end of the first byte
if(_resultat>2048-1) {
_resultat=_resultat-4096-1; //not sure what this bit is
}
long maxCode = 2047;
long vRef = 2.048;
long invGain = (180/33); //all from datasheet
_resultat = (_resultat/maxCode)*(vRef/_PGA)*invGain; //equation from datasheet
```

If I just return ‘_resultat’ before doing this last arithmetic calculation, it yields the pure binary code. If I work out the equation on pen and paper, it works out! FYI _resultat is of ‘long’ type and _Buffer and _PGA are ‘uint_8’