找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8467|回复: 1
收起左侧

TLV5618 DA转换驱动程序

[复制链接]
ID:71407 发表于 2015-1-1 17:25 | 显示全部楼层 |阅读模式
下面是基于STC系列单片机的TLV5618驱动程序,该程序的硬件是基于5V供电的,参考电压为2.5V,编译环境为KEIL C,已调试成功。
  1. //=====================================================================
  2. //                    TLV5618 DA转换驱动程序
  3. //硬件连接: DIN ——P0^0;  
  4. //          SCLK ——P0^1;   
  5. //          CS   ——P0^2;      
  6. //          VDD --逻辑电源(+5V)
  7. //          AGND --GND(0V)

  8. //说明   参考电压为0—3.5V,本程序为2.5V
  9. //       输出模拟电压为:V=2*Vref*(dignum/0x1000) 注:dignum后四位为:0x0000~~0x0fff
  10. //注意: 所需输入的数字信号值为16位数,其中D15~~D12为特殊位设置,D11~~D0为数据位000~~fff


  11. #include <STC89C51RC.h>      //STC单片机头文件
  12. #include <intrins.h>
  13. #define uint unsigned int
  14. #define uchar unsigned char
  15. #define Channal_A     1    //通道A
  16. #define Channal_B     2    //通道B
  17. #define Channal_AB    3    //通道A&B
  18. //**************************一下为函数声明修**************************************
  19. static void DA_conver(uint Dignum);
  20. extern void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model);
  21. //**************************修改硬件时要修改的部分********************************
  22. sbit DIN   = P0^0;     //数据输入端
  23. sbit SCLK = P0^1;     //时钟信号
  24. sbit CS    = P0^2;     //片选输入端,低电平有效
  25. //=================================================================
  26. // 函数名称 :void DA_conver(uint Dignum)
  27. // 函数功能 :进行DA转换
  28. // 入口参数 :Dignum:根据说明设置转化数据.头四位为特殊位用于选择转化方式,
  29. //            以及用于通道选择.请自行设置.后12位为需要转换的值
  30. // 出口参数 :无
  31. //=================================================================
  32. void DA_conver(uint Dignum)
  33. {
  34. uint Dig=0;
  35. uchar i=0;
  36. SCLK=1;
  37. CS=0;           //片选有效
  38. for(i=0;i<16;i++)   //写入16为Bit的控制位和数据
  39. {
  40.    Dig=Dignum&0x8000;
  41.    if(Dig)
  42.    {
  43.     DIN=1;
  44.    }
  45.    else
  46.    {
  47.     DIN=0;
  48.    }
  49.    SCLK=0;
  50.    _nop_();
  51.    Dignum<<=1;
  52.    SCLK=1;
  53.    _nop_();
  54. }
  55. SCLK=1;
  56. CS=1;       //片选无效
  57. }
  58. //=================================================================
  59. // 函数名称 :void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
  60. // 函数功能 :模式、通道选择并进行DA转换
  61. // 入口参数 :Data_A:A通道转换的电压值
  62. //            Data_B:B通道转换的电压值
  63. //            Channal:通道选择,其值为Channal_A,Channal_B,或Channal_AB
  64. //            Model:速度控制位 0:slow mode 1:fast mode
  65. // 出口参数 :无
  66. // 说明:     Data_A,Data_B的范围为:0—0x0fff
  67. //            本程序如果只需要一个通道时,另外一个通道的值可任意,但是不能缺省
  68. //=================================================================
  69. void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
  70. {
  71. uint Temp;
  72. if(Model)
  73. {
  74.    Temp=0x4000;
  75. }
  76. else
  77.     {
  78.    Temp=0x0000;
  79. }
  80. switch(Channal)
  81. {
  82.     case Channal_A:         //A通道
  83.          DA_conver(Temp|0x8000|(0x0fff&Data_A));
  84.       break;
  85.     case Channal_B:       //B通道
  86.          DA_conver(Temp|0x0000|(0x0fff&Data_B));
  87.     break;
  88.     case Channal_AB:
  89.          DA_conver(Temp|0x1000|(0x0fff&Data_B));        //A&B通道
  90.          DA_conver(Temp|0x8000|(0x0fff&Data_A));
  91.     break;
  92.     default:
  93.          break;
  94. }
  95. }
  96. //=================================================================
  97. // 函数名称 :int main(void)
  98. // 函数功能 :主函数,无实际意义,仅测试TLV5618用
  99. // 入口参数 :无 1-A;2-B;3-A&B
  100. // 出口参数 :无
  101. //=================================================================
  102. int main(void)
  103. {
  104.    Write_A_B(0x0355,0x0000,Channal_A,0);   //测量A通道
  105.    Write_A_B(0x0000,0x0600,Channal_B,1);   //测量B通道
  106. // Write_A_B(0x0504,0x0a47,Channal_AB,1);   //测量AB通道,测量时需屏蔽上面两句
  107.    while(1);
  108. }
复制代码



回复

使用道具 举报

ID:382697 发表于 2018-8-6 21:00 | 显示全部楼层
大佬用过tlv2548这款ad芯片吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表