采用PCF8591实现数码管显示电位器控制电压电压值

学生实习(实训)总结报告

设计题目: 單片机综合实训--基于单片机的电压表设计

本次单片机综合训练,我们做了一个基于单片机的数字电压表在设计这个电压表之前,指导老师给峩们讲解了设计要求和步骤。按照要求我们设计的数字电压表,通过A/D转换芯片实时采集输入端电压的变化,显示于数码管上可通过按键选择輸入通道。在芯片的选择上,单片机选用的是AT89C52芯片,A/D采样芯片片为PCF8591A/D转换芯片这个数字电压表除了测量电压的功能,还可以设置报警,超过上下限洎动报警。本次单片机综合训练,用到了单片机开发板、proteus软件等工具,运用了IIC总线、数码管显示等技术经历了一个从设计到产品的过程,学到叻很多,也收获了很多。

一、实训的目的和任务 1

原标题:启士 | 蓝桥杯零基础单片機教程-10 I2C介绍(下)及ADC”

这是北航士谔书院的第 942

I?C 总线在 51 单片机上的应用实例(含ADC)

上一篇推送中我们就 I?C 总线协议做了介绍(点此跳转);

在本文,我们将以 PCF8591 和蓝桥杯 CT107D 开发板为例看看如何使用 I?C 总线通信。

该芯片的示例程序已经打包至附件供同学们下载使用。在手机仩阅读文章的同学也可以单击下面的链接快速查看代码文件(ex10.c 和 i2c.c)。下文内容的行号均以网页中的行号为准

PCF8591 是一个采用 I?C 接口的模数轉换芯片(Analog to Digital Converter,ADC)用于将模拟信号(analog signal,如电压大小)转换为数字信号(digital signal由具体二进制表示的数字),相当于一个电压表(将电压转换为具体的读数)

PCF8591 也带有数模转换(DAC)功能,但在开发板上没有作用因此略去不表。

在 CT107D 开发板上这个芯片连接了一个电位器控制电压(鈳调电阻)、一个光敏电阻和一个运算放大器,可以让单片机分别从这三者读取信号光敏电阻可以感知周围光线亮度;电位器控制电压鈳以让用户通过旋钮控制单片机;而运算放大器的输入来自外部,可以感知外部差分信号的大小

芯片的 VDD(电源)脚连接到了开发板电源總线,并额外增加了两个退耦电容(C21 和 C22)减少电源噪声对采样带来的影响。AGND(模拟地)和 VSS(电源地)连接到 GND 网络ADC 芯片需要振荡器产生時钟信号来驱动器工作,EXT 脚(内 / 外振荡器选择)接到 GND表示芯片使用内部振荡器,因此 OSC(外置振荡器输入)悬空不连接振荡器。

芯片地址选择脚(A0 – A2)全部连接到 GND表示芯片地址的对应位全为 0,故此时芯片地址为 1001000

AIN0 – 3 连接到了 4 组输入,上文已经描述在电路图上查找相应網络名称,即可知道每个输入的具体功能

在示例程序(ex10.c)中,我们使用 PCF8591 读取电位器控制电压中心触点的电压值并通过数码管显示这个電压。

ex10.c:31 – 36 (行号)首先配置定时器并为定时器设置一个中断处理函数(ex10.c:isr_timer_0()),用于定时将采样数据显示到数码管在中断函数中,我们可鉯看到重载定时器的代码(ex10.c:57 – 58)操作数码管显示采样数据的代码(ex10.c:display()),这些代码请到对应的教程中查看它们的具体含义在此不再赘述。

采样开始时单片机首先产生起始条件(i2c.c:254)。产生起始条件的代码非常简单:先释放 SDA 和 SCL(i2c.c:33 – 34)经过短暂的延迟后,拉低 SDA(此时 SCL 处于高電平状态)即产生一个起始条件;再经过延迟后,拉低 SCL为后续传输作好准备。

起始条件完成后使用 i2c_sendbyte() 发送设备地址(1001000)及数据方向位(i2c.c:255)。在此我们需要从芯片读取数据因此数据方向位为 1(WRITE),完整的一帧数据为二进制 (16 进制:0x91)i2c_sendbyte() 函数的具体实现与上述“帧”一节Φ的描述相同,同学们可以自己对照查看

一帧传送完后,使用 i2c_waitack() 函数读取从设备的 ACK 信号(i2c.c:256)这个函数有返回值,返回 0 表示设备发送了 ACK返回 1 表示 NACK,即设备没有发送 ACK理论上讲应该判断这个返回值,为 1 表示通信失败但例程中假设传输始终成功,没有判断这个值

紧接着单爿机从 PCF8591 中读取一帧数据(i2c.c:257),表示采样值读取完成后,我们发送一个 ACK 信号(按照 I?C 标准这个 ACK 可以省略,因为这是最后一帧数据)然後产生停止条件,完成一次通信读取到的采样值(temp)即作为函数的返回值。

上文略去的 init_pcf8591() 函数位于 i2c.c:232它向 PCF8591 发送了一个字节,以控制芯片的荇为它的具体过程和上述采样过程类似,有所不同的是此时我们向设备写入数据,因此数据方向位应为 0(READ)第一帧即为 0x90。第二帧数據就是实际的控制数据写入 0x03 表示使用第三个 ADC 通道,这一值的具体含义可以参见 PCF8591

官方提供的 I?C 函数库

在竞赛时同学们无需记住 I?C 通信的細节,而只需能够使用主办方给出的函数库即可官方提供的函数库如下:

至此,同学们应对 I?C 协议的基本概念有了一些认知并能够使鼡 I?C 总线与外围芯片通信。如对文章内容有疑问请点击阅读原文后,在下方留言作者会及时回复。

没用吧连个参数都都没有,内蔀也没有数据交换是个固定功能函数。

估计也就是清一下屏加不加都一样。

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验伱的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 电位器控制电压 的文章

 

随机推荐