找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11021|回复: 13
打印 上一主题 下一主题
收起左侧

基于STM32的12位轨对轨DAC MCP4725驱动程序-项目在用的

  [复制链接]
跳转到指定楼层
楼主
ID:233200 发表于 2019-1-9 15:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
此款DAC芯片是SOP6封装的12位的轨对轨片子,正好补偿小容量STM32没有DAC功能的缺陷,IIC接口,外围电路很简单。输出函数直接调用:MCP4725_WriteData_Voltage(u16 Vout) 这个函数。补充一下:最大输出为5V,用到了电平转换。例如:****
头文件/初始化文件忽略
****
int main(void)
{        
         delay_init();            //延时函数初始化         
         MCP4725_Init();   //MCP4725初始化         
         while(1)
        {
   MCP4725_WriteData_Voltage(4095);   //输出最大   一般要求在100-4000之间
        }
}

制作出来的实物图如下:


单片机源程序如下:
  1. #include "MCP4725.h"
  2. #include "delay.h"
  3. #include "usart.h"       

  4. //初始化IIC接口
  5. void MCP4725_Init(void)
  6. {
  7.         IIC_Init();
  8. }

  9. //使用快速模式写命令写DAC寄存器
  10. void MCP4725_WriteData_Voltage(u16 Vout)   //电压单位mV
  11. {
  12.   u8 temp;
  13.         u16 Dn;
  14.         Dn = ( 4096 * Vout) / VREF_5V;
  15.         temp = (0x0F00 & Dn) >> 8;  //12位数据
  16.        
  17.         IIC_Start();
  18.         IIC_Send_Byte(0XC2);      //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 0 , 1;-> 1100 0010
  19.     IIC_Wait_Ack();         
  20.     IIC_Send_Byte(temp);        
  21.     IIC_Wait_Ack();         
  22.     IIC_Send_Byte(Dn);        //将低8位送到DAC寄存器
  23.         IIC_Wait_Ack();       
  24.     IIC_Stop();//产生一个停止条件         
  25.         delay_ms(10);       
  26. }

  27. void MCP4725_WriteData_Digital(u16 data)   //12位数字量
  28. {
  29.   u8 data_H=0,data_L=0;
  30.         data_H = ( 0x0F00 & data) >> 8;
  31.         data_L = 0X00FF & data ;
  32.         IIC_Start();
  33.         IIC_Send_Byte(0XC0);      //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 0 , 0;-> 1100 0000
  34.     IIC_Wait_Ack();         
  35.     IIC_Send_Byte(data_H);        
  36.     IIC_Wait_Ack();         
  37.     IIC_Send_Byte(data_L);
  38.         IIC_Wait_Ack();       
  39.     IIC_Stop();//产生一个停止条件         
  40.         delay_ms(10);       
  41. }
复制代码

所有资料51hei提供下载:
MCP4725驱动.7z (183.37 KB, 下载次数: 467)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:143694 发表于 2020-11-7 22:06 | 只看该作者
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累加地址试验串口输出观察地址和示波器上的电压
(最后需要注意的是 两个地方需要改地址)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:18570 发表于 2019-3-17 13:25 | 只看该作者
大哥,工程不完整啊,搞不好啊,能不能帮帮我
回复

使用道具 举报

地板
ID:233200 发表于 2019-3-20 10:16 | 只看该作者
zhouhuyin 发表于 2019-3-17 13:25
大哥,工程不完整啊,搞不好啊,能不能帮帮我

抱歉哦,由于这是公司的项目,产品在专利审查期,暂且不能外放。你可以把这个文件移植到正点原子的任意一个工程里面,调用那个函数就行了
回复

使用道具 举报

5#
ID:511461 发表于 2019-8-4 10:11 | 只看该作者
VREF_5V是4760是什么意思?4760是5V电压的DAC值吗
回复

使用道具 举报

6#
ID:511461 发表于 2019-8-4 11:34 | 只看该作者
楼主,我用了你的程序,MCP4725_WriteData_Voltage(2000),用万用表测得的电压是1.61V,但是我把2000改为3724,测得的电压还是1.61V,不知道哪里出问题了,楼主能指点一下吗

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:653629 发表于 2019-12-1 22:51 | 只看该作者
aaaaaa。 发表于 2019-8-4 11:34
楼主,我用了你的程序,MCP4725_WriteData_Voltage(2000),用万用表测得的电压是1.61V,但是我把2000改为 ...

你的A0是接的地,而楼主的A0接的是高,地址不对。
回复

使用道具 举报

8#
ID:383537 发表于 2020-1-16 23:35 | 只看该作者
楼主,3v3供电的测试没问题,用5v给MCP4725供电,用数字方式写4095时得到的电压只有2.7v

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:738489 发表于 2020-5-6 15:46 | 只看该作者
太感谢了,已经做出来了
回复

使用道具 举报

10#
ID:859394 发表于 2020-12-18 08:05 | 只看该作者
张小帅1126 发表于 2020-11-7 22:06
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累 ...

能分享一下您的程序吗
回复

使用道具 举报

11#
ID:184706 发表于 2021-4-21 18:58 | 只看该作者
这个东西真是不错,也很便宜
回复

使用道具 举报

12#
ID:858964 发表于 2021-4-28 17:03 | 只看该作者
张小帅1126 发表于 2020-11-7 22:06
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累 ...

卖家给的地址 0x60 ,
0x60=0110 0000,
左移1位得1100 0000=0xCO
回复

使用道具 举报

13#
ID:805866 发表于 2021-6-26 17:10 | 只看该作者
感谢分享。补充STM32的DAC,非常实用
回复

使用道具 举报

14#
ID:953049 发表于 2021-7-14 15:30 | 只看该作者
有MSP的历程吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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