This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DAC8771:运行 DAC8771时出错

Guru**** 2382630 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/994393/dac8771-error-to-run-dac8771

器件型号:DAC8771

您好 Joseph、 我已经使用示波器和逻辑器件进行了测试、向您发送完整的代码 和图像。
  

SPI 命令是 ok,极性也是一样的,  

我应该在连接中遇到任何问题吗?

#include
#define res 6
#define CLR 7
#define LDAC 7.
#define cs 8.
int recv=0;
void setup(){
Serial.begin(9600);
//将您的设置代码放在这里,运行一次:
引脚模式(Cs、输出);
引脚模式(LDAC、输出);
引脚模式(CLR、输出);
PinMode (res、OUTPUT);
SPI.begin();
SPI.beginTransaction(SPISettings(40000、MSBFIRST、SPI_MODE1));
// SPI.beginTransaction(SPISettings(40000、MSBFIRST、SPI_MODE0));
SPI.begin();
digitalWrite (CLR、low);
digitalWrite (res、low);
延迟(100);
digitalWrite (res、high);
digitalWrite (cs、HIGH);
digitalWrite (LDAC、low);

void loop(){


spiWrite (0x02,0b000000010000);//0b000000010000
延迟(100);
spiWrite (0x06、0b0000000000000000);//b0000000000000000
延迟(100);
spiWrite (0x07、0b0000001000011111);//b0000001000011111
延迟(100);
spiWrite (0x03、0b0000000000000000);//b0000000000000000
延迟(100);
spiWrite (0x04、0b000100000000);//0b000100000000
延迟(100);
spiWrite (0x05、0b1111111111111111);//0b11111111111111111111
延迟(1000);


void spiWrite (int address、int value){
//将 SS 引脚置为低电平以选择芯片:
digitalWrite (cs、low);
delayMicroseconds (2);
//通过 SPI 发送地址和值:
spi.transfer (address);
//spi.transfer (value);
spi.transfer16 (value);
delayMicroseconds (2);
//将 SS 引脚置为高电平以取消选择芯片:
digitalWrite (cs、HIGH);
spi.endTransaction();


我有0.235v en 负极引脚和3.3V 非正极 ARM。

我认为 SPI 在时钟的下降沿具有正确的模式、当发送24位命令时、芯片选择为低电平。

 您能 看到 任何想法或错误吗?

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Adrian、


    我在这里没有发现任何问题、但可以尝试一些事情。 我读过了您的配置、我认为这就是您拥有的:

    0x020100 - DAC 硬件、软件清零被禁用、内部基准、透明模式被启用
    0x060000 -选择降压/升压转换器 A
    0x07021F -降压/升压跟踪、±15V、已启用
    0x030000 - CRC、SDO 被启用(我可以更改此值来启用 SDO、以便我可以读回它)
    0x041000 -输出被启用、0-5V 范围
    0x05FFFF - DAC 数据设置为全范围

    我认为唯一可能改变的是0x03000。 我认为启用 SDO 可能会有所帮助、这样您就可以从器件读回配置。

    我查看了电路板上的配置。 我注意到的一件事是您有一些驱动/LDAC 引脚的东西、但该引脚当前接地在 JP14。 除此之外、我将验证/RESET 是否最终为高电平(将其设置为低电平将使器件保持复位状态)。 我还想确保 DVDD 由 Arduino 驱动。 此时、插入 JP15处的跳线、并将 DVDD-EN 连接到接地端。 这意味着 DVDD 必须由外部提供。 我想您现在有一个连接到 J1的 DVDD 电源连接。 我还会确保 EVM 和 Arduino 之间具有公共接地连接。

    如前所述、我将检查器件是否接收到您发送的任何内容。 这就是我建议通过寄存器0x03启用 SDO 的原因。 读回寄存器以确保值符合预期。

    吴约瑟

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joseph、
     n´t、我更改了 sdo 使能、测试了寄存器是否被写入、检测到0x07寄存器无法写入、 它始终具有0x0000值 、但另一个寄存器写入正确、我不知道为什么 发生这种情况?

    我确认:

    LDAC 为低电平
    RESET 为高电平
    DVDD 为5V 至 arduno
    和 GND 介于 Arduino 和 EVM 之间

    读取寄存器:

    2 ---- 0000000000010000 ---- 好的
    6 ---- 000000000000000000000000 ------ 好的
    7 ---- 000000000000000000000000 ------ 不正常
    3 ---- 0000000001000000 ------ 好的
    4 ---- 1101000000000001---- 好的
    5 ---- 111111111111111111111111--- 好的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     写入0x07寄存器时出现问题?  我n´t 在该寄存器中写入任何值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Adrian、  

    对于0x07寄存器、您需要设置 CCLP 位以启用对 PCLMP 和 NCLMP 位的写入以设置电压。 CCLP 位是0x07寄存器中的位11:10。  

    我认为、如果您将0x07寄存器设置为0x061F 而不是0x021F、它应该能够正确写入。

    吴约瑟

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Adrian、

    您是否还可以检查0x06寄存器 是否写入 了0x060001?

    吴约瑟