Part Number:BQ34Z100-G1Other Parts Discussed in Thread:BQSTUDIO
TI工程师,你好,目前用单片机把Bq34z100g1的浮点数读出来,能正确读出4个字节的十六进制数,但是转换成浮点数时不成功,按照网址中的方法进行转换,能够与他的例子一一对应,但是用到下面这两个值的转换为啥不行,方法的网址:e2echina.ti.com/…/bq34z100-g1
要修改寄存器的目标地址
要修改的寄存器的值:8.123
相对应读出来的四个字节:80 16 43 FE
采用以下网址的方法进行转换
https://e2echina.ti.com/support/power-management/f/power-management-forum/185623/bq34z100-g1?tisearch=e2e-sitesearch&keymatch=bq34z100-g1#
得到的值是:0.586974978447
Cherry Zhou:
您好我们已收到您的问题并升级到英文论坛,温馨提示您由于圣诞及新年假期,英文论坛答复将稍慢,敬请谅解!
,
Cherry Zhou:
您好,bqStudio 要对结果应用相应的公式。 不同的仪表可能会有所不同。
您可以参阅以下链接:
https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/551252/bq78350r1-smbus-floating-point-calculation/2020286#2020286
,
XIANGSHENG ZHANG:
您好,感謝您的回复,十六进制转换成十进制的问题按照您的回复,已经能够解决了,但是又碰到了另一个问题:十进制浮点数转换成十六进制的问题,我也按照了如下的文档的浮点数转换方法,但是还是存在十进制浮点数转换成十六进制不正确的问题
http://www.ti.com/lit/an/slva148a/slva148a.pdf
我按照文档的第四页vb代码,把它转换成c语言代码:
正确的应该是:
十进制:10.124 转换成 0X7F6E8AAB
但是通过程序运算后出来的是:
十进制:10.124转换成0X84A1FBE7
不知哪里出问题,麻烦TI工程师帮我看看,感谢万分。
,
Cherry Zhou:
您好,bqStudio 中有一个转换,在代码中通常被称为magic number,我们建议您可以使用以下方法进行验证:
1. 从仪表中读取十六进制值
2. 转换为十进制
3. 转换回十六进制
4. 十六进制值应该匹配。
,
XIANGSHENG ZHANG:
您好,仪表的十六进制转换成十进制是已经可以了,但是十进制转回十六进制对不上,方法是按照上面文档那个方法的:http://www.ti.com/lit/an/slva148a/slva148a.pdf
不知道上述文档所述方法是不是正确的,还是说其它不同于上述文档的新的方法,麻烦TI工程师帮忙看看
,
Cherry Zhou:
您好,新的回复是否已经解决了您的问题?关于十进制转换到十六进制?
,
XIANGSHENG ZHANG:
没解决呐,不小心按了已经解决的按键了
是十进制转十六进制对不上
,
Cherry Zhou:
您好, C code使用floating point math。 可能会导致问题出现。 您试下使用integer math以及bit shifting(整数数学和位移).
,
XIANGSHENG ZHANG:
您好,我直接使用VB的编译软件运行slva148a.pdf的第四页VB代码,程序出来的结果也是:10.124会转换成0x84A1FBE7,与C语言代码出来的结果是一致的,但是与Bqstudio读出来的结果:10.124会转成0X7F6E8AAB 不一致。是不是BQ34Z100G1还有另外的十进制浮点数转十六进制方法?麻烦Ti的工程师帮忙看看,感谢万分。
运行的代码
运行结果得出的结果
,
Cherry Zhou:
您好,bqStudio 会在屏幕上显示值之前会应用附加的公式,因此不匹配。 请确认以下内容都要匹配:
1. 从仪表中读取十六进制值
2. 使用示例代码将十六进制值转换为十进制值
3. 使用示例代码转换十六进制步骤 2 中的十进制值
4. 比较步骤 1 和步骤 3 中的十六进制值。 这些十六进制值必须相同。 如果值相同,您的代码才正确。
,
XIANGSHENG ZHANG:
第一步:通过BQSTUDIO先读出BQ34Z100G1的CCGain的十六进制值即四个字节
第二步:然后使用十六进制转换十进制的代码转换数值0x7F7127D4,得到一个十进制值: -0.47100698947906494;
第三步:使用十进制转换成十六进制的代码转换数值:-0.47100698947906494;得到一个十六进制值:0x7F7127D4
第四步:比较该十六进制值与仪表的十六进制是否相等
可以看到第三步的十六进制值与第一步是相等的,即代码是正确的,但是转换过程中的十六进制转换十进制的十进制浮点数与仪表显示的十进制数不一致,仪表数值:10.123,代码转换的数值:-0.47100698947906494,这是我最纠结的问题,所以希望Ti工程师能够帮忙看看,感谢万分
,
XIANGSHENG ZHANG:
您好,该问题已得到解决,万分感谢您多日来的回复与解答