MCP4725使用教程
总的来说这个DAC的读写还是比较简单的,不知道为啥网上的教程总是不放波形图,也不分析,没次干看教程总是看地人头疼,哎。
1.前言
前面画的AD/DA的板子到了,早上刚刚焊接完成,于是就开始写程序了。原本想看一下网上的教程,但是真的找不到好教程,没办法只能自己翻手册去慢慢啃了。这不调试完毕了吗,于是就写一篇文章吧,也相当于给我自己一个参考手册。
2.IIC地址
手册上给出了如下的图片
看起来A0~A2都能变,但是手册上还有一句话
在默认状态下A1与A2的值都是00,好吧那就剩A0了
也就是第六脚
当接高的时候就是110 0001也就是0x61
当接地的时候就是110 0000也就是0x60
本文章中使用地址是0x60
3.写入
原厂提供了三种写入模式
这里说一下第二种和第三种模式的区别
我们都知道EEPROM的写入是需要花费时间的,如果我们需要流畅写入时,eeprom的写入时间肯定会阻碍dac的输出;但eeprom的好处是断电保持,因此我们默认上电的dac输出就是eeprom的电压,这里大家可以根据实际需要选择合适的模式。
2.1写入寄存器
手册里给出的过程如下
这里我来一个个分析
这里是芯片地址,也就是0x60,不多说了
关键是第二位的,一共包含两个设置信息,前端的C0~C2也就是我们刚刚说到的模式
这里我们是只写入寄存器,那么就应该是010
在设置完模式后我们还可以设置下拉电阻,芯片内部在输出前可以挂载三种电阻,以提高DAC的带载能力,这里我们测试就使用正常模式了,也就是00
在图中的这些打叉的位就是不重要位,可以写0也可以写1,不过我推荐写0,否则比较麻烦
那么我们最后第二位就是0100 0000也就是0x40
而后面两位就是数据了,由高到低的12位
但是由于IIC一次是8位数据,我们的数据被分为了两端,所以我们处理程序的时候要注意一下
发送第一段的时候,可以直接右移,将低四位给忽略掉
而发送低四位的时候,可以先将高八位忽略,但是由于发送的数据是右对齐,而我们芯片内部数据是左对齐,所以我们要将处理过的数据再左移四位
我们来测试一下,这里我输出电压是1.2V
那么我的数据应该是1.2/3.3*4096=1489也就是0x5D1
波形如下
测试效果如下,可以看到还是准的
2.2写入寄存器与EEPROM
波形与上一个是类似的
唯一变的是C0~C2,我们要换成011
那第二位的数据也就是0110 0000也就是0x60
这次我输出1V电压那么数据应该是1/3.3*4096=1241也就是4D9
波形如下
实测如下
2.3快速读写
相较于写寄存器,快速读写会少一位数据
其中第二位的第1,2个数据都是0以此表示快速模式,然后选择下拉电阻这里是00
第二位的高四位和第三位全部都是数据,总共12位
因此我们处理数据要重新变
我们第二位的数据因为都是高位,所以我们可以直接右移8位,直接把低位的数据覆盖掉,同时高位的数据会补0,刚好就是四个0,我们就不用清了,如果各位觉得不保险还可以手动清。
低八位的数据我们直接对高四位的数据清除就行了
我们来测试一下,这次测试0.8V
波形如下
实测
没毛病
4.读取
这里说一下为什么要读取
还记得芯片里有eeprom不?啊哈!没错,这个eeprom写入也是要时间的,手册上给出的时间默认是25ms最长50ms
因此我们可以读一下数据来看看是否写入完毕了。
其过程如下
第一位是地址,不多说了。我们从第二位开始看
首先就是判忙位,为1写入完毕,为0表示正在写入
之后是POR,这是什么?
这是复位的状态,当芯片内部发生错误时,芯片会自动复位。通过读取这一位相当于判断芯片是否正常工作
然后是PD0,PD1,可以查看当前设置的下拉电阻
之后的3,4位是寄存器内部值
5,6位是eeprom内部值
因此我们整段程序除开地址位一共是5位数据要读取
我们来测试一下
OK,没问题
5.总结
总的来说这个DAC的读写还是比较简单的,不知道为啥网上的教程总是不放波形图,也不分析,每次干看教程总是看得人头疼,哎。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)