MCP4725使用教程

1.前言

前面画的AD/DA的板子到了,早上刚刚焊接完成,于是就开始写程序了。原本想看一下网上的教程,但是真的找不到好教程,没办法只能自己翻手册去慢慢啃了。这不调试完毕了吗,于是就写一篇文章吧,也相当于给我自己一个参考手册。

2.IIC地址

手册上给出了如下的图片

622b391301354552a66055d341e536a1.png

看起来A0~A2都能变,但是手册上还有一句话

163afb1112f64bfa8dd7d24ea6d8567e.png 

在默认状态下A1与A2的值都是00,好吧那就剩A0了

a0a44f405d904e2d8a59a8af9cddcdbf.png

也就是第六脚

当接高的时候就是110 0001也就是0x61

当接地的时候就是110 0000也就是0x60

本文章中使用地址是0x60

3.写入

原厂提供了三种写入模式

2c98520296024e9a947a743d24979f43.png

这里说一下第二种和第三种模式的区别

我们都知道EEPROM的写入是需要花费时间的,如果我们需要流畅写入时,eeprom的写入时间肯定会阻碍dac的输出;但eeprom的好处是断电保持,因此我们默认上电的dac输出就是eeprom的电压,这里大家可以根据实际需要选择合适的模式。

2.1写入寄存器

手册里给出的过程如下

653291faf3e9427585b6153ceba48898.png

这里我来一个个分析

这里是芯片地址,也就是0x60,不多说了

1b5bcceee4224b77a282e5ceb614789e.png

 关键是第二位的,一共包含两个设置信息,前端的C0~C2也就是我们刚刚说到的模式

97ddd78660ba4cc3adbd3621391e82f8.png

这里我们是只写入寄存器,那么就应该是010

1f0d8d50387a469496212e1bd00561bc.png

在设置玩模式后我们还可以设置下拉电阻,芯片内部在输出前可以挂载三种电阻,以提高DAC的带载能力,这里我们测试就使用正常模式了,也就是00

ccacf2813231476f9f6825f8558c24c8.png

在图中的这些打叉的位就是不重要位,可以写0也可以写1,不过我推荐写0,否则比较麻烦

311ccd3074bd4fd5bba13d24cdee51f5.png

那么我们最后第二位就是0100 0000也就是0x40

而后面两位就是数据了,由高到低的12位

2db672ee3c7c4ac8806b6d14a47b17dd.png 

但是由于IIC一次是8位数据,我们的数据被分为了两端,所以我们处理程序的时候要注意一下

125a7b14defb4ca69fec43463ab879cf.png 

发送第一段的时候,可以直接右移,将第四位给忽略掉

而发送低四位的时候,可以先将高八位忽略,但是由于发送的数据是左对齐,而我们芯片内部数据是右对齐,所以我们要将处理过的数据再左移四位

我们来测试一下,这里我输出电压是1.2V

那么我的数据应该是1.2/3.3*4096=1489也就是0x5D1

波形如下

8ac59ecd2e1d4092915c415ea5449ab9.png

测试效果如下,可以看到还是准的

81c9cb86d6e249879a5bb5eb7063d9a7.jpeg

2.2写入寄存器与EEPROM

波形与上一个是类似的

67b832bd52bc406da835beecd4d896b7.png

唯一变的是C0~C2,我们要换成011

e401667061fa444da0908bf3c03241df.png

那第二位的数据也就是0110 0000也就是0x60

这次我输出1V电压那么数据应该是1/3.3*4096=1241也就是4D9

波形如下

110fa4abf2d44c8a83bbe7d574a0827c.png

实测如下

a4c4e256360a4ea8bf6eed8964b14b0f.jpeg

2.3快速读写

相较于写寄存器,快速读写会少一位数据

0cf7f47532a14ac78511406e3f41e475.png

其中第二位的第1,2个数据都是0以此表示快速模式,然后选择下拉电阻这里是00

5b6c18b7871e42b5b3ae05bc6e9f42f5.png

第二位的高四位和第三位全部都是数据,总共12位

031b7691dfdb4008a61ff6c11103cbd9.png

因此我们处理数据要重新变

82ea44a2d2374f83b283993cd685be94.png

我们第二位的数据因为都是高位,所以我们可以直接右移8位,直接把低位的数据覆盖掉,同时高位的数据会补0,刚好就是四个0,我们就不用清了,如果各位觉得不保险还可以手动清。

低八位的数据我们直接对高四位的数据清除就行了

我们来测试一下,这次测试0.8V

 波形如下

18545ac1a6744440b3dc94c74b6d970d.png

实测

04cf2e5ae36d481fad29c822cc467c9c.jpeg

没毛病

4.读取

这里说一下为什么要读取

还记得芯片里有eeprom不?啊哈!没错,这个eeprom写入也是要时间的,手册上给出的时间默认是25ms最长50ms

c8aa86e0d9b042a6aec33831575c789d.png

因此我们可以读一下数据来看看是否写入完毕了。

其过程如下

68d1b2c96c1445baa9f86e54abf4819c.png

第一位是地址,不多说了。我们从第二位开始看

首先就是判忙位,为1写入完毕,为0表示正在写入

9e8ab9a5fa0444229786fb920bc236de.png

之后是POR,这是什么?

这是复位的状态,当芯片内部发生错误时,芯片会自动复位。通过读取这一位相当于判断芯片是否正常工作

e1a39115defe4bd9968295e784811e84.png

然后是PD0,PD1,可以查看当前设置的下拉电阻

2e727c2843174c1d978b6bab91941fca.png

之后的3,4位是寄存器内部值

337d2e6a64d94ce1a6424562e4498859.png

5,6位是eeprom内部值

d0b2e47314f242ca9ab4805de2638f94.png

因此我们整段程序除开地址位一共是5位数据要读取

我们来测试一下

fb7fae5b707a474b9bf0f0e28fedbddd.png

OK,没问题

5.总结

总的来说这个DAC的读写还是比较简单的,不知道为啥网上的教程总是不放波形图,也不分析,没次干看教程总是看地人头疼,哎。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践

原文来源: https://tidb.net/blog/a38c72a4 本文作者:骏伯网络 唐帆,PingCAP 贺美存 骏伯网络简介 广州骏伯网络是一家以数据驱动的科技公司,聚焦移动互联网营销服务,坚持以客户为中心,深耕 APP、运营…

Python对日期的一些操作

1. 把这种日期 Mon Jan 29 11:10:49 0800 2024 转换成 ‘2024/2/1 10:50:38’ 这里定义一个func 传入英文日期,返回标准日期格式 def time_formater(input_time_str): input_format %a %b %d %H:%M:%S %z %Y output_format %Y-%m-%d %H:%M:%S return dat…

STL篇三:list

文章目录 前言1.list的介绍和使用1.1 list的介绍1.2 list的使用1.3 list的迭代器的失效 2.list的模拟实现2.1 结点的封装2.2 迭代器的封装2.2.1 正向迭代器2.2.2 反向迭代器 2.3 list功能的实现2.3.1 迭代器的实例化及begin()、end() 2.3.2 构造函数2.3.3 赋值运算符重载2.3.4 …

字节跳动推出超高清文生视频模型,效果比Gen-2更强!

字节跳动的研究人员开发了一种超高清文生视频模型MagicVideo-V2。 MagicVideo-V2公布的实验评测数据显示,视频的高清度、润滑度、连贯性、文本语义还原等方面,比目前主流的文生视频模型Gen-2、Stable Video Diffusion、Pika 1.0等更出色。 这是因为&am…

Quartus IP学习之ISSP(In-System Sources Probes)

一、ISSP IP概要: ISSP:In-System Sources & Probes Intel FPGA IP 作用: 分为In-System Sources与In-System Probesn-System Sources,输入端,等价于拨码开关,通过输入板载FPGA上的拨码开关状态改变…

SpringBoot整合Flowable最新教程(二)启动流程

介绍 文章主要从SpringBoot整合Flowable讲起,关于Flowable是什么?数据库表解读以及操作的Service请查看SpringBoot整合Flowable最新教程(一);   其他说明:Springboot版本是2.6.13,java版本是1…

go消息队列RabbitMQ - 订阅模式-direct

1.发布订阅 在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下: 队列与交换机的绑定,不能…

Powershell Install 一键部署Prometheus

前言 Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上…

jmeter设置关联

一、为什么要设置关联? http协议本身是无状态的,客户端只需要简单向服务器请求下载某些文件,无论是客户端还是服务端都不去记录彼此过去的行为,每一次请求之间都是独立的。如果jmeter需要设置跨线程组脚本,就必须设置…

【开源】基于JAVA+Vue+SpringBoot的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

Day 1. 学习linux高级编程之Shell命令和IO

1.C语言基础 现阶段学习安排 2.IO编程 多任务编程(进程、线程) 网络编程 数据库编程 3.数据结构 linux软件编程 1.linux: 操作系统:linux其实是操作系统的内核 系统调用:linux内核的函数接口 操作流程&#xff…

深入分析AOP+自定义注解+RBAC实现操作权限管理设计思想

深入分析AOP自定义注解RBAC实现操作权限管理设计思想!经过三个小节的部署,我们已经把这个思想走了一遍。下面内容是对于此次设计思想的一个详细介绍。帮助大家完善透彻的了解,到底自定义注解是如何实现的。以及,权限管理的核心思想…