原创 学习笔记:PCF8591的应用

2012-3-28 20:51 7180 16 30 分类: MCU/ 嵌入式

PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串口I2C总线接口。3个地址引脚A0、A1、A2用于硬件地址编址,允许将最多8个器件连接至I2C总线而不需要额外硬件。器件的地址、控制和数据通过两线双向I2C总线传输。器件功能包括多路复用模拟输入、片上跟踪和保持功能、8位模数转换和8位数模转换。最大转换速率取决于I2C总线的最高速率。

(1)引脚定义

1.gif


1、2、3、4引脚为4个8位ADC通道,可通过软件选择读取的通道号。5、6、7引脚为地址输入脚,分别接地或接高,确定器件硬件地址。PCF8591的地址分为固定部分和可编辑部分,高四位固定为1001,低半字节前三位分别由A2、A1、A0确定,最低位为读/写选择位,“0”时为写操作,“1”时为读操作。器件地址必须是起始条件后第一个发送的字节。8、16引脚分别接地和电源。13、14引脚分别为模拟地和参考电压。9、10引脚为I2C总线的数据线和时钟线,需接10K上拉电阻,以使信号线保持高电平。11号引脚为外部时钟输入脚,当使用内部时钟方式时悬空。12号引脚为外部时钟选择脚,当其接高时选择外部时钟工作方式。15号脚为模拟信号输出脚,由控制字的第二位使能模拟输出。

 

(2)控制字

跟随于器件地址之后的第二个字节数据,存储于控制寄存器,控制器件功能。控制字最高位和第五位必须为0,第二位为模拟出书使能位,“1”时允许模拟输出,第3、4位为输入模式选择,第六位为自动增量位,"1"时,每次AD转换后通道号自动增加。最低两位为ADC通道选择位。

2.gif


(3)AD转换

PCF8591采用8位初次逼近式ADC,一个AD转换周期总是开始于发送一个控制字之后,一旦一个转换周期被触发,所选通道的输入电压采样将保存到芯片并被转换为对应的8位二进制码。转换结果被保存在ADC数据寄存器等待传输。最高AD转换速率取决于实际的I2C总线速度。

操作时序

3.gif

 

/****************************************************************

函数名称:Read_ADC

函数功能:读取AD转换后的8位数值

入口参数:channel  //选择ADC通道(0-3)

出口参数:value     //AD转换后的8 bit数字量

备 注:

*****************************************************************/

unsigned char Read_ADC(unsigned char channel)

{

unsigned char value;

Start_I2c();

Send_Byte(0x90);//发送器件地址

Send_Byte(0x40+channel);//发送控制字

 

Start_I2c();

Send_Byte(0x91);//发送器件地址,最低位置1,表示读数据

value=Rcv_Byte();//将读取的数据赋给value变量

NoAck_I2c();//主机发送非应答信号

Stop_I2c();

 

return (value);

}

 

(4)DA转换

发送给PCF8591的第三字节被存储到DAC数据存储器,并使用片上DA转换器转换成对应的模拟电压。使用DA转换需将控制字第二位置1,使能模拟输出。

 

4.gif

 

/****************************************************************

函数名称:Write_DAC

函数功能:向PCF8591发送8位数字量进行DA转换

入口参数:dat    //需转换的数字量

出口参数:

备 注:

*****************************************************************/

void Write_DAC(unsigned char dat)

{

Start_I2c();

Send_Byte(0x90);   //发送器件地址,最低位为0,表示向从机械数据

Send_Byte(0x40);//发送控制字,第四位必须置1,表示允许模拟输出

Send_Byte(dat);   //发送8位数字量

Stop_I2c();

}

 

PARTNER CONTENT

文章评论14条评论)

登录后参与讨论

用户1822132 2014-11-28 13:02

相当好看啊

用户377235 2013-12-25 15:22

有几个地方写错了。但总体写的很好,对初学者很有帮助

用户448811 2013-8-12 09:00

有点简略

用户1687272 2013-1-28 10:04

有帮助,十分感谢

用户377235 2012-11-5 20:54

图片依然看不见

用户420485 2012-11-1 15:35

写得好!!!学习了!

用户1675826 2012-10-21 20:47

AD的时序图看不见

用户1406942 2012-9-6 08:19

由于显示器的接口方式不同,对程序稍作修改就可使用了。

用户347025 2012-8-24 16:34

学习学习!

用户418381 2012-4-19 21:47

多谢分享

相关推荐阅读
用户419752 2012-05-08 04:22
学习笔记:AT24C02串行EEPROM的应用
   AT24C02是Atmel公司生产的低功耗CMOS型EEPROM,内含2K bit,即256字节存储空间。它采用I2C总线方式进行数据读写,可工作于标准模式、快速模式和高速模式。硬件电路...
用户419752 2012-03-28 20:43
学习笔记:AQM-300空气质量传感器的应用
  AQM-300是深圳祥帆电子生产的空气质量传感器,它有低功耗、稳定性好、应用简单,灵敏度高等特点。能检测到氨气、氢气、酒精、一氧化碳、甲烷、丙烷、甘烷、苯乙烯、丙二醇、酚、甲苯、乙苯、二甲...
用户419752 2012-03-28 20:42
学习笔记:I2c总线原理及应用(3)
  (4)数据帧格式     在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。数据传输一般由主...
用户419752 2012-03-28 20:38
学习笔记:I2c总线原理及应用(2)
  (3)数据传输     发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位(即一帧9位)。首先传输的是数据的最高位(MSB)。如果从机...
用户419752 2012-03-28 20:36
学习笔记:I2c总线原理及应用(1)
    I2c总线支持任何IC生产过程(NMOS\CMOS\双极性)。两线----串行数据线(SDA)和串行时钟线(SCL)在连接到总线的器件间传递信息。每个器件都有唯一的地址识别,而且都可以...
EE直播间
更多
我要评论
14
16
关闭 站长推荐上一条 /3 下一条