我尝试使用AD5270,20KOhm SPI电位器的个人项目与我的树莓派3B。我将一些Arduino库代码翻译成Python语言,但看起来它不起作用。我不能测试电位器是否配置良好,所以我读取电阻器值,总是从SPI寄存器中获得0。
问题:我不知道我的书写是否很好,因为我不能探测电阻。为了知道它是否有效,我读取寄存器并始终接收0x00。写作和/或阅读不起作用。
期望:读我写的东西。
硬件设置:
带有1uF外部电容器和3V3电源(来自Raspberry)。
此处提供了AD5270的数据表。
数据表后面的最低限度代码不起作用:
spi = spidev.SpiDev()
spi.open(spi_bus, spi_device_select)
spi.max_speed_hz = 50000 # Datasheet p7
spi.mode = 1 # CPOL = 0, CPHA = 1 (Datasheet p7)
# Datasheet example
data = [0x1C, 0x03]
r = spi.xfer(data)
print(r)
data = [0x05, 0x00]
r = spi.xfer(data)
print(r)
data = [0x08, 0x00]
r = spi.xfer(data)
print(r)
data = [0xC0, 0x00]
r = spi.xfer(data)
print(r)
我终于明白了诀窍。不要忘记在SDO线路上添加上拉功能,并为AD5270配置Spidev。这段代码工作得很好:
# SPI test code for AD5270BRMZ-20
import time
import spidev
spi_bus = 0 # SPI0
spi_device_select = 0 # CE0
spi = spidev.SpiDev()
spi.open(spi_bus, spi_device_select)
spi.max_speed_hz = 50000 # Datasheet p7
spi.mode = 1 # CPOL = 0, CPHA = 1 (Datasheet p7)
spi.lsbfirst = False # Datasheet p18
MAX_RESISTANCE = 20000.0
WRITE_CTRL_REG = 0x1C
READ_CTRL_REG = 0x20
WRITE_RDAC = 0x04
READ_RDAC = 0x08
RDAC_WRITE_PROTECT = 0x02
def AD5270_CalcRDAC(resistance):
return int((resistance / MAX_RESISTANCE) * 1024.0)
def AD5270_ReadReg(command):
data = [(command & 0x3C), 0]
r = spi.xfer2(data)
data = [0x00, 0x00]
r2 = spi.xfer2(data)
result = r2[0]
result = (result << 8) | r2[1]
return result
def AD5270_WriteReg(command, value):
ui16Command = (command & 0x3C) << 8 | (value & 0x3FF)
data = [(ui16Command >> 8) & 0xFF, ui16Command & 0xFF]
spi.xfer2(data)
def AD5270_ReadRDAC():
RDAC_val = AD5270_ReadReg(READ_RDAC)
RDAC_val &= 0x03FF
return ((RDAC_val) * MAX_RESISTANCE) / 1024.0
def AD5270_WriteRDAC(resistance):
RDAC_val = AD5270_CalcRDAC(resistance)
spi.xfer2([WRITE_CTRL_REG, RDAC_WRITE_PROTECT])
AD5270_WriteReg(WRITE_RDAC, RDAC_val);
return ((RDAC_val * MAX_RESISTANCE) / 1024.0)
while(1):
AD5270_WriteRDAC(10000.0) # Write 10KOhm
print(AD5270_ReadRDAC())
time.sleep(1)
spi.close()
从硬件设置:
DIN输入到AD5270,因此输出RPI,所以应该是MOSI。SDO也有同样的问题。
问题内容: 现在我有: 除非我要转换没有微秒的字符串,否则此方法效果很好。如何指定微秒是可选的(如果它们不在字符串中,则应将其视为0)? 问题答案: 您可以使用一个块:
machine.SPI machine.SPI 类是 machine 模块下面的一个硬件类,用于对 SPI 的配置和控制,提供对 SPI 设备的操作方法。 SPI 是一个由主机驱动的同步串行协议。在物理层,总线有三根:SCK、MOSI、MISO。多个设备可以共享同一总线,每个设备都由一个单独的信号 SS 来选中,也称片选信号。 主机通过片选信号选定一个设备进行通信。SS 信号的管理应该由用户代码负
通过SPI设备读取 w25q 的 ID 数据 通过SPI设备读取 w25q 的 ID 数据 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-15 mison
SPI设备接口 结构体 struct rt_spi_message SPI消息 更多... struct rt_spi_configuration SPI从设备的配置参数 更多... struct rt_spi_bus SPI总线控制块 更多... struct rt_spi_ops SPI总线的操作方法 更多... struct rt_spi_
SPi 双拼输入法 for iPhone。 在 iPhone 上简单地打双拼。 全键盘 简单快速 无联想 小词库 无须“完全访问” 保护隐私 支持的双拼方案(无形码):自然码、小鹤双拼、微软拼音 2003 双拼、拼音加加双拼、智能 ABC 双拼、紫光拼音双拼 键盘界面主要基于 archagon/tasty-imitation-keyboard。
如果我使用,我会得到以下错误: 我找了很长时间,但什么也找不到。