目录

一、PCF8591基本概念

(一)PCF8591概述

(二)PCF8591的特性

(三)设备地址

(四)控制寄存器

(五)D/A转换

(六)A/D转换

二、例题

(一)代码部分

(二)结果演示

(三)光敏电阻的采样和A/D转换

三、总结


一、PCF8591基本概念

(一)PCF8591概述

PCF8591是单片、单电源低功耗的8位CMOS数据采集器件,具有IIC总线接口的8位A/D以及D/A转换器,有4路A/D转换输入,1路D/A模拟输出。图1 PCF8591引脚图

图1 PCF8591引脚图

(二)PCF8591的特性

单电源供电

工作电压:2.5V~6V

IIC总线串行输入/输出

通过3个硬件地址引脚编址

采样速率取决于IIC总线速度

4个模拟输入可编程为单端或差分输入

自动增量通道选择

8位逐次逼近式A/D转换

片上跟踪与保持电路

带一个模拟输出的乘法DAC

(三)设备地址

PCF8591的地址由两部分组成:固定地址和可编程部分。其中可编程部分必须根据地址引脚A0,A1,和A2来设置。

图2 PCF8591的地址

在IIC总线协议中,设备地址是起始信号后第一个发送的字节。在蓝桥杯单片机设计与开发中PCF8491的地址引脚A0、A1和A2均接地,则PCF8591的设备的读操作地址为:0x91;而写操作地址则为:0x90

(四)控制寄存器

在设备地址之后,发送到PCF8591的第二个字节将被存储在控制寄存器中,用于控制器件功能。

图3 控制寄存器

下面对控制寄存器进行简单的解读:

复位值

功能描述

7

0

特征位

固定值:0

6

X

模拟输出控制

0 :A/D转换; 1: D/A转换

5

X

模拟量输入方式选择

00 :四路单端输入

01 :三路差分输入

10 :两路单端,一路差分

11 :两路差分输入

4

X

3

0

特征位

固定值:0

2

X

自动增量控制

0 :禁止自动增量

1 :允许自动增量

1

X

A/D通道选择

00 :AIN0,通道0

01 :AIN1,通道1

10 :AIN2,通道2

11 :AIN3,通道3

0

X

在进行数据处理操作时,首先是主控器发出起始信号,然后发出读寻址字节,被控器发出应答后,主控器从被控器读出第一个数据字节,主控器发出应答,主控器从被控器读出第二个数据字节,主控器发出应答,一直到主控器从被控器中读出第n个数据字节,主控器发出非应答信号,最后主控器发出停止信号。

在蓝桥杯竞赛中PCF8591连接有光敏电阻(通道1)和电位器Rb2(通道3)两部分。

(五)D/A转换

图4 ADC电阻电路

下面提供D/AZ转换的公式和相关波形:

图5 D/A转换的公式

图6 D/A转换的相关波形

(六)A/D转换

A/D转换器采用逐次逼近转换的技术。

下面提供其相关波形和转换特性:

图7 A/D转换顺序

图8 单端输入的A/D转换特性

图9 差分输入的A/D转换特性

二、例题

在CT107D综合训练平台上,实现Rb2的测量。

(一)代码部分

#include "reg52.h"
#include "iic.h"unsigned char Rb2=0;unsigned char code SMG_duanma[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};void SelectHC573(unsigned char channel)
{switch(channel){case 4:P2=(P2 & 0x1f) | 0x80;break;case 5:P2=(P2 & 0x1f) | 0xa0;break;case 6:P2=(P2 & 0x1f) | 0xc0;break;case 7:P2=(P2 & 0x1f) | 0xe0;break;case 0:P2=(P2 & 0x1f) | 0x00;break;}
}void DelaySMG(unsigned int t)
{while(t--);
}void DisplaySMG_Bit(unsigned char pos,unsigned char value)
{SelectHC573(7);P0=0xff;SelectHC573(6);P0=0x01<<pos;SelectHC573(7);P0=value;
}void DisplanSMG()
{DisplaySMG_Bit(0,SMG_duanma[16]);DelaySMG(100);DisplaySMG_Bit(1,SMG_duanma[3]);            DelaySMG(100);DisplaySMG_Bit(2,SMG_duanma[16]);DelaySMG(100);DisplaySMG_Bit(3,0xff);DelaySMG(100);DisplaySMG_Bit(4,0xff);DelaySMG(100);DisplaySMG_Bit(5,SMG_duanma[Rb2/100]);DelaySMG(100);DisplaySMG_Bit(6,SMG_duanma[(Rb2%100)/10]);DelaySMG(100);DisplaySMG_Bit(7,SMG_duanma[Rb2%10]);DelaySMG(100);
}void PCF8591_ADC()
{IIC_Start(); IIC_SendByte(0x90);IIC_WaitAck(); IIC_SendByte(0x03);IIC_WaitAck();IIC_Stop();  IIC_Start(); IIC_SendByte(0x91);IIC_WaitAck(); Rb2=IIC_RecByte(); IIC_SendAck(1);IIC_Stop();
}void main()
{SelectHC573(5);P0=0xff;while(1){DisplanSMG();PCF8591_ADC();}
}

(二)结果演示

(三)光敏电阻的采样和A/D转换

下面提供光敏电阻的采样和A/D转换的代码部分

unsigned char Rd1=0;       //定义光敏电阻变量void PCF8591_ADC()
{IIC_Start(); IIC_SendByte(0x90);IIC_WaitAck(); IIC_SendByte(0x01);IIC_WaitAck();IIC_Stop();  IIC_Start(); IIC_SendByte(0x91);IIC_WaitAck(); Rd1=IIC_RecByte(); IIC_SendAck(1);IIC_Stop();
}

三、总结

PCF8591外设是蓝桥杯单片机设计与开发大赛中的一个重点和难点,对于其基本特性必须了解、掌握,以及熟悉官方提供的IIC总线的相关代码,在平时要多练习,熟悉掌握其相关代码是编写。

【蓝桥杯】——PCF8591模块相关推荐

  1. 蓝桥杯单片机模块代码(AT24C02)(代码+注释)

    本模块是上电可擦除EEPROM,用于存储需要的数据.与上一节使用的底层代码相同,运用同一个总线,其操做顺序与PCF8591除第二步几乎完全一样.相同部分具体可看:蓝桥杯单片机模块代码(PCF8591) ...

  2. 蓝桥杯各模块使用总结 时钟DS1302 ,ADC DAC PCF8591 ,温度传感器DS18B20 存储AT24C02

    2021/4/14 周三 下午 距蓝桥杯仅四天 为复习各模块的使用,防止在比赛时脑子抽住 首先是资源数据包里的底层代码驱动 驱动代码说明 1-本文件夹中提供的驱动代码供参赛选手完成程序设计参考之用. ...

  3. PCF8591详解(蓝桥杯单片机模块(IIC总线))

    文章目录 概述 特性 总体 框图 引脚 功能描述 寻址 控制字节 D/A转换 D/A转换过程 A/D转换 A/D转换过程 蓝桥杯部分 原理图部分 AD部分 DA部分 结束 概述 PCF8591是一款单 ...

  4. 蓝桥杯基础模块8_2:串口进阶

    一.模块题目 二.原理简述 串行接口作为51单片机的重要外设,编程操作并不复杂,但在实际的项目应用中,由于数据结构和通信规约的不同,其程序逻辑也有各种变化. 一般情况下,上位机的命令可能不是一个字节, ...

  5. [蓝桥杯单片机]模块学习—中断系统

    前一段时间的文章已经跟各位一起刷了一部分的客观题了 接下来将会跟大家一起从官方提供的原理图和芯片手册出发 练习每个模块的程序编写 因为我学习采用的是模块化编程的思路,函数的定义分散在不同的文件中,所以 ...

  6. 蓝桥杯NE555模块编程

    一.原理图: RB3:滑动变阻器 THR:高电平出发端 TRIG:低电平触发端 OUT:频率输出口 其中两者电压均小于各自的参考电压时放电管截至,两者电压均大于各自的参考电压时放电管导通,NE555是 ...

  7. 蓝桥杯基础模块9:IO口扩展与存储器映射

    一.模块题目 二.原理简述 三.源码 (1)I0扩展 //头文件 #include "reg52.h" //延时函数 void Delay(unsigned int t) {

  8. 蓝桥杯基础模块8_1:串口通信收发

    一.模块题目 二.原理简述 1.串口重要概念概述 <1> 串行通信是指数据一位接一位地顺序发送或接收. <2> 串行通信有SPI.IIC.UART等多种,最常见最通用的是指UA ...

  9. 蓝桥杯基础模块7:PWM脉宽调制

    一. 模块题目 二. 原理简述 脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量.通信到功率控制与变换的许多领域中.随着电子技术的发展,出现了多种脉冲宽度 ...

  10. 蓝桥杯基础模块6_2:定时器进阶

    一.模块题目 二.原理图 1.数码管

最新文章

  1. LINUX DNS服务的配置(一)
  2. 如何提高python的运行效率_几个提升Python运行效率的方法之间的对比
  3. 去上海参加MySQL 用户大会的感受
  4. python程序多线程_Python-多线程编程
  5. 科大星云诗社动态20210824
  6. python提取txt数据到excel_python 读取txt中每行数据,并且保存到excel中的实例
  7. 【SSM面向CRUD编程专栏 1】Spring简介 xml配置文件 依赖注入 数据注入
  8. 苦了我一年的选择,现在却是我最回味的时光
  9. HTML pattern
  10. php的错误是什么原因,php异常和错误的区别是什么
  11. 有函数就可以实现面向对象
  12. partproble在RHEL 6下无法更新分区信息
  13. 华为海思总裁凌晨邮件燃爆全国:多年备胎一夜转“正”,今后要科技自立
  14. 12 浏览器对象模型BOM
  15. 51CTO访问量BUG
  16. java.io.IOException: Connection reset by peer
  17. 【转载】一个c程序在执行main函数之前和main之后都做了那些事情
  18. 腾讯的天天快报凭什么想挑战今日头条?
  19. qt里的pushButton中的clicked(bool);用法
  20. 杀毒软件的一些杀毒原理

热门文章

  1. 团队管理:需求之殇——两个凡是
  2. 马克飞象 Markdown 使用和学习
  3. 2019 计蒜之道 初赛 第一场(A. 商汤的AI伴游小精灵)
  4. 基于proteus的计数器设计
  5. There was a problem confirming the ssl certificate: HTTPSConnectionPool(host=‘pypi.org‘,port=443)
  6. 销售书籍推荐:做销售你究竟该看什么书?
  7. java使用egl_EGL 作用及其使用
  8. R语言(pROC)绘图
  9. Photoshop-选区的应用
  10. pd.to_datetime函数函数获取相应时间维度指标(isocalendar函数用法)