加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 我可以发送一个2字节大小的变量作为1字节大小的变量吗

发布时间:2020-12-20 12:32:57 所属栏目:Python 来源:网络整理
导读:我正在进行一些ADC(模数转换)值转换,需要通过UART发送这些值,但由于速度和其他大小限制,我想将它们转换为一个字节大小 ADC为12位,范围为0.0到5.0. 目前我正在将2字节变量拆分为两个单独的字节,并将它们连接回接收器部分 发送(C) // i am trying to send 0xFF
我正在进行一些ADC(模数转换)值转换,需要通过UART发送这些值,但由于速度和其他大小限制,我想将它们转换为一个字节大小

ADC为12位,范围为0.0到5.0.

目前我正在将2字节变量拆分为两个单独的字节,并将它们连接回接收器部分

发送(C)

// i am trying to send 0xFF8 (4088) which is read from that register 
send[0] = (VADC_G5RES4.B.RESULT) >> 8 ;
send[1] = (VADC_G5RES4.B.RESULT) & 0x0FF;
 .
send[30] = .....

接收(Python)

adc1 = data[3]
adc1 = adc1 << 8 | data[4]
adc1 = (float(adc1 * 5) / 4096)
# gives me 4.990234 as the value

有什么方法可以只用一个字节发送值(可能通过在发送端执行计算)

小数点后只有2位数(4.99)可以

解决方法

如果有一些神奇的方法可以将双字节值填充到一个字节的值中,我们会对所有内容执行此操作,然后我们会再次执行此操作,并且我们将继续执行此操作并将所有内容的大小减半,直到我们推迟将所有世界的信息转换成单个字节.这种魔力是不可能的.

如果你丢弃一半的数据,你可以减少事物的大小,但你说你想要小数点后至少2位数.一个字节只能编码256个不同的值,编码从0.00到9.99的所有值都需要1000个不同的值,因此您仍然无法执行此操作.

更新:有了额外的信息,这些只是12位值,而不是16位,最大值是5.0,我们可以做得更好,但仍然不是8位中的3位有效数字.

首先,我们可以将2个值打包成3个字节,而不是每个值浪费4位.那看起来像

def pack(val1,val2):
    byte1 = val1 >> 4
    byte2 = ((val1 & 0xf) << 4) | (val2 >> 8)
    byte3 = val2 & 0xff
    return byte1,byte2,byte3

您可能需要处理尾随的半字节.

如果每个值1.5个字节仍然太多,则存在有损编码选项.例如,我们可以丢弃每个值的4个最低有效位:

encoded = val >> 4

并适当解码:

decoded = encoded * 5.0 / 256

这保持精度为5/256,或约0.02.其他编码可能会表现得更好,具体取决于您对信号的期望.例如,只要值变化不太快,chux’s solution就会对值进行编码,但当值快速变化时,只有大约0.04的精度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读