Ich vermute, daß Deine Berechnung aus den Bytes fehlerhaft ist. Ich habe damit auch länger rumgemacht. Hier ein Auszug meines Programms (Basic++ für C-Control Unit 2.0):

Code:
'------------------------------ declare für Lagebestimmung --------------------------------------------------------
const max127adresse = 80                 ' feste Adresse für Max127
const controlbytedruck      = 10100000b  ' Ch2, 0 bis 5V, normal Operation
const controlbytequer       = 11100000b  ' Ch6, 0 bis 5V, normal Operation
const controlbytehoehe      = 11110000b  ' Ch7, 0 bis 5V, normal Operation
const controlbyteakku       = 1

'------------------------------ function max127auslesen --------------------------------------------------------
function Max127auslesen(chsetting as byte)
  define ADwert as word
  define highbyte as byte
  define lowbyte  as byte
         IIC.init
         IIC.stop
         IIC.start
           IIC.send max127adresse
           IIC.send chsetting
         IIC.stop
         IIC.start 
          IIC.send (max127adresse + 1)
          IIC.get highbyte
          IIC.get lowbyte
          lowbyte = lowbyte shr 4
        IIC.stop
      IIC.off
    ADwert = ((highbyte*16) + lowbyte)    
   return ADwert
end function

Mein Max127 ist ganz normal eingelötet ohne Masseflächen oder so.
Vielleicht macht ja auch Dein I2C-Seriell-Umsetzter Probleme. Das müßte man über einen reinen I2C-Test herausbekommen können.

mfg

Stefan