微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 多功能调试测试助手-精密电压源AD5791

多功能调试测试助手-精密电压源AD5791

时间:10-02 整理:3721RD 点击:
多功能调试测试助手-精密电压源AD5791
环境说明:CubeSuites+

  1. 文件:
  2. AD5791.c   AD5791.h
  3. 函数:
  4. AD57XX_Init(AD5791);
  5. void AD57XX_SetRegisterValue(unsigned char registerAddress, unsigned long registerValue) unsigned char SPI_Write(unsigned char* data,unsigned char bytesNumber)void AD57XX_SetDacValue(unsigned long value)
  6. 细列:
  7. unsigned char AD57XX_Init(char deviceVersion){  
  8.             unsigned char status = 0;
  9.         unsigned int i;
  10.         

  11.         AD5791_CLR_H;     //清零
  12.             AD5791_LDAC_H;   //不加载输出
  13.         AD5791_RESET_L;   //复位AD5791
  14.         
  15.         for(i=0;i<2000;i++)  
  16.         {NOP();}
  17.         
  18.             AD5791_RESET_H;  
  19.         
  20.         for(i=0;i<2000;i++)
  21.         {NOP();}
  22.          
  23.     switch(deviceVersion)
  24.     {
  25.      case AD5760:
  26.          deviceBitNumber = 16;
  27.          break;
  28.     case AD5780:
  29.          deviceBitNumber = 18;
  30.          break;
  31.     case AD5781:
  32.          deviceBitNumber = 18;
  33.          break;
  34.     case AD5790:
  35.          deviceBitNumber = 20;
  36.          break;
  37.     case AD5791:
  38.          deviceBitNumber = 20;
  39.          break;      
  40.     }
  41.     AD57XX_SetRegisterValue(AD57XX_REG_CTRL,AD57XX_CTRL_RBUF|AD57XX_CTRL_BIN2SC|AD57XX_CTRL_SDODIS|AD57XX_CTRL_LINCOMP(AD57XX_LINCOMP_12V_SPAN));
  42.   //配置AD5791控制寄存器:不用内部放大器A1,偏移二进制编码        (*直接关系输出值*)                     
  43.     return(status);   
  44. }

  45. //设置寄存器值
  46. //unsigned char registerAddress:寄存器地址
  47. //unsigned long registerValue:寄存器配置值
  48. void AD57XX_SetRegisterValue(unsigned char registerAddress, unsigned long registerValue)
  49. {
  50.     unsigned char writeCommand[3] = {0, 0, 0};
  51.     unsigned long spiWord         = 0;

  52.     spiWord = AD57XX_RW_(0) |
  53.               AD57XX_ADDR_REG(registerAddress) |
  54.               registerValue;
  55.     writeCommand[0] = (spiWord & 0xFF0000) >> 16;
  56.     writeCommand[1] = (spiWord & 0x00FF00) >> 8;
  57.     writeCommand[2] = (spiWord & 0x0000FF);
  58.     SPI_Write( writeCommand, 3);
  59. }

  60. //同步串行通讯写
  61. unsigned char SPI_Write(unsigned char* data,unsigned char bytesNumber)
  62. {

  63.         unsigned char i=0,j=0;
  64.         
  65.         AD5791_SYNC_L;
  66.         for(j=0;j<bytesNumber;j++)
  67.         {           
  68.                 for(i=0;i<8;i++)
  69.                 {         
  70.                         if ((data[j]&0x80)==0x80)
  71.                            {AD5791_SDIN_H;}
  72.                              else
  73.                         {AD5791_SDIN_L;}
  74.                         
  75.                         AD5791_SCLK_L;
  76.                         NOP();        NOP();        NOP();        NOP();        NOP();NOP();        NOP();        NOP();        NOP();        NOP();
  77.                         AD5791_SCLK_H;
  78.                         NOP();        NOP();        NOP();        NOP();        NOP();NOP();        NOP();        NOP();        NOP();        NOP();
  79.                         
  80.                         data[j]<<=1;  
  81.                 }
  82.         }
  83.         AD5791_SYNC_H;
  84. }

复制代码



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top