将 8 位值转换为 24 位值
Converting 8bit values into 24bit values
我正在读取 ADC 值,假设我没看错我对此还是陌生的,来自 [NAU7802](14www.nuvoton.com/resource-files/NAU7802 Data Sheet V1 .7.pdf0) 并且我将值输出为 8 位整数(即 0-255)作为三个字节。如何将三个字节合并在一起以获得 24 位值 (0-16777215) 的输出?
这是我正在使用的代码,如果我假设我这样做是对的,那么我对 I2C 通信还是个新手。
from smbus2 import SMBus
import time
bus = SMBus(1)
address = 0x2a
bus.write_byte_data(0x2a, 0x00, 6)
data = bus.read_i2c_block_data(0x2a,0x12,3)
print bus.read_i2c_block_data(0x2a,0x12,3)
adc1 = bin(data[2])
adc2 = bin(data[1])
adc3 = bin(data[0])
print adc1
print adc2
print adc3
当我手动转换二进制文件时,我得到并输出与我输入到 adc 的内容相对应的内容。
输出:
[128, 136, 136]
0b10001001
0b10001000
0b10000000
试试这个:
data=[128, 136, 136]
data[0] + (data[1] << 8) + (data[2] << 16)
# 8947840
或
((data[2] << 24) | (data[1] << 16) | (data[0] << 8)) >> 8
# 8947840
(8947840 & 0xFF0000) >> 16
#136
(8947840 & 0x00FF00) >> 8
#136
(8947840 & 0x0000FF)
#128
下面是一个解包 3 个不同数字的示例:
data=[118, 123, 41]
c = data[0] + (data[1] << 8) + (data[2] << 16)
#2718582
(c & 0xFF0000) >> 16
#41
(c & 0x00FF00) >> 8
#123
(c & 0x0000FF)
#118
我正在读取 ADC 值,假设我没看错我对此还是陌生的,来自 [NAU7802](14www.nuvoton.com/resource-files/NAU7802 Data Sheet V1 .7.pdf0) 并且我将值输出为 8 位整数(即 0-255)作为三个字节。如何将三个字节合并在一起以获得 24 位值 (0-16777215) 的输出?
这是我正在使用的代码,如果我假设我这样做是对的,那么我对 I2C 通信还是个新手。
from smbus2 import SMBus
import time
bus = SMBus(1)
address = 0x2a
bus.write_byte_data(0x2a, 0x00, 6)
data = bus.read_i2c_block_data(0x2a,0x12,3)
print bus.read_i2c_block_data(0x2a,0x12,3)
adc1 = bin(data[2])
adc2 = bin(data[1])
adc3 = bin(data[0])
print adc1
print adc2
print adc3
当我手动转换二进制文件时,我得到并输出与我输入到 adc 的内容相对应的内容。 输出:
[128, 136, 136]
0b10001001
0b10001000
0b10000000
试试这个:
data=[128, 136, 136]
data[0] + (data[1] << 8) + (data[2] << 16)
# 8947840
或
((data[2] << 24) | (data[1] << 16) | (data[0] << 8)) >> 8
# 8947840
(8947840 & 0xFF0000) >> 16
#136
(8947840 & 0x00FF00) >> 8
#136
(8947840 & 0x0000FF)
#128
下面是一个解包 3 个不同数字的示例:
data=[118, 123, 41]
c = data[0] + (data[1] << 8) + (data[2] << 16)
#2718582
(c & 0xFF0000) >> 16
#41
(c & 0x00FF00) >> 8
#123
(c & 0x0000FF)
#118