1.接线
购买的是50K的AD5272设备
AD5272中ADDR引脚有三种接法,根据接法不同,芯片IIC的7位地址也不同。
本文选用ADDR接GND,所以7位地址二进制为:0b0101111,转换为16进制为0x2f。
2.代码解读
2.1 安装 ft4222库
pip install ft4222
2.2 初始化IIC主机
dev = ft4222.openByDescription('FT4222 A') # 将InterfaceA 打开
dev.i2cMaster_Init(100) # 初始化I2C主机,并且设备速率为标准IIC速率(100kb/s)
2.3 读写函数
2.3.1 写函数
def i2cMaster_WriteEx(self, *args, **kwargs):
# 写函数,有三个参数,addr,flag,data;
# addr:为从机设备的地址(AD5272设备是7位寻址,所以只计算7位就行);函数会自动填写写位0;
# flag: 控制开始和结束,I2C根据SDA、SCL的电平高低来决定是开始位还是结束位;这里一般填写START_AND_STOP,即一帧发送就理解结束。
# data: 要发送的数据
pass
2.3.2 读函数
def i2cMaster_ReadEx(self, *args, **kwargs):
# 读函数,有三个参数:addr,flag,bytesToRead;
# addr: 为从机设备的地址(AD5272设备是7位寻址,所以只计算7位就行);函数会自动填写读位0;
# flag: 控制开始和结束,I2C根据SDA、SCL的电平高低来决定是开始位还是结束位;这里一般填写START_AND_STOP,即一帧发送就理解结束。
# bytesToRead (int) : 从从机读取的字节数
pass
根据I2C的特点,读的时候需要先写一帧数据。
3.全部代码
import time
import ft4222.I2CMaster
dev = ft4222.openByDescription('FT4222 A')
dev.i2cMaster_Init(100)
write_50K_addr = 0x2f
""" 允许通过数字接口更新游标位置和50-TP存储器内容 """
unlock_cmd = bytes([0x1C, 0x03]) # 写控制寄存器解锁, 使能器件进行50-TP编程, 允许通过数字接口更新游标位置
dev.i2cMaster_WriteEx(write_50K_addr, ft4222.I2CMaster.Flag.START_AND_STOP, unlock_cmd)
time.sleep(0.01)
""" 将0x100写入RDAC寄存器;游标移到¼满量程位置 """
cmd = bytes([0x04, 0x50]) # RDAC寄存器指令
dev.i2cMaster_WriteEx(write_50K_addr, ft4222.I2CMaster.Flag.START_AND_STOP, cmd)
""" 准备从RDAC寄存器读取数据。 """
cmd = bytes([0x08, 0x00]) # 读RDAC寄存器指令,将读指令写给从机,然后调用读函数
dev.i2cMaster_WriteEx(write_50K_addr, ft4222.I2CMaster.Flag.START_AND_STOP, cmd)
time.sleep(0.01)
data1 = dev.i2cMaster_ReadEx(write_50K_addr, ft4222.I2CMaster.Flag.START_AND_STOP, 2) # 读取2字节
temp = (data1[0] & 0x03) * 256 + data1[1]
res = temp / 1024 * 50
print('--------------.' + str(res) + ' K') # 这里输出的是AW之间的电阻值,可以用万用表测量
""" 将RDAC寄存器内容存储到50-TP存储器中。SDO输出16位字,其中最后10位包含RDAC寄存器0x100的内容"""
cmd = bytes([0x0C, 0x00]) # RDAC寄存器指令
dev.i2cMaster_WriteEx(write_50K_addr, ft4222.I2CMaster.Flag.START_AND_STOP, cmd)