您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页1203030325_AD转换

1203030325_AD转换

来源:爱问旅游网


成 绩 评 定 表

学生姓名 张建 班级学号 1203030325 专 业 评 语 电子信息工程 课程设计题目 AD转换 组长签字: 成绩 日期 2015 年 月 日

课程设计任务书

学 院 学生姓名 课程设计题目 实践教学要求与任务: (1)确定系统设计方案; 信息科学与工程 张建 专 业 电子信息工程 班级学号 1203030325 AD转换 (2)进行系统的硬件设计; (3)完成必要的参数计算与元器件选择; (4)完成应用程序设计; (5)进行单元电路及应用程序的调试; 工作计划与进度安排: 2015年 12月17 日 选题目查阅资料 2015年 12月19 日 编写软件源程序或建立仿真模块图 2015年 12月24 日 调试程序或仿真模型 2015年 12月29 日 性能分析及验收 2016年 1月8 日 撰写课程设计报告、答辩 指导教师: 2015年 月 日 专业负责人: 2015年 月 日 学院教学副院长: 2015年 月 日

目录

1、 PCF8591 概述 ......................................... 1 2、芯片介绍 .............................................. 1 2.1内部结构及引脚功能描述 ............................. 1 2.2片内可编程功能设置 ................................. 1 3、PCF8591的A/D 转换 .................................... 2 4、1602LCD主要技术参数: ................................. 3 4.1引脚功能说明....................................... 3 4.2 1602LCD的指令说明及时序 ........................... 4 4.3 1602LCD的一般初始化(复位)过程 ................... 5 6、C语言程序 ............................................ 6 7、参考文献 ............................................. 13

1、PCF8591 概述

PCF8591 是一种具有 I2C 总线接口的 8 位 A/D D/A 转换芯片,在与 CPU

的信息传输过程中仅靠时钟线 SCL 和数据线 SDA 就可以实现。 I2C 总线是Philips (飞利浦)公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单 ,可维护性好, 易实现系统扩展, 易实现模块化标准化设计, 可靠性高等优点。

2、芯片介绍

2.1内部结构及引脚功能描述

PCF8591 为单一电源供电(2.5 6 V)典型值为 5 V,CMOS 工艺 PCF8591 有 4 路 8 位 A/D 输入,属逐次比较型,内含采样保持电路; 1 路 8 位 D/A 输出,内含有 DAC的数据寄存器 A/D D/A 的最大转换速率约为 11 kHz,但是转换的基准电源需由外部提供 PCF8591 的引脚功能如图1所示

图1 PCF8591引脚功能

2.2片内可编程功能设置

在 PCF8591 内部的可编程功能控制字有两个,一个为地址选择字,另一个为转换控制字 PCF8591 采用典型的I2C总线接口的器件寻址方法,即总线地址由器件地址引脚地址和方向位组成 Philips (飞利浦)公司规定 A/D器件高四位地址为 1001,低三位地址为引脚地址A0A1A2,由硬件电路决定,地址选择字格式具体描述如表2 所示 因此 I2C 系统中最多可接 23=8 个具有总线接口的 A/D 器件 地址的最后一位为方向位 R/W,当主控器对 A/D 器件进行读操作时为 1,进行写操作时为 0 总线。操作时,由器件地址 引脚地址和方向位组成的从地址为主控器发送的第一字节。

1

图2 地址选择字格式描述

D0:读写控制位,对转换器件进行读操作时为1 ,进行写操作时为0。D1,D2,D3:引脚硬件地址设置位,由硬件电路设定该PCF8591的物理地址。D7,D6,D5,D4:器件地址位固定为1001.PCF8591的转换控制字存放在控制寄存器中,用于实现器件的各种功能 总线操作时为主控器发送的第二字节 转换控制字的格式功能具体描述如图3所示

图3 转换控制字格式描述

D0,D1:通道选择位。00 :通道 0; 01:通道1 ; 10:通道2; 11:通道3。D2:自动增量允许位,为 1时,每对一个通道转换后自动切换到下一通道进行转换,为0 时不自动进行通道转换,可通过软件修改进行通道转换D3:特征位,固定位0。D4,D5:模拟量输入方式选择位 。00:输入方式0 ,四路单端输入;01 :输入方式 1,三路差分输入;10 :输入方式2,二路单端输入,一路差分输入; 11:输入方式3 ,两路差分输入。D6:模拟输出允许位,A/D 转换时设置为 (地址选择字D0 位此时设置为1 ),D/A 转换时设置为 1(地址选择字 位此时设置为 )。D7:特征位,固定为0。

3、PCF8591的A/D 转换

PCF8591的A/D 转换为逐次比较型,在 A/D转换周期中借用 DAC及高增益比较器 对 PCF8591进行写读操作后便立即启动 A/D转换,并读出A/D 转换结果 在每个应答信号的后沿触发 转换周期,采样模拟电压并读出前一次转换后的结果。

A/D转换中,一旦 A/D采样周期被触发,所选择通道的采样电压便保存在采样,保持电路中,并转换成8 位二进制码(单端输入)或二进制补码(差分输入)存放在ADC数据寄存器中等待器件读出。如果控制字节中自动增量选择位置 1,则一次A/D 转换完毕后自动选择下一通道 。读周期中读出的第一个字节为前一个周期的转换结果 。上电复位后读出的第一字节为80H。

PCF8591的A/D 转换亦使用的是I2C 总线的读方式操作完成的 。其数据操作格式如图 4所示。

2

图4 A/D转换数据操作格式

其中data0~datan 为 A/D的转换结果,分别对应于前一个数据读取期间所采样的模拟电压。A/D 转换结束后,先发送一个非应答信号位A 再发送结束信号位P。 灰底位由主机发出,白底位是由PCF8591 产生。 上电复位后控制字节状态为00H ,在 A/D转换时须设置控制字,即须在读操作之前进行控制字节的写入操作。逻辑操作波形时序图如图5所示。

图5 A/D转换逻辑操作波形时序图

4、1602LCD主要技术参数:

显示容量:16×2个字符,芯片工作电压:4.5—5.5V,工作电流:2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.95×4.35(W×H)mm。

4.1引脚功能说明

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如图7 编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极 3

图7

引脚接口说明表

第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。

4.2 1602LCD的指令说明及时序

1602液晶模块内部的控制器共有11条控制指令,如图8 序号 指令 1 清显示 2 光标返回 3 置输入模式 4 显示开/关控制 5 光标或字符移位 6 置功能 7 置字符发生存贮器地址 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 * 1 I/D S D C B * * 1 S/C R/L * F * 1 DL N 字符发生存贮器地址 8 置数据存贮器地址 9 读忙标志或地址 10 写数到CGRAM或DDRAM) 1 显示数据存贮器地址 1 BF 计数器地址 0 要写的数据内容 11 从CGRAM或DDRAM读数 1 1 读出的数据内容 图8

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的

4

开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。 读操作时序

写操作时序

4.3 1602LCD的一般初始化(复位)过程

5

延时15mS

写指令38H(不检测忙信号) 延时5mS

写指令38H(不检测忙信号) 延时5mS

写指令38H(不检测忙信号)

以后每次写指令、读/写数据操作均需要检测忙信号 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏 写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置

5、仿真原理图

6、C语言程序

#include

6

#include #define uchar unsigned char #define uint unsigned int

#define Delay4us(){_nop_();_nop_();_nop_();_nop_();} sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_EN=P2^7;

sbit SCL=P2^0; //I2C时钟引脚

sbit SDA=P2^1; //I2C数据输入输出引脚 uchar Recv_Buffer[4]; //数据接收缓冲 uint Voltage[]={'0','0','0','0'}; //数据分解为电压x.xx bit bdata IIC_ERROR; //I2C错误标志位 uchar LCD_Line_1[]={\" . V \//延时

void delay(int ms) { uchar i;

while(ms--) for(i=0;i<250;i++) Delay4us(); }

//LCD忙检测

bit LCD_Busy_Check() {

bit Result; LCD_RS=0;LCD_RW=1;

LCD_EN=1;Delay4us();Result=(bit)(P0&0x80); LCD_EN=0; return Result; } //写指令

void LCD_Write_Command(uchar cmd) {

while(LCD_Busy_Check());

LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_(); P0=cmd;Delay4us();

7

LCD_EN=1;Delay4us();LCD_EN=0; } // 写数据

void LCD_Write_Data(uchar dat) {

while(LCD_Busy_Check());

LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;Delay4us(); LCD_EN=1;Delay4us();LCD_EN=0; } //初始化

void LCD_Initialise() {

LCD_Write_Command(0x38);delay(5); LCD_Write_Command(0x0c);delay(5); LCD_Write_Command(0x06);delay(5); LCD_Write_Command(0x01);delay(5); }

//设置显示位置

void LCD_Set_Position(uchar pos) {

LCD_Write_Command(pos|0x80); }

//显示一行

void LCD_Display_A_Line(uchar Line_Addr,uchar s[]) { uchar i;

LCD_Set_Position(Line_Addr);

for(i=0;i<16;i++)LCD_Write_Data(s[i]); }

// 将模数转换后得到的值分解存入缓存 void Convert_To_Voltage(uchar val) {

uchar Tmp; //最大值为255,对应5V,255/5=51 Voltage[2]=val/51+'0'; //整数部分

8

Tmp=val%51*10; // 第一位小数 Voltage[1]=Tmp/51+'0'; Tmp=Tmp%51*10;

Voltage[0]=Tmp/51+'0'; }

void iic_start(void) {

SDA = 1; SCL = 1;

Delay4us(); // 延时5us SDA = 0; Delay4us(); SCL = 0; }

void iic_stop(void) {

SDA = 0; SCL = 1; Delay4us(); SDA = 1; Delay4us(); SCL = 0; }

void iicInit(void) {

SCL = 0; iic_stop(); }

void slave_ACK(void) {

SDA = 0; SCL = 1; Delay4us(); SCL = 0;

9

SDA = 1; }

void slave_NOACK(void) {

SDA = 1; SCL = 1; Delay4us(); SDA = 0; SCL = 0; SDA = 0; }

void check_ACK(void) {

SDA = 1; //置成输入 SCL = 1; F0 = 0; Delay4us(); if (SDA == 1) //若SDA=1表明非应答 F0 = 1;

//置位非应答标志F0 SCL = 0; }

void IICSendByte(unsigned char indata) {

unsigned char n = 8; //发送一字节数据,共八bit while (n--) {

SDA = (bit)(indata &0x80); SCL = 1; Delay4us(); SCL = 0;

indata = indata << 1; //数据左移一位 }

10

}

unsigned char IICreceiveByte(void) {

unsigned char n = 8; //读取一字节数据,共八bit unsigned char tdata = 0; while (n--) {

SDA = 1; SCL = 1;

tdata = tdata << 1; //左移一位 if (SDA == 1)

tdata = tdata | 0x01;

//若接收到的位为1,则数据的最后一位置1 else

tdata = tdata &0xfe; //否则数据的最后一位置0 SCL = 0; }

return (tdata); }

void ADC_PCF8591(unsigned char controlbyte) {

unsigned char i = 0;

iic_start();

IICSendByte(0x90); //控制字0x90 check_ACK();

IICSendByte(controlbyte); //通道控制字 check_ACK();

iic_start(); //重新发送开始命令 IICSendByte(0x91); //控制字0x91 check_ACK();

11

IICreceiveByte(); //空读一次

slave_ACK(); //收到一个字节后发送一个应答位 while (i < 3) //采集0,1,2通道 {

Recv_Buffer[i++] = IICreceiveByte(); slave_ACK(); }

Recv_Buffer[3] = IICreceiveByte(); //采集第3通道 slave_NOACK(); //收到最后一个字节后发送一个非应答位 iic_stop(); } //主程序 void main() {

LCD_Initialise(); while(1) {

ADC_PCF8591(0x04);

Convert_To_Voltage(Recv_Buffer[0]); LCD_Line_1[2]=Voltage[2]; LCD_Line_1[4]=Voltage[1]; LCD_Line_1[5]=Voltage[0];

LCD_Display_A_Line(0x00, LCD_Line_1); } }

12

7、参考文献

[1]李建忠,单片机原理及应用,西安电子科技大学出版社,2008年。 [2]启东单片机仿真试验系统使用说明书。

[3]李珍,单片机原理与应用技术,清华大学出版社,2003年。 [4]严洁,单片机原理及接口技术,机械工业出版社,2010年1月。 [5]QTH-2008XS_系列单片机教学实验仪。

[6]刘瑞新等,单片机原理及应用教程.机械工业出版社,2003年7月。 [7]张毅刚等,MCS-51单片机应用设计(第二版).哈工大出版社,2004年。

13

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务