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.

[参考译文] DAC81416EVM:CAN't 从 DAC 读取数据

Guru**** 2466550 points


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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1359611/dac81416evm-can-t-read-data-from-dac

器件型号:DAC81416EVM

我正在尝试将数据发送到 DAC、并 访问寄存器以读取数据。

但它仅 回显寄存器地址(23-16位)、15-0bit 中没有数据

DAC 输出:DAC6、DAC7

串行输出:0x970000 -> 0x960000

连接:

Arduino SCK -> J8.8

Arduino MISO -> J8.3

Arduino MOSI -> J8.4

Arduino SS -> J8.2

VCC -> 20V 来自电源

VDD / VAA -> 5V 电源

VIO ->来自 Arduino 的5V、连接至 J8.5

VSS -> GND

J10 -> 1-2

J11 -> 1-2

J12 -> 1-2

Arduino 代码:

#包含
#包含

//寄存器//
#define R_NOP 0x00
#define R_DEVICEID 0x01
#define R_STATUS 0x02
#define R_SPIC72 0x03
#define R_GENCONFIG 0x04
#define R_BRDCONFIG 0x05
#define R_SYNCCONFIG 0x06
#define R_TOGGCONFIG0 0x07 //DAC[15:8] Toggle Configuration 寄存器//
#define R_TOGGCONFIG1 0x08 // DAC [7:0]切换配置寄存器//
#define R_DACPDWN 0x09 //设置为1时关闭//
#define R_DACRANGE0 0x0A //DAC[15:12]范围寄存器//
#define R_DACRANGE1 0x0B //DAC[11:8]范围寄存器//
#define R_DACRANGE2 0x0C //DAC[7:4]范围寄存器//
#define R_DACRANGE3 0x0D //DAC[3:0]范围寄存器//
#define R_TRIGGER 0x0E
#define R_Brdcast 0x0F
#define R_DAC0 0x10
#define R_DAC1 0x11
#define R_DAC2 0x12
#define R_DAC3 0x13
#define R_DAC4 0x14
#define R_DAC5 0x15
#define R_DAC6 0x16
#define R_DAC7 0x17
#define R_DAC8 0x18
#define R_DAC9 0x19
#define R_DAC10 0x1A
#define R_DAC11 0x1B
#define R_DAC12 0x1C
#define R_DAC13 0x1D
#define R_DAC14 0x1E
#define R_DAC15 0x1F
#define R_OFFSET0 0x20 //DAC[14-15;12-13]差动偏移寄存器//
#define R_OFFSET1 0x21 //DAC[10-11;8-9]差动偏移寄存器//
#define R_Offset2 0x22 //DAC[6-7;4-5]差动偏移寄存器//
#define R_OFFSET3 0x23 //DAC[2-3;0-1]差分偏移寄存器//

void setup(){
Serial.begin(115200);
SPI.beginTransaction(SPISettings(100000、MSBFIRST、SPI_MODE1);
SPI.begin();
延迟(100);

//设置 DAC7 0-5V DAC6 0-20V//
digitalWrite (SS、low);
DAC_WRITE (R_DACRANGE2);
SPI.transfer (0x02);
SPI.transfer (0x00);
digitalWrite (SS、HIGH);
延迟(100);

//为 SPI 读取启用 SDO //
digitalWrite (SS、low);
DAC_WRITE(R_SPIC856);
SPI.transfer (0x0A);
spi.transfer (0x84);
digitalWrite (SS、HIGH);
延迟(100);

//加电6-7个通道//
digitalWrite (SS、low);
DAC_WRITE (R_DACPWDWN);
spi.transfer (0xFF);
SPI.transfer (0x3F);
digitalWrite (SS、HIGH);
延迟(100);

//将所有 DAC 设置为异步模式
digitalWrite (SS、low);
DAC_WRITE (R_SYNCCONFIG);
SPI.transfer (0x00);
SPI.transfer (0x00);
digitalWrite (SS、HIGH);
延迟(100);

digitalWrite (SS、low);
DAC_WRITE (R_GENCONFIG);
spi.transfer (0x01);
SPI.transfer (0x00);
digitalWrite (SS、HIGH);
延迟(100);

spi.endTransaction ();

void loop(){

digitalWrite (SS、low);
DAC_WRITE (R_DAC7);
spi.transfer (0xAA);
spi.transfer (0xAA);
延迟(1);
digitalWrite (SS、HIGH);

延迟(50);

digitalWrite (SS、low);
DAC_WRITE (R_DAC6);
spi.transfer (0x88);
spi.transfer (0x88);
延迟(1);
digitalWrite (SS、HIGH);

延迟(50);

Read_reg (R_DAC7);

延迟(500);

digitalWrite (SS、low);
DAC_WRITE (R_DAC7);
SPI.transfer (0xCC);
SPI.transfer (0xCC);
延迟(1);
digitalWrite (SS、HIGH);

延迟(50);

digitalWrite (SS、low);
DAC_WRITE (R_DAC6);
spi.transfer (0x22);
spi.transfer (0x22);
延迟(1);
digitalWrite (SS、HIGH);

延迟(50);

Read_reg (R_DAC6);

延迟(500);

void read_reg (uint8_t reg){
uint16_t val;

uint8_t val2;  

digitalWrite (SS、low);
spi.transfer (0x80 | reg));
spi.transfer (0xFF);
spi.transfer (0xFF);
延迟(1);
digitalWrite (SS、HIGH);

digitalWrite (SS、low);
VAL=SPI.transfer16 (0x00);
val2=spi.transfer (0x00);
延迟(1);
digitalWrite (SS、HIGH);

serial.println (val、hex);
serial.println ("1");
serial.println (val2、hex);
serial.println ("2");

void DAC_WRITE (int DAC_reg)
{
int DAC_regW = DAC_reg | 0x00;
spi.transfer (DAC_regW);

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

    您好!

    我看不到您的代码存在任何直接问题。

    能否像您所做的那样、简单地测试在 SPI 配置寄存器中启用 SDO、然后尝试读回 SDO?

    查看在示波器或逻辑分析仪上绘制的图很有用。

    谢谢。
    卢卡斯

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

    您好!

    我尝试访问 几个寄存器并 读回(EVICEID、SPIC64、PWDWN)。

    它们回显正确的数据。

    只有 DAC[0-15]回显错误的数据0x0000

    DAC[0-15]会不会是只写?

    但在数据表中、它似乎是 R/W。

    谢谢。

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

    您好!

    是的、在进一步检查这一点之后、数据表中有一个拼写错误。

    DAC0 - DAC15数据寄存器是只写寄存器、不是读取/写入寄存器。

    谢谢。
    卢卡斯