找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

stm32的MCP4725程序遇到问题了,求解决

查看数: 6160 | 评论数: 14 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-10-23 19:28

正文摘要:

接线时,OUT直接接万用表的正极,GND接万用表的负极,VCC接单片机的5v引脚,GND也接单片机的地,但是主函数中调用MCP4725_WriteData_Voltage(4000);  不论取值时2000,4000,还是1000,还是4095,万用表测 ...

回复

ID:491875 发表于 2023-8-10 12:48
Y_G_G 发表于 2021-7-26 20:34
两年了,又看到这个帖子了,在数据手册的27页面和43页面有说明:高位是1100,A2,A1的值要看你手头上芯片的丝 ...

这个已经很贴切的说明了地址(A2,A1),丝印AJ对应A0(00),AP对应A1(01),AQ对应A2(10),AR对应A3(11),A0的地址由用户自己设定0(接地)或者1(通过10k左右电阻接VDD)。
ID:401564 发表于 2021-7-26 20:34

两年了,又看到这个帖子了,在数据手册的27页面和43页面有说明:高位是1100,A2,A1的值要看你手头上芯片的丝印,A0就是芯片的A0引脚电平,一定要接VCC或者GND,不能悬空


ID:848585 发表于 2021-7-26 15:22
张小帅1126 发表于 2020-11-7 22:05
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累 ...

那两个地方啊
ID:143694 发表于 2020-11-7 22:05
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累加地址试验串口输出观察地址和示波器上的电压
(最后需要注意的是 两个地方需要改地址)
ID:511461 发表于 2020-7-19 11:20
谢谢大佬们指点
ID:383537 发表于 2020-2-22 10:15
Y_G_G 发表于 2019-10-27 01:34
这不是第一步
首先,你要先看到MCP4725上面的丝印是什么,然后才能确定地址位是多少,并不是绝对的0xC2的, ...

感谢大佬提醒
ID:401564 发表于 2019-10-27 17:13
aaaaaa。 发表于 2019-10-26 18:53
我这样做提示,没有问题吧,但我的程序现在还是不能用

还有A0端口,要么上拉,要么接地,不能空着
最后,根据A0的高低电平和丝印来先确定器件的地址
ID:18297 发表于 2019-10-27 11:06
我认为你的MCP4725的A0脚应该接地或上拉,不应该悬空。
这样程序对了,输出结果才对。
ID:630813 发表于 2019-10-27 10:58
怎么看丝印啊
ID:401564 发表于 2019-10-27 01:34
aaaaaa。 发表于 2019-10-26 18:53
我这样做提示,没有问题吧,但我的程序现在还是不能用

这不是第一步
首先,你要先看到MCP4725上面的丝印是什么,然后才能确定地址位是多少,并不是绝对的0xC2的,不同的丝印的器件地址位是不同的
看不清楚的话可以用放大镜或者手机拍下来看
先确定了器件地址再说
ID:511461 发表于 2019-10-26 18:53
我这样做提示,没有问题吧,但我的程序现在还是不能用
ID:511461 发表于 2019-10-26 18:49
//使用快速模式写命令写DAC寄存器
void MCP4725_WriteData_Voltage(u16 Vout)   //电压单位mV
{
  u8 temp;
        u16 Dn;
        LED_Init();                                  //初始化与LED连接的硬件接口
        Dn = ( 4096 * Vout) / VREF_5V;
        temp = (0x0F00 & Dn) >> 8;  //12位数据
       
        IIC_Start();
        IIC_Send_Byte(0XC2);      //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 0 , 1;-> 1100 0010
  IIC_Wait_Ack();         
  IIC_Send_Byte(temp);        
  IIC_Wait_Ack();         
  IIC_Send_Byte(Dn);        //将低8位送到DAC寄存器
        IIC_Wait_Ack();       
        LED0=0;                 //   我用LED0的亮做了提示
  IIC_Stop();//产生一个停止条件         
        delay_ms(10);       
}
结果LED亮了,是不是代表我的IIC地址没错
ID:401564 发表于 2019-10-24 14:03
MCP4725的器件地址并不是固定的,它是在出厂的时候设定的,在数据手册的后面有流明的
所以,你网上下载的程序代码有可能和你现在手头上的IC器件地址是不对应的
C我不会,STM32没用过
但原理是一样的,你可以在写完器件的8位数据的应答信号之后加一个标志位,并通过屏幕或者一个LED指示灯提示出来,如果没有提示,就表明器件的地址不对,或者是其它的问题
只要能确定4725可以正常应答了,那么器件的地址就是对的
ID:511461 发表于 2019-10-23 19:38
程序的话,我就看的网上的例程

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

Powered by 单片机教程网

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