当前位置: 首页 > 知识库问答 >
问题:

AD5270带Python的SPI电位计

弘柏
2023-03-14

我尝试使用AD5270,20KOhm SPI电位器的个人项目与我的树莓派3B。我将一些Arduino库代码翻译成Python语言,但看起来它不起作用。我不能测试电位器是否配置良好,所以我读取电阻器值,总是从SPI寄存器中获得0。

问题:我不知道我的书写是否很好,因为我不能探测电阻。为了知道它是否有效,我读取寄存器并始终接收0x00。写作和/或阅读不起作用。

期望:读我写的东西。

硬件设置:

  • !SYNC=CE0=PIN24
  • DIN=MISO=PIN19
  • SDO=MOSI=PIN21
  • SLCK=SCLK=PIN23

带有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)

共有2个答案

洪富
2023-03-14

我终于明白了诀窍。不要忘记在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()
令狐功
2023-03-14

从硬件设置:

  • DIN=MISO=PIN21(通过10欧姆电阻器)

DIN输入到AD5270,因此输出RPI,所以应该是MOSI。SDO也有同样的问题。

 类似资料:
  • 问题内容: 现在我有: 除非我要转换没有微秒的字符串,否则此方法效果很好。如何指定微秒是可选的(如果它们不在字符串中,则应将其视为0)? 问题答案: 您可以使用一个块:

  • SPI

    machine.SPI machine.SPI 类是 machine 模块下面的一个硬件类,用于对 SPI 的配置和控制,提供对 SPI 设备的操作方法。 SPI 是一个由主机驱动的同步串行协议。在物理层,总线有三根:SCK、MOSI、MISO。多个设备可以共享同一总线,每个设备都由一个单独的信号 SS 来选中,也称片选信号。 主机通过片选信号选定一个设备进行通信。SS 信号的管理应该由用户代码负

  • SPI

    通过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

    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

    SPi 双拼输入法 for iPhone。 在 iPhone 上简单地打双拼。 全键盘 简单快速 无联想 小词库 无须“完全访问” 保护隐私 支持的双拼方案(无形码):自然码、小鹤双拼、微软拼音 2003 双拼、拼音加加双拼、智能 ABC 双拼、紫光拼音双拼 键盘界面主要基于 archagon/tasty-imitation-keyboard。

  • 如果我使用,我会得到以下错误: 我找了很长时间,但什么也找不到。