一:传统使用方法 ICL7135精度高、抗干扰性能好、价格低,应用十分广泛。本文介绍ICL7135的引脚定义、主要特性及其与单片机的接口。 1. ICL7135的引脚功能及主要特性 ICL7135是双斜积分式4位半单片A/D转换器,28脚DIP封装。其引脚功能如下:{1}脚(V-)-5V电源端;{2}脚(VREF)
基准电压输入端;{3}脚(AGND)模拟地;{4}脚(INT)积分器输入端,正雹接积分
电容;{5}脚(AZ)积分器和比较器反相输入端,接自零电容;{6}脚(BUF)缓冲器输出端,接积分电阻;{7}脚(CREF+)基准电容正端;{8}脚(CREF-)基准电容负端;{9}脚(IN-)被测信号负输入端;{10}脚(IN+)被测信号正输入端;{11}脚(V+)+5V电源端;{12}、{17}~{20}脚(D1~D5)位扫描输出端;{13}~{16}脚(B1~B4)BCD码输出端;{21}脚(BUSY)忙状态输出端;{22}脚(CLK)时钟信号输入端;{23}脚(POL)负极性信号输出端;{24}脚(DGND)数字地端;{25}脚(R/H)运行/读数控制端;{26}脚(STR)数据选通输出端;{27}脚(OR)超量程状态输出端;{28}脚(UR)欠量程状态输出端。 TCL7135的主要性能特点为: 1)输入阻抗达109Ω以上,对被测电路几乎没有影响;2)自动校零;3)有精确的差分输入电路;4)自动判别信号极性;5)有超、欠压输出信号�6)采用位扫描与BCD码输出。 2. ICL7135与单片机的接口 1)电路原理 图1是ICL7135与单片机的接口电路。图中C1、R2是积分元件,C2是自零电容,C3是基准电容;R3、C5组成标准输入滤波网络;R4、C9、D1、D2组成输入过压保护电路;RP1为基准电压调整电位器,可根据要显示的满度值选择基准电压的大小,这里设计为1.0000V,它们的关系是:满度值为基准电压的两倍。IC4为六反相器,两个反相器组成振荡电路为ICL7135提供时钟信号,振荡频率f=0.45/(R6×C4)。ICL7135要求每秒钟至少进行3次A/D转换,每次转换需要40000个时钟
脉冲,因此时钟频率应大于120kHz,这里取f=125kHz。STR为选通脉冲输出端。一次A/D转换结束后,在该端连续输出5个负脉冲,分别对应5组BCD码数据。74LS244是三态缓冲器,1G、2G分别选通两组信号:1G=0、2G=1时,选通第一组信号:1G=1、2G=唤隐0时,选通第二组信号。单片机的P3.1接1G,当P3.1为0时接通显示数码管;P3.7接2G,当P3.7为0时接通ICL7135的B1~B4。 2)ICL7135 STR端时序图 图2为ICL7135 STR端输出时序图。STR端在1秒内输出3 次,每次5个、共15个负脉冲,每次输出时间约333ms,连续负脉冲间的时间差远小于65ms。程序中设定T1中断时间间隔至少65ms,因而可准确检测出STR发出的5个连续的负脉冲,分别接收4位半A/D转换器输出的5个BCD码数据。 3)A/D转换相关软件工作原理 STR的负脉冲1号~5号、6号~10号、11号~15号,分别对应于数据1、数据2、数据3的BCD码的低位到高位……。ICL7135的STR接89C2051的P3.2。IDTB为取数中断(外中断IET0)程序。每次进入取数中断程序,接通74LS244第二组数据输入开关,读P1.3~P1.0口,送到以举链帆13H单元为指针的单元中(初始化时13H单元内容为1CH),然后13H单元数据指针减1。待5个BCD码取完,置位转换成功标志20H.6,将13H单元送1CH,调用子程序DTB将18H~1CH的BCD码数据转换为两个8位二进制数送6EH、6FH(高位存6EH单元)。IET1为T1中断程序,T1工作于方式1,不送入时间常数(即初始值为0000H),若晶振为12MHz,则每次中断的时间间隔为65.536ms。进入IET1中断时,如果20H.0=1,表示正在测量周期或频率;如果20H.0=1,且13H单元内容不为1CH、20H.7=0,表示是在连续取数过程中第一次进入IET1;如果20H.0=1,且13H单元内容不为1CH、20H.7=1,表示第二次进入IET1,在这两次进入IET1之/*查询法实现AD转换,接4位7段共阴数码管数码管,单片机P00~P03接位选,P20~P27接段选,ALE接CD4040分频,
频率为500kHz,再接到ICL7135的CLOCKIN上。稳压管为TCL431,扒春通过多圈电位器给ICL7135的参考电压分为1V,
ICL7135的负电压端通过ICL7660来供给(接近-5V就行了),ICL7135的电容要用CBB电容,质量好一些。
有一个值得注意的问题,单片机、显示、还有7135的模块要共地。如果熟悉单片机,想看下边的程序应该不会碧搏
很难。 */
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit BUSY=P3^2
uint tt,temp
float v,Rx,t
double c
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f}
uchar code table1[]={0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef}
void delay(uchar z)
{
uchar x,y
for(x=20x>0x--)
for(y=zy>悔此祥0y--)
}
void init()
{
EA=1
TMOD=0x09
TH0=0
TL0=0
ET0=1
// IT0=1
}
void main()
{
uint i
init()
while(1)
{
while(BUSY)
TH0=0
TL0=0
TR0=0
while(!BUSY)
TR0=1
while(BUSY)
TR0=0
temp=(TH0*256+TL0)/2-10001
v=(float)(temp)/10000
v=v/50.4
Rx=5000/(50.0/51.0-v/2.45)-5000
c=39.08*39.08-4*0.58*(Rx-100)
t=(39.08-sqrt(c))*100/(2*0.58)
for(i=0i<50i++)
{
P2=table[(unsigned int)(t*100)%10]
P0=0xf7
delay(10)
P2=table[(unsigned int)(t*10)%10]
P0=0xfb
delay(10)
P2=table1[(int)(t)%10]
P0=0xfd
delay(10)
P2=table[(int)(t/10)%10]
P0=0xfe
delay(10)
P0=0xff
}
}
}
评论列表(0条)