IIC通信——PCF8591的D/A转换

news/2025/3/29 6:59:58/

PCF8591具有数模信号转换的功能,可以将单片机UART引脚发送的数字信号转换为模拟信号,单片机的P1.6引脚连接SDA数据线,负责在上面写字节和传送字节,P1.7引脚连接SCL时钟线,相当于节拍器,控制着数据的写入和传送,我们需要实现的是数字信号转换为模拟信号,而AIN0-AIN3引脚是模拟信号的输入端,用不到所以悬空,A0-A2是硬件地址端,这里将它们接地,因此引脚地址000_,再加上厂家已经给定的器件地址1001,组成器件总地址,AOUT引脚是数模转换的输出端,接到示波器的任何一个引脚,将转换成的模拟信号发送给示波器,使它显示相应波形图。

 声明SCL为单片机P1.7引脚,SDA为单片机P1.6引脚,定义全局变量IIC_ERROR。

延时函数:由四个_nop_()函数,实现一个4us的延时,方便后面程序直接调用。 

开始状态SCL处于高电平时,SDA从高电平转向低电平,表示一个开始状态,代码中先将SDA和SCL拉高,延时函数给硬件一定时间反应,然后再将SDA拉低,实现SDA由高到低的转变,再接延时函数给硬件一定时间反应,最后将时钟线SCL拉低为后面IICsendByte()实现输出(写)一个字节做准备。

 

停止状态SCL处于高电平时,SDA从低电平转向高电平,表示一个停止状态,代码中先将SCL拉高,SDA拉低,延时函数给硬件一定时间反应,然后再将SDA拉高,实现SDA由低到高的转变,再接延时函数给硬件一定时间反应,最后将时钟线SCL拉低。 

发送字节函数:函数定义了一个形式参数wd,用来实现后面器件总地址、控制字节、数据的发送,IIC总线以字节为单位传送数据,一个字节由8位二进制数组成,该函数通过(bit)(wd&0x80)实现强制转换为该字节的最高位,又通过wd<<=1非循环左移实现字节的每一位都能在一次循环中作为最高位输出,从而实现一个字节的输出。在IIC_Start()函数结束之前我们已经将SCL线拉低,此时在此函数中可以向SDA线上写入数据,两个_nop_()延时之后,再将SCL拉高,此时数据开始传送,延时之后再将SCL线拉低为下一次循环做准备,如此循环8次,就可以将一个字节中的8个二进制代码发送完成,从而实现一个字节的发送输出。发送完一个字节之后,等待4us延时,将SDA(PCF8591在收到每个字节之后,置SDA为低电平作为确认应答,所以需要先将其拉高)、SCL(当其为1时才能传送数据)拉高等待PCF8591的应答,并将SDA的状态赋值给IIC_ERROR,用于后面DAC_PCF8591函数判断是否将字节正确发送以便决定是否执行其他操作,之后将SCL置0以便继续使用发送字节函数发送其他字节。

数模信号转换函数:定义了形参CtrlByte作为传进来的控制字节,

形参wdata作为传进来的数据字节,调用IIC_Start()函数开始,调用发送字节函数发送第一个字节(PCF8591地址选择字节),判断PCF8591是否接收到(如果PCF8591接收到,就会置SDA为0作为应答,即IIC_ERROR为0,此时循环终止,继续后续操作),如果接收到,再发送第二个字节(PCF8591控制字节),如果接收到,再发送数据并继续检查应答位,如果接收到,调用IIC_Stop()函数结束。

主函数:在循环内完成以下操作,数字信号0x00~0xff:0000 0000~1111 1111,转换为十进制就是0~255,对应的模拟信号为0~5,传过去的i会自动以二进制的形式参与运算,先从0000 0000到1111 1111形成一个上升的波形,再从1111 1111到0000 0000形成一个下降的波形,从而共同形成一个一上一下的波。


http://www.ppmy.cn/news/218406.html

相关文章

智能卡7816协议

前言&#xff1a; 为了方便查看博客&#xff0c;特意申请了一个公众号&#xff0c;附上二维码&#xff0c;有兴趣的朋友可以关注&#xff0c;和我一起讨论学习&#xff0c;一起享受技术&#xff0c;一起成长。 1.硬件接口 1.1端跨解释&#xff1a; 连接接口解释VCC电源输入&a…

IPC$共享和其他共享(C$、D$)

目录 net use共享命令的用法 IPC$ IPC空连接 ipc$使用的端口 关闭IPC$共享 net use共享命令的用法 net use #查看连接net share #查看本地开启的共享net share ipc$ #开启ipc$共享net …

蓝牙耳机哪款性价比高音质好?性价比高的无线蓝牙耳机

TWS耳机市场近年来火爆市场&#xff0c;&#xff0c;很多厂商都开始进入蓝牙耳机市场&#xff0c;手机品牌也在发布相关的蓝牙耳机&#xff0c;在如此消费市场庞大的情况下&#xff0c;几百元的价格就可以买到一副称心的蓝牙耳机了&#xff0c;下面整理了几款性价比高一直好的蓝…

音质好的蓝牙耳机有哪些?音质好的蓝牙耳机推荐

不知道从什么时候开始&#xff0c;无线耳机已经逐渐替换掉了有线耳机慢慢变成了生活中的必需品。它的存在就像是给人们打造一个属于自己安静舒服的小世界&#xff0c;在人来人往中享受一场酣畅淋漓的听觉盛宴&#xff0c;因此&#xff0c;拥有一款音质好的耳机就显得非常重要了…

哪款蓝牙耳机音质比较好?盘点四款降噪效果好的蓝牙耳机

近几年蓝牙耳机的发展可以说是非常的迅速。特别是在最近几年&#xff0c;国内市场涌现了一批非常优秀的蓝牙耳机品牌&#xff0c;这些品牌无论是在设计还是硬件配置上都是非常不错的。当然也可能是因为选择太多了&#xff0c;大家也不知道该怎么挑选。那么接下来我会为大家推荐…

什么无线耳机音质最好?音质非常好的几款蓝牙耳机推荐

现在的人无论去哪里&#xff0c;几乎都是手机不离手&#xff0c;不管走到哪&#xff0c;你都可以看到有人拿着手机在玩&#xff0c;但这时候就面临一个问题&#xff0c;可能在你刷视频、打电话的时候&#xff0c;外放的声音就很尴尬&#xff0c;这时候蓝牙耳机可就起了大作用。…

蓝牙耳机哪款性价比高音质好?2023公认音质最好的蓝牙耳机

如今音乐成了当下解压的方式之一&#xff0c;甚至是集中注意力的法器。耳机作为传播音乐的媒介&#xff0c;每个人对自己的专属耳机总有那么点小追求&#xff0c;高质量的耳机不仅保护双耳&#xff0c;带来的音质能让你的耳朵分分钟怀孕&#xff0c;下面分享几款2023年音质高的…

ethereum和eos的收费模型比较

Ethereum 开发者需要为智能合约发布付费&#xff0c;用户需要为使用和交易付费发布一个智能合约最少需要32000 gas&#xff0c;另外存储代码还需每字节200 gas的费用gas单位换算Gas limit&#xff0c;gas price的关系 gas limit是用户愿意为某个行为或者交易花费的gas的最大值g…