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.

DAC8760

Other Parts Discussed in Thread: DAC8760

DAC8760程序一直没调好,求应用程序,谢谢

  • 网上搜搜嘛,老多的了

  • #include<msp430.h>
    #include<DAC8760.h>
    /***********************************
    函数功能:
    写数据
    **
    **
    参数:
    com
    :前
    8
    位命令;
    dat
    :数据
    **
    ***********************************/
    void DAC8760_write_byte(unsigned char com, unsigned int dat)
    {
    unsigned char i=0;
    DAC8760_LATCH_0_();
    DAC8760_SCLK_0_();
      for(i=0;i<8;i++)
    {
      DAC8760_SCLK_0_();
      if(com&0x80)
      {
       DAC8760_DIN_1_();
      }
      else
      {
       DAC8760_DIN_0_();
      }
      delay_us(1);
      DAC8760_SCLK_1_();
      delay_us(1);
      com<<=1;
    }
    for(i=0;i<16;i++)
    {
      DAC8760_SCLK_0_();
      if(dat&0x8000)
      {
       DAC8760_DIN_1_();
      }
      else
      {
       DAC8760_DIN_0_();
      }
      delay_us(1);
      DAC8760_SCLK_1_();
      delay_us(1);
      dat<<=1;
    }
    DAC8760_SCLK_0_();
    //delay_us(3);
    DAC8760_LATCH_1_();
    DAC8760_DIN_1_();
    //delay_us(3);
    }

    void DA_init()
    {
    CLk_clear;

       DAC8760_write_byte(DACResetReg,0x0001);

       DAC8760_write_byte(DACConfigurationReg,0x0088);


       DAC8760_write_byte(DACControlReg,0x1006);

       DAC8760_write_byte(DACDataReg,0xffff);
    // DAC8760_delay(10);
    }

    以前写的,希望对您有帮助!

  • 给你一点线路连接图

    程序设计调试的时候,可以先用模拟SPI接口,先调出来;用硬件的SPI接口发的会快点,按照2M速率算的话,2uS左右吧
    调完了,把程序改成硬件的SPI接口,要发24位数据,可以用硬件的SPI接口8位模式发送,发3次就可以了。

    你程序自己先写吧,有问题了再讨论

    给你一段仿SPI写数据的时序

    void DACx876_Write(u32 dat)
    {
            u8 i;
            
            for(i=23;i>0;i--)
            {
                    SCK_0;
                    LOCK_0;

                    if(dat & (1<<i) != 0)
                    {
                            DIN_1;
                    }
                    else
                    {
                            DIN_0;
                    }

                    Delay(1);

                    SCK_1;

                    Delay(1);
            }
            
            SCK_1;
            LOCK_1;
            DIN_1;
    }

    测过是没有问题的

  • 很多吗?能不能帮我搜搜,搜好后网址给我,我搜了很久都没搜出来

  • 大哥,这代码怎么看起来那么眼熟啊,怎么跟我的代码一模一样?这个真的能用吗

  • 输出为0,还是输出不正常呢?如果没有输出,首先检查一下硬件链接。如果输出不正常,可能是程序的问题。

  • 输出一直为0

    #include<msp430.h>
    #include<DAC8760.h>

    void DAC8760_delay(unsigned int j)
    {

         while(j--)
          {
           asm("NOP");
          }

    }
    /***************************
    **
    开始工作信号
    **
    ****************************/
    void DAC8760_start()
    {
    // DAC8760_SCLK_0_();
     DAC8760_LATCH_0_();
    // DAC8760_delay(1);
    // DAC8760_SCLK_1_();
    // DAC8760_SCLK_0_();
     DAC8760_LATCH_1_();
    // DAC8760_delay(1);
     DAC8760_LATCH_0_();
    // DAC8760_delay(3);
    }

    /***********************************
    函数功能:
    写数据

    **
    **
    参数:
    com
    :前
    8
    位命令;
    dat
    :数据

    **
    ***********************************/
    void DAC8760_write_byte(unsigned char com, unsigned int dat)
    {
     unsigned char i=0;
     unsigned long data;
     data=(((unsigned long)com)<<24)|(dat<<8);
     DAC8760_LATCH_1_();
     DAC8760_LATCH_0_();
     DAC8760_SCLK_0_();
     delay_us(5);
     //DAC8760_con_write();
     for(i=0;i<24;i++)
     {
      DAC8760_SCLK_0_();
      if(data&0x80000000)
      {
       DAC8760_DIN_1_();
      }
      else
      {
       DAC8760_DIN_0_();
      }
      //delay_us(2);
      DAC8760_SCLK_1_();

     // delay_us(2);
      data<<=1;
     }

     DAC8760_SCLK_0_();
     delay_us(1);
     DAC8760_LATCH_1_();
     delay_us(5);
     //DAC8760_DIN_1_();

    }
    /***************************
     * 读字节

     **************************/
    uint DAC8760_read_byte(unsigned char com, unsigned int dat)
    {
     uint data=0;
     uchar i;
     DAC8760_write_byte(com,dat);
     DAC8760_DIN_0_();
     DAC8760_LATCH_0_();
     DAC8760_SCLK_1_();
     for(i=0;i<8;i++)
     {
      DAC8760_SCLK_1_();

      DAC8760_SCLK_0_();


     }
     for(i=0;i<16;i++)
     {
      DAC8760_SCLK_1_();

      if(DAC8760_SDO_())
      {
       data|=0x01;
      }
      DAC8760_SCLK_0_();
      //DAC8760_delay(2);
      data<<=1;
     }
     DAC8760_LATCH_1_();
     return data;
    }


    void DA_init()
    {

      CLk_clear;
       DAC8760_write_byte(DACResetReg,0x0001);
       DAC8760_write_byte(DACConfigurationReg,0x0088);
       DAC8760_write_byte(DACControlReg,0x1006);
       DAC8760_write_byte(DACDataReg,0xffff);

    }

     

    这是我的程序。电路连接都是按照技术手册连的,除了没接隔离器。用读函数读出一直为0.。能否帮我看下程序,谢谢