[经验知识] 【秀出我的 Linear模拟设计方案】+ LTC1661

[复制链接]
1199|1
 楼主| niuyaliang 发表于 2014-9-12 13:35 | 显示全部楼层 |阅读模式
LTC1661是Linear公司出的10位两路DAC芯片,每路DAC的电流为60ua,输入电压范围从2.7V-5.5V,输出轨到轨电压,可以驱动1000pf的容性负载。使用三个IO就可以驱动LTC1661。


 楼主| niuyaliang 发表于 2014-9-12 13:36 | 显示全部楼层
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. sbit LTC1661_CS=P1^0;           //定义片选信号端
  6. sbit LTC1661_SCLK=P1^1;          //定义片选时钟信号
  7. sbit LTC1661_DIN=P1^2;          //定义数据信号                                 7  6  5   4         3        2  1  0                                          7  6  5  4  3  2  1  0
  8. uchar table[2]={0xff,0x00};        //定义数据 其中 table[0]=0XFF  = A3 A2 A1 A0         D9 D8 D7 D6   table[1] =0x00=D5 D4 D3 D2 D1 D0 X1 X0

  9. void LTC1661_DAC(void);                  // LTC1661输出程序
  10. void LTC1661_start(void);           //启动信号
  11. void LTC1661_write_word(void);        //写一个字节
  12. void LTC1661_stop(void);                //停止信号
  13. void delayns(void);                           //延时us程序
  14. void delayms(uint);                            //延时毫秒程序
  15. void LTC1661_Init(void);           //LTC1661初始化
  16. void main()
  17. {
  18.     LTC1661_Init();
  19.         delayms(1000);
  20.        
  21.         while(1)
  22.         {
  23.             delayms(1000);
  24.         LTC1661_DAC();
  25.         }   
  26. }

  27. void delayms(uint xms)
  28. {
  29.     uint i,j;
  30.         for(j=xms;j>0;j--)
  31.             for(i=110;i>0;i--);

  32. }
  33. void LTC1661_start(void)
  34. {
  35.     LTC1661_CS=1;                   //SCLK低电平时,CS一个下降沿 启动信号
  36.         delayns();
  37.         LTC1661_SCLK=0;
  38.         delayns();
  39.         LTC1661_CS=0;
  40.         delayns();
  41. }
  42. void LTC1661_stop(void)
  43. {
  44.         LTC1661_CS=0;                   //CS一个上升沿, 时钟无效,时钟置1
  45.         delayns();
  46.         LTC1661_CS=1;
  47.         delayns();
  48.         LTC1661_SCLK=1;
  49.         delayns();  
  50. }
  51. void LTC1661_write_word(void)
  52. {
  53.     uchar i,temp;
  54.         temp=table[0];
  55.         for(i=0;i<8;i++)                // temp左移移位,最高位进入CY, LTC1661的发送顺序为 A3 A2 A1 A0  D9 D8 D7 D6
  56.         {                                               
  57.             temp=temp<<1;
  58.         LTC1661_SCLK=0;
  59.             delayns();
  60.                 LTC1661_DIN=CY;
  61.                 delayns();
  62.                 LTC1661_SCLK=1;
  63.                 delayns();
  64.         }
  65.         temp=table[1];                   // temp左移移位,最高位进入CY, LTC1661的发送顺序为  D5 D4 D3 D2         D1 D0 X1 X0
  66.         for(i=0;i<8;i++)                //X1,X0数据无意义
  67.         {
  68.             temp=temp<<1;
  69.         LTC1661_SCLK=0;
  70.             delayns();
  71.                 LTC1661_DIN=CY;
  72.                 delayns();
  73.                 LTC1661_SCLK=1;
  74.                 delayns();
  75.         }
  76.         LTC1661_SCLK=0;
  77.         delayns();
  78.         LTC1661_DIN=1;
  79.         delayns();
  80. }
  81. void LTC1661_DAC(void)                   //LTC1661_DAC输出
  82. {
  83.     LTC1661_start();
  84.         LTC1661_write_word();
  85.         LTC1661_stop();      
  86. }
  87. void LTC1661_Init(void)           //初始化 CS与SCLK均拉高
  88. {
  89.     LTC1661_CS=1;
  90.         delayns();
  91.         LTC1661_SCLK=1;
  92.         delayns();     
  93. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部