Чтение данных мощности счетчика WB-MAP3E

Большая просьба помочь разобраться с чтением регистров мощности счетчика WB-MAP3E и дальнейшим преобразованием их в значение. При выключенной нагрузке, получаю следующие значение регистров по адресам 0x1300 и 0x1301:
MSB = 0, LSB = 331, после преобразования получаю Power = 1.6947200000000002 Вт,
но когда первый регистр имеет значение:
MSB = 65535, LSB = 327, то после преобразования имею Power = -333.87008000000003 Вт,
хотя должно быть по идее где-то те же 1.5 Вт только с минусом.
Что делаю не так?

Добрый день.
Не совсем понимаю вопрос, поднятый старший бит знакового - указывает на то что значение в дополнительном коде и отрицательное:

Да, это понятно. Какое значение мощности должно быть для приведенных старших и младших регистров MSB = 65535, LSB = 327?

Получается -1,67424

А не затруднит чуть подробней как получили?

так как msb явно в допкоде, предположил что значение lsb уже в прямом. Кстати, зачем переводите в десятичный, оно ж неудобно…
Ну и умножил прямое значение (значащих в msb нет) на коэффициент.

Прошу прощения, все равно непонятно. Если в шестнадцатеричной системе:
MSB = 0xFFFF, LSB = 0x0147, тогда наше значение будет равно 0xFFFF0147 и если привести его знаковому целочисленному типу (32 bit signed int, как у вас указано в таблице с картой регистров) получим -65209, можно воспользоваться любым онлайн конвертером. Это значение не -327. Не могу понять, что я делаю неправильно.

Вы читаете регистры одной командой, оба? в противном случае значения могут быть неконсистентные.

Читал по отдельности, в этом и была ошибка. Теперь все стало на свои места. Большое спасибо, очень помогли!

1 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.