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.

[参考译文] DAC53608:数模转换器

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1063580/dac53608-digital-to-analog-converter

器件型号:DAC53608

尊敬的所有人:
我想使用线库通过 Arduino 控制10位 DAC。
我仔细阅读了 DAC53608的数据表、并编写了以下代码以获得5伏电压。

#include
字节 DAC= 0x48;//DAC_Address
字节命令;//Config_Device 和 Output_Address
字节 data1;//Data_LSB
字节 data2;//Data_MSB


void setup(){
Serial.begin(9600);
Wire.begin();
命令= 0x01;
Data1=0x00;
Data2=0xFE;
延迟(2000年);

Wire.beginTransmission(DAC);
Wire.write (command);
Wire.write (data1);
Wire.write (data2);
wire.endTransmission ();
serial.println ("设备配置完成");

void loop(){

命令= 0x08;
Data1=0xff;
Data2=0xff;

Wire.beginTransmission(DAC);
Wire.write (command);
Wire.write (data1);
Wire.write (data2);
wire.endTransmission ();


```μ A


```μ A


但没有信号。
是否有人面临同样的问题?

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

    您好!

    您可以分享您的原理图吗? 什么是基准电压?

    此致、

    AK

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

    感谢您的回答。 请参见下图

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

    您好!

    VDD 和 VREF_IN 上施加的电压是多少?

    此致、

    AK

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

    VDD=5伏...并尝试使用3.3伏

    VREF IN =开路并尝试使用 GND 和 Vdd

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

    您好!

    将 VDD 和 VREF_IN 连接到5V、并写入以下内容。 此外、/LDAC 和/CLR 都应拉高。

    A0应为高电平、以便 I2C 地址变为0x49 (7位地址)

    地址0x01、器件配置寄存器写入0x0000

    2、接下来在任何通道中写入 DAC_DATA (例如、在地址0x08中、写入0xFFFF。

    您应该在通道0中看到大约5V 的电压。

    此致、

    AK

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

    非常感谢您的回复。
    我尝试了你的建议,但不幸的是,它不起作用。 我真的很困惑  

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

    您好!

    请探测所有信号并确保其正确

    /LDAC、/CLR 和 VREF 和 A0

    您需要将地址更改为0x49、代码错误、0x01应为0x0000、

    此致、

    AK

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

    您好!
    我探测所有引脚、它们为5伏(/LDAC、/CLR、VREF、AO)。  
    代码如下所示:

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

    您好!

    您的控制器的逻辑电平是否正确?

    根据屏幕截图、我可以看到最大电平仅为500mV、或者示波器设置了一些衰减?

    此致、

    AK

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

    是的、正确、该值必须放大10倍、因此它是5000mV。

    此致  
    Salam

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

    您好!

    明白了、代码明智、对我来说一切都很好。 您能否读回器件 ID 以查看器件对 I2C 命令的响应?

    此致、

    AK

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

    首先、我通过 I2C 扫描仪检查了 DAC 的地址、当将 A0连接到 GND 时、我得到了0x48、当 A0连接到 VDD 时、地址为0x49。
    然后、当我发送 SCL 8位、然后等待来自 DAC 的 ACK 信号时、我检查了 DAC 的响应。 如果我启用 DAC、则会接收到 ACK、但当 DAC 关闭时、没有 ACK、则控制器不会发送更多的 SCL 位。

    此致  
    Salam

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

    您好!

    这意味着器件正在正确响应。 连接到 VDD 和 VREF 的电容器的值是多少?

    请执行以下调试。 不是向通道0发送数据、而是尝试通过写入0x03来广播数据?

    作为调试,避免循环并将所有内容放入 void setup()

    #include <Wire.h>
    
    
    //I2C address definitions
    #define I2C_ADDR_ALO 0x49 //I2C address definitions
    
    void setup()
    {
    
      int MSB=0, LSB=0; //MSB, LSB variables for reading back registers
    
      Serial.begin(9600);
      Serial.print("Programming...");
      Wire.begin(); // join i2c bus (address optional for master)
    
      //Power-up the device and channels
      //WRITE DEVICE_CONFIG(0x01), 0x0000
      Wire.beginTransmission(I2C_ADDR_ALO); 
      Wire.write(byte(0x01)); // DEVICE_CONFIG Register
      Wire.write(byte(0x00)); // 
      Wire.write(byte(0x00)); //
      Wire.endTransmission(); // stop transmitting
    
      //Program 2.625V on channel A
      //WRITE DACA_DATA(0x08), 0x0868 //10-bit MSB aligned
      Wire.beginTransmission(I2C_ADDR_ALO);
      Wire.write(byte(0x08)); // DACA_DATA Register
      Wire.write(byte(0x08)); //
      Wire.write(byte(0x68)); // 
      Wire.endTransmission(); // stop transmitting
      
      Serial.println("Done");
      
    void loop()
    {
    
    }
    
    

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

    电容器值为0.1uF。

    这话什么意思? 我应该发送0x03而不是配置设备? 或通道0的地址?
    喜欢这个吗?

    #include <Wire.h>
    
    
    //I2C address definitions
    #define I2C_ADDR_ALO 0x49 //I2C address definitions
    
    void setup()
    {
    
      int MSB=0, LSB=0; //MSB, LSB variables for reading back registers
    
      Serial.begin(9600);
      Serial.print("Programming...");
      Wire.begin(); // join i2c bus (address optional for master)
    
      //Power-up the device and channels
      //WRITE DEVICE_CONFIG(0x01), 0x0000
      Wire.beginTransmission(I2C_ADDR_ALO); 
      Wire.write(byte(0x03)); // DEVICE_CONFIG Register
      Wire.write(byte(0x00)); // 
      Wire.write(byte(0x00)); //
      Wire.endTransmission(); // stop transmitting
    
      //Program 2.625V on channel A
      //WRITE DACA_DATA(0x08), 0x0868 //10-bit MSB aligned
      Wire.beginTransmission(I2C_ADDR_ALO);
      Wire.write(byte(0x08)); // DACA_DATA Register
      Wire.write(byte(0x08)); //
      Wire.write(byte(0x68)); // 
      Wire.endTransmission(); // stop transmitting
      
      Serial.println("Done");
      
    void loop()
    {
    
    }

    或类似这个

    #include <Wire.h>
    
    
    //I2C address definitions
    #define I2C_ADDR_ALO 0x49 //I2C address definitions
    
    void setup()
    {
    
      int MSB=0, LSB=0; //MSB, LSB variables for reading back registers
    
      Serial.begin(9600);
      Serial.print("Programming...");
      Wire.begin(); // join i2c bus (address optional for master)
    
      //Power-up the device and channels
      //WRITE DEVICE_CONFIG(0x01), 0x0000
      Wire.beginTransmission(I2C_ADDR_ALO); 
      Wire.write(byte(0x01)); // DEVICE_CONFIG Register
      Wire.write(byte(0x00)); // 
      Wire.write(byte(0x00)); //
      Wire.endTransmission(); // stop transmitting
    
      //Program 2.625V on channel A
      //WRITE DACA_DATA(0x08), 0x0868 //10-bit MSB aligned
      Wire.beginTransmission(I2C_ADDR_ALO);
      Wire.write(byte(0x03)); // DACA_DATA Register
      Wire.write(byte(0x08)); //
      Wire.write(byte(0x68)); // 
      Wire.endTransmission(); // stop transmitting
      
      Serial.println("Done");
      
    void loop()
    {
    
    }

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

    您好!

    我假设两个引脚都具有0.1uF 的电容。

    请先尝试此操作。

    #include <Wire.h>
    
    
    //I2C address definitions
    #define I2C_ADDR_ALO 0x49 //I2C address definitions
    
    void setup()
    {
    
      int MSB=0, LSB=0; //MSB, LSB variables for reading back registers
    
      Serial.begin(9600);
      Serial.print("Programming...");
      Wire.begin(); // join i2c bus (address optional for master)
    
      //Power-up the device and channels
      //WRITE DEVICE_CONFIG(0x01), 0x0000
      Wire.beginTransmission(I2C_ADDR_ALO); 
      Wire.write(byte(0x01)); // DEVICE_CONFIG Register
      Wire.write(byte(0x00)); // 
      Wire.write(byte(0x00)); //
      Wire.endTransmission(); // stop transmitting
    
      //Program 2.625V on channel A
      //WRITE DACA_DATA(0x08), 0x0868 //10-bit MSB aligned
      Wire.beginTransmission(I2C_ADDR_ALO);
      Wire.write(byte(0x08)); // DACA_DATA Register
      Wire.write(byte(0x08)); //
      Wire.write(byte(0x68)); // 
      Wire.endTransmission(); // stop transmitting
      
      Serial.println("Done");
      
    void loop()
    {
    
    }

    此致、

    AK

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

    我非常感谢您的帮助、但遗憾的是、它不起作用。
    我将尝试使用 Raspberry Pi 3来查看发生了什么。

    此致
    Salam

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

    您好!

    好的。

    请告诉我状态。

    此致、

    AK

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

    你(们)好

    首先、我将 DAC 与 Arduino 和 Raspberry PI 相连。 并发送命令、得到相同的结果。


    所有输出通道在不启用通道命令的情况下均可提供16mV 的电压。


    当我发送 ENABLE 命令 以启用通道 A 时、电压降至2.8mV、其他电压仍为16mV。  
    等等、启用其他通道、但其他通道下降至0.2mV。

    当我关闭 DAC 时、一切都会恢复到原始状态。

    我尝试读取寄存器、始终没有数据、接收到0x0000。
    这意味着、在我看来、enable 命令运行得非常完美、但寄存器不会从我们的代码中接收任何数据。

    此致。

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

    您好 Salam、

    AK 将在周末度假后查看此信息。

    谢谢、

    Paul

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

    尊敬的 Paul:
    非常感谢您、
    最后、它起作用。
    CLR --> 5V
    Vref-->5V
          

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

    感谢您的所有贡献、  
    最后、它起作用。  

    它必须建立这些连接  


    CLR --> 5V
    Vref-->5V