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
Lesezeichen