蓝桥杯单片机之PCF8591的使用

news2024/11/26 1:48:11

下文仅仅讲怎么使用。

本文章参考:

【蓝桥杯】PCF8591 A/D D/A转换应用_pcf8591中输出电压2v怎么表示-CSDN博客

蓝桥杯电子类单片机学习三——PCF8591 AD/DA转化器,AT24C02 EEPROM存储器(iic驱动)_蓝桥杯da转换输出的是什么-CSDN博客

【蓝桥杯单片机进阶强化-02】PCF8591的基本原理与A/D转换应用_蓝桥杯怎么调节rb2电阻-CSDN博客

icc总线在蓝桥杯单片机中总共会考三个地方:分别是ADC(光敏电阻、RB2模拟电压值) 、DAC输出电压、AT24C02中EEPROM存储器。

这里讲一下其中PCF8591的使用(即包括ADC和DAC电压输出两个知识点)

总的知识概括(icc总线)

(1)大致介绍

以下纯复制以下博主讲的内容,我觉得讲的很好,单纯想记录下来,如果侵权可联系我删掉谢谢!!!蓝桥杯电子类单片机学习三——PCF8591 AD/DA转化器,AT24C02 EEPROM存储器(iic驱动)_蓝桥杯da转换输出的是什么-CSDN博客

(2 )icc底层代码的编写

和之前其他的onewire,ds1302的底层代码编写文件大致相同。

首先是把结构写好:

其次就是函数声明,(去.c文件中找):

最后执行发现会有报错还有引脚没有定义,此时就要去看硬件图,定义相关引脚:这里就是

SDA为P2^1

SCL为P2^0.

 PCF8591

硬件图如下:

对于PCF8591的使用,仅仅就使用方面,只了解下述几个部分即可:

1 ROM检测(设备地址)

刚刚提到icc上挂了两个设备,一个是PCF8591,一个是AT24C02,简单来理解,ROM检测就是判断icc要使用的设备是这两个的其中哪一个。

如上图,PCF8591的设备地址(8位)包括三部分,一个是固定部分为1001,一个是可编程部分,再加上最后一位为读写控制位。

在蓝桥杯中,看PCF8591的硬件图可知A0~A2是接地的,故可编程部分也变成了固定的0000,故只剩下最后一位可变。

所以记住就好!!PCF8591的设备的读操作地址为:0x91;而写操作地址则为:0x90

2 控制寄存器

进行了ROM检测后,就可以输入控制字节了,可以理解为告诉PFC8591要执行个什么功能吧。

(以下图片来源小蜜蜂老师)

这里参考第二篇博文的内容,总结一下比赛常用的知识:(以下的位是按输入的二进制来看的,与图片是对应的如 0100 0000 中的0是二进制的第一位,即固定为0,对应图片上的第七位。)

第一位:固定为0

第二位:1:DA转化,0:AD转化

第三 四位:用于选择PCF8591的工作模式,通常选第一个模式,即00

第五位:固定为0

第六位:自增模式,一般为0

第七八位:选择通道

通道0对应的是00,蓝桥杯板子上连接的是一个空引脚,用于后续拓展或者DA输出

通道1对应01,蓝桥杯板子上连接的是光敏电阻

通道2对应10,蓝桥杯板子上连接的是LM324,没见使用过

通道3对应11,蓝桥杯板子上连接的是电位计

 总结:

光敏传感器接到AIN1,通道1;控制寄存器应写入:0x01
 电位器Rb2接到AIN3,通道3;控制寄存器应写入:0x03

DA输出:即第二位为1,写入:0x40但有时也会写0x43,看题有没有特意说要通道三输出

3 代码编写使用

PFC8591的代码编写有点像串口通信的结构。

串口通信是: 中断+发送函数

PFC8591是:采样电压函数+电压输出函数

3.1初始化函数

简单来说分为4部分:写 —— 等待电压转换 —— 读 —— 电压转换

写:

初始化 IIC_Start();

写入设备地址0x90(+等待    IIC_WaitAck();)

输出ADC(+等待)

停止

    IIC_Start();					
	IIC_SendByte(0x90);		//PCF8591的写设备地址 
	IIC_WaitAck();				
	IIC_SendByte(0x40); 	//输出DAC		
	IIC_WaitAck();  						
	IIC_Stop();
等待电压转换

就一句话:其实就是一个Delay

读:

初始化 IIC_Start();

读设备地址0x91(+等待)(注意,这里是写入

读采样数据(将其放到一个变量里面)

产生非应答信号IIC_SendAck(1);

停止

    IIC_Start();									
	IIC_SendByte(0x91); 	//PCF8591的读设备地址
	IIC_WaitAck(); 								
	adc_value = IIC_RecByte();	//读出AD采样数据
	IIC_SendAck(1);			 	//产生非应答信号 								
	IIC_Stop();
电压转换

原理是电压储存是8位(0~255),对应的是0~5V,则相当于把5V电压分为255份则:

假设输出为2V,对应储存的数转为十进制为x:

\frac{3}{5} = \frac{x}{255}

则得到x为 (2*255)/ 5 = 102。

3.2发送函数

初始化

写入设备地址(+等待)

输出DAC(+等待)

发送采样到的数据(上面储存的变量值)

产生非应答信号

停止

void Set_PCF8591_DAC(unsigned char dat)
{
	IIC_Start();					
	IIC_SendByte(0x90);		//PCF8591的写设备地址 
	IIC_WaitAck();	
	IIC_SendByte(0x40); 	//输出DAC,转换AIN3	
	IIC_WaitAck(); 								
	IIC_SendByte(dat); 		//设置DAC电压输出参数
	IIC_WaitAck(); 			//产生非应答信号 								
	IIC_Stop();
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dg_mmld部分复现

Ours ( K ˆ \^{K} Kˆ2)复现结果– Photo:0.9634730538922156 (at Epoch 23) Art:0.8125 (at Epoch 23) Cartoon:0.7713310580204779 (at Epoch 18) 差距在可接受范围内 辅助信息 If you send 作者 an e-mail, 作者 will tell you a URL w…

C/C++中const关键字用法总结

C基础专栏:http://t.csdnimg.cn/4FdOH 目录 1.引言 2.修饰变量 2.1.修饰普通变量 2.2.修饰指针 2.3.修饰对象 3.修饰函数形参 4.修饰函数返回值 5.修饰类成员函数 6.const与constexpr区别 7.总结 1.引言 在面试的过程,面试官经常都会问到const…

arm-linux-gnueabihf-gcc默认目录

默认编译的头文件目录: /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib 默认编译的库文件目录: /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/ …

[C++]哈希应用之位图布隆过滤器

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在闪烁 前言: 我们之前…

Hadoop安装部署-NameNode高可用版

Hadoop分布式文件系统支持NameNode的高可用性,本文主要描述NameNode多节点高可用性的安装部署。 如上所示,Hadoop分布式文件系统部署了NameNode的Master主节点以及NameNode的Slave副节点,当Master主节点发生故障变得不可用时,ZooK…

Vulnhub:DEVCONTAINER: 1

目录 信息收集 arp nmap nikto whatweb WEB 信息收集 dirmap 文件上传 提权 系统信息收集 横向提权 信息泄露 get root 信息收集 arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:2f:dd…

Windows Server 2008添加Web服务器(IIS)、WebDAV服务、网络负载均衡

一、Windows Server 2008添加Web服务器(IIS) (1)添加角色,搭建web服务器(IIS) (2)添加网站,关闭默认网页,添加默认文档 在客户端浏览器输入服务器…

无需训练,这个新方法实现了生成图像尺寸、分辨率自由

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 近日,来自香港中文大学 - 商汤科技联合实验室等机构的研究者们提出了FouriScale&…

蓝桥杯-外卖店优先级

代码及其解析 #include<bits/stdc.h> using namespace std; const int N100010;int order[N]; //order[id] 第id号店上一次的订单,记录的是时间 int prior[N]; //prior[id] 第id号店的优先级 int flag[N]; //flag[id] 第id号店在不在优先缓存中struct node{int…

有关栈的算法

例题一 解法&#xff08;栈&#xff09;&#xff1a; 算法思路&#xff1a; 本题极像我们玩过的「开⼼消消乐」游戏&#xff0c;仔细观察消除过程&#xff0c;可以发现本题与我们之前做过的「括号匹配」问题是类似的。当前元素是否被消除&#xff0c;需要知道上⼀个元素的信息…

YOLOv8分类识别训练配置详细

目标&#xff1a; 实现自己的图像分类算法模型训练&#xff0c;应用。 掌握数据集配置方式&#xff1b; 掌握训练、预测命令语句 掌握训练结果分析 学习内容&#xff1a; 1.图像分类数据集配置方式 例如&#xff1a; 制作一个表情分类数据集。 # 0 - 6 文件夹分别label为&…

notion的使用心得

从老石的视频知道了notion是一个很强大的管理工具&#xff1a;这就是最棒的效率软件&#xff01;如果不是&#xff0c;我倒想试试你的 | Notion使用技巧分享_哔哩哔哩_bilibili 我一时半会不能全部学会&#xff0c;但是借用大家的好模板&#xff1a;如何用5分钟搭建简洁高效的…

ideaSSM 网上选课管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 网上选课管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

在短视频的挤压下,长视频何去何从?长视频行业能否借助AI重拾信心?

回顾2019年中国网络视听大会&#xff0c;长视频行业的领袖们曾在演讲中对短视频进行了猛烈抨击&#xff0c;这一场面至今仍然令人印象深刻。当时&#xff0c;长视频平台似乎还有一些自信&#xff0c;但如今&#xff0c;他们已经被来自各方的竞争对手挤得喘不过气来。今年以来&a…

软件分层测试的5大注意事项

软件分层测试作为软件测试的常见测试方法&#xff0c;有利于提高测试精度和效率&#xff0c;及早发现和解决产品缺陷和问题&#xff0c;提高了产品的质量和效率&#xff0c;降低了测试成本。如果不对软件进行分层测试&#xff0c;不利于缺陷的尽早发现和改正&#xff0c;可能会…

蓝桥杯-油漆面积

代码及其解析:(AC80%&#xff09; 思路:是把平面划成单位边长为1&#xff08;面积也是1&#xff09;的方格。每读入一个矩形&#xff0c;就把它覆盖的方格标注为已覆盖&#xff1b;对所有矩形都这样处理&#xff0c;最后统计被覆盖的方格数量即可。编码极其简单&#xff0c;但…

【鸿蒙开发】if/else条件渲染,ForEach循环渲染

if/else 使用规则 支持if、else和else if语句。if、else if后跟随的条件语句可以使用状态变量。允许在容器组件内使用&#xff0c;通过条件渲染语句构建不同的子组件。条件渲染语句在涉及到组件的父子关系时是“透明”的&#xff0c;当父组件和子组件之间存在一个或多个if语句…

STM32中C编程引入C++程序

C具备类的创建思想很实用于实际场景多相似性的框架搭建&#xff1b;同种类型或相似类型的C的优势明显因此进行相互嵌套使用 需要在C中使用C类的话&#xff0c;你可以通过C的“extern "C"”语法来实现。这允许你在C代码中使用C的链接方式&#xff0c;而在C代码中使用…

服务器开发 Socket 相关函数

Socket 函数 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol)domain: AF_INET 这是大多数用来产生 socket 的协议&#xff0c;使用TCP或UDP来传输&#xff0c;用IPv4的地址 AF_INET6 与上面类似&#xff0c;不过…

电商选品难?那是因为你不会用大数据选品工具…

电商选品之所以难&#xff0c;主要有以下几个方面的原因。电商市场更新换代非常快&#xff0c;新的产品不断涌现&#xff0c;旧的产品可能很快就被淘汰。电商选品紧跟市场趋势&#xff0c;不断调整和更新&#xff0c;这对电商运营市场敏感度和反应速度提出了很高的要求。 电商…