51单片机AD转换之PCF8591

发布者:SerendipityGlow最新更新时间:2022-01-20 来源: eefocus关键字:51单片机  AD转换  PCF8591 手机看文章 扫描二维码
随时随地手机看文章

PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。


AD转换即(模拟量)Analog 转换成 (数字量)Digital


1.引脚分析

这里写图片描述

PCF8591具有4个模拟输入(AIN0~AIN3)、1个模拟输出(AOUT)和1个串行I²C总线接口(SDA、SCL)。

PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。

OSC:外部时钟输入端,内部时钟

EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地。

VDD、VSS:电源端。

AGND:模拟信号地。

VREF:基准电源端。


2.应用分析


AD转换部分电路图

这里写图片描述

要求:使用LCD1602将电压值显示出来,调节变阻器改变电压值


说明:以下代码中用到了LCD1602驱动程序和I2C总线驱动程序,请参考博主51单片机栏目下的博客。


#define uint unsigned int

#define uchar unsigned char

/*查阅pcf8591的资料可知它的都写地址如下*/

#define  WRITEADDR 0x90    //写地址

#define  READADDR  0x91    //读地址

uchar dat[6];


void Pcf8591SendByte(uchar channel)

{   

    I2C_Start();    //关于I2C总线,请参照博主博文:51单片机I2C总线驱动程序

    I2C_SendByte(WRITEADDR);        //发送写器件地址

    I2C_SendByte(0x40|channel);     //发送控制寄存器

    I2C_Stop();

}


uchar Pcf8591ReadByte()

{

    uchar num;

    I2C_Start();

    I2C_SendByte(READADDR);      //发送读器件地址

    dat=I2C_ReadByte();          //读取数据

    I2C_Stop();                  //结束总线

    return num;

}


void main()

{

    uint adNum,i;

    float value;

    Lcd1602_init();   //关于lcd1602,请参照博主博文:51单片机LCD1602程序详解

    while(1)

    {

            Pcf8591SendByte(0);      //使用通道0

            /*adNum一定是0到255之间的一个数,因为pcf8591是8位的AD/DA芯片,所以输出的范围为00000000到11111111,即0到255*/

            adNum=Pcf8591ReadByte();   //读出数值

            /*将adNum转换成电压值,单片机的电压为5V,则电位器的电压为0到5V,用0到255表示0到5V,则每一个1代表5/255V,即0.01953V*/

            value=adNum*0.01953;  //转为电压值

            adNum=value*100;        //保留两位小数,以便显示出来


            dat[0]=adNum/1000+'0';      //加上'0'是表示数字转换成字符,1602只能显示字符

            dat[1]=adNum%1000/100+'0';

            dat[2]='.';

            dat[3]=adNum%100/10+'0';

            dat[4]=adNum%10+'0';

            dat[5]='V';

            Lcd1602_WriteCom(0x80);    

            for(i=0;i<6;i++)

            {

               Lcd1602_WriteData(dat[i]);

            }

    }

}

关键字:51单片机  AD转换  PCF8591 引用地址:51单片机AD转换之PCF8591

上一篇:51单片机汇编语言实验(一)-----数字量输入输出
下一篇:51单片机DHT11温湿度传感器

推荐阅读最新更新时间:2024-11-21 00:38

80C51单片机的基本结构
1) 中央处理器(CPU) 中央处理器是单片机的核心,完成运算和控制功能。MCS-51的CPU能处理8位二进制数或代码。 2) 内部数据存储器(内部RAM) 8051芯片中共有256个RAM单元,但其中后128单元被专用寄存器占用,能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。 3) 内部程序存储器(内部ROM) 8051共有4 KB掩膜ROM,用于存放程序、原始数据或表格,因此,称之为程序存储器,简称内部ROM。 4) 定时/计数器 8051共有两个16位的定时/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。
[单片机]
80C<font color='red'>51单片机</font>的基本结构
AD转换器的保真度测试检验纯度
引言   对正弦波进行精确数字化的能力是高分辨率 AD 转换器保真度的一项敏感度测试。该测试需要一个具接近 1ppm 残留失真分量的正弦波发生器。此外,还需要一个基于计算机的 AD 输出监视器,用于读取和显示转换器输出频谱成分。若想以合理的成本和复杂程度来实施此项测试,就必需进行其元件的设计并在使用之前完成性能验证。   概要   图 1 给出了系统的示意图。一个低失真振荡器通过一个放大器来驱动 AD。AD 输出接口对转换器输出进行格式化,并与负责执行频谱分析软件和显示结果数据的计算机进行通信。      振荡器电路   振荡器是系统中难度最大的电路设计部分。为了对 18 位 AD 进行有意义的测试,振荡器的不纯度必
[模拟电子]
<font color='red'>AD转换</font>器的保真度测试检验纯度
51单片机快速入门指南】5:软件SPI
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机:Vofa+ 1.3.10 源于软件模拟SPI接口程序代码(4种模式)—— 内陆的咸水鱼,有改动。 硬知识 SPI协议简介 SPI的通信原理很简单,一般主从方式工作,这种模式通常有一个主设备和一个或多个从设备,通常采用的是4根线,它们是MISO(数据输入,针对主机来说)、MOSI(数据输出,针对主机来说)、SCLK(时钟,主机产生)、CS/SS(片选,一般由主机发送或者直接使能,通常为低电平有效) SPI接口介绍 SCK:时
[单片机]
【<font color='red'>51单片机</font>快速入门指南】5:软件SPI
51的单片机定时中断基本概念及简单实验
定时器相关内容 CPU时序的有关知识 ①振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。 ②状态周期:2 个振荡周期为 1 个状态周期,用 S 表示。振荡周期又称 S 周期或时钟周期。 ③机器周期:1 个机器周期含 6 个状态周期,12 个振荡周期。 即机器周期=6个状态周期=12个震荡周期。 ④指令周期:完成 1 条指令所占用的全部时间,它以机器周期为单位。 外接晶振为 12MHz 时,51 单片机相关周期的具体值为: 振荡周期=1/12us; 状态周期=1/6us; 机器周期=1us; 指令周期=1~4us; 定时器/计数器 ①51 单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器
[单片机]
51的单片机定时中断基本概念及简单实验
51单片机双向通信实例
通过甲机按键控制点亮乙机LED灯,通过控制乙机按键向甲机发送数字,并且使用数码管显示。 电路原理图: 甲机代码: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0; sbit LED2=P1^3; sbit K1=P1^7; uchar Operation_No=0; //操作代码 //数码管代码 uchar code DSY_CODE ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时 void DelayMS(uint ms
[单片机]
<font color='red'>51单片机</font>双向通信实例
基于STM32单片机和51单片机的人体健康监测仪设计方案
近年来,随着生活节奏加快,工作压力加大,不健康的作息等原因,导致猝死的事件频发,心率情况是身体状态的直接表现,所以做好心率监测可以大大避免一些突发情况的发生。整理了电路城上8个心率监测的电路方案,工程师们不妨动动手,给自己一份健康监测,当然电路城上也还有很多心率监测相关的设计,可以进一步探索。 1、基于STM32单片机的人体健康监测仪设计-蓝牙-心率-ADXL345电路设计方案(原理图+源码) 本设计由STM32F103C8T6单片机核心板电路+蓝牙模块电路+DS18B20温度传感器电路+心率检测传感器电路+0.96寸OLED屏显示电路+ADXL345加速度传感器电路+按键电路+蜂鸣器报警电路组成。 1、开机后,OLE
[单片机]
基于STM32单片机和<font color='red'>51单片机</font>的人体健康监测仪设计方案
基于NEC单片机的漏电检测仪表的设计
  引言   随着电子仪器、电子设备的广泛使用,特别是家用电器的普及,家用电器的用电安全性问题不可忽视。泄漏电流、绝缘电阻、电气强度并称为电气安全性能中的3大电参数。其中泄漏电流,尤其是工作温度下的泄漏电流是1个最能确切反映实际工作状态的安全电参数;也是一个对人体安全有着直接影响的电参数。因为,当电源线一端接地,人体触及电器外壳的情况下,电器泄漏电流会通过人体流人大地,可能导致人身伤亡。因此,漏电检测无论是对家用电器还是对人的自身安全都具有十分重要的意义,通过对漏电的检测,可以根据漏电的情况作出具体的反应,从而保护电路及人身财产安全。   漏电检测原理   对电力系统回路进行漏电检测的方法有很多,如绝缘监测装置,低频探测法,
[单片机]
TMS320VC5402的HPI与51单片机的接口设计
0 引言 TMS320VC5402是TI公司推出的性价比极高的定点数字信号处理器(DSP)。它具有先进的多总线结构(三条16位数据存储器总线和一条程序存储器总线);其数据/程序寻址空间为1 M×16 bit: 内置4 k×16 bitP/DROM和16 k×16 bit-DARAM;此外,该DSP内含两个多通道缓冲串行口,一个8位并行与外部处理器通信的HPI口,2个16位定时器以及6通道DMA控制器;具有低功耗,适合电池供电设备等特点 。 51系列单片机是一种很经典的单片机。20多年来一直久盛不衰。而且Intel通过授权5l内核,目前已出现了很多第三方生产的51系列产品。这些产品一般都具有较高的时钟频率和较大的存储空间,而且还
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved