为了完成一次电极电压切换和A/D转换,需要先通过串口往ADS7843发送控制字,转换完成后再通过串口读出电压转换值。标准的一次转换需要24个时钟周期,如图7所示。由于串口支持双向同时进行传送,并且在一次读数与下一次发控制字之间可以重叠,所以转换速率可以提高到每次16个时钟周期,如图8所示。如果条件允许,CPU可以产生15个CLK的话(比如FPGAs和ASICs),转换速率还可以提高到每次15个时钟周期,如图9所示。
[img]http://www.liuguo.net/Article/UploadFiles/200703/20070315091700587.gif[/img]
图7 A/D转换时序(每次转换需24个时钟周期)
[img]http://www.liuguo.net/Article/UploadFiles/200703/20070315091700911.gif[/img]
图8 A/D转换时序(每次转换需16个时钟周期)
[img]http://www.liuguo.net/Article/UploadFiles/200703/20070315091701271.gif[/img]
图9 A/D转换时序(每次转换需15个时钟周期)
2.4 A/D转换时序的程序设计
ADS7843的典型应用如图4所示。假设μP接口与51单片机的P1.3~P1.7相连,现以一次转换需24个时钟周期为例,介绍A/D转换时序的程序设计。
; A/D 接口控制线
DCLK BIT P1.3
CS BIT P1.4
DIN BIT P1.5
BUSY BIT P1.6
DOUT BIT P1.7
; A/D 通道选择命令字和工作寄存器
CHX EQU 094H ;通道X+的选择控制字
CHY EQU 0D4H;通道Y+的选择控制字
CH3 EQU 0A4H
CH4 EQU 0E4H
AD_CH EQU 35H ;通道选择寄存器
AD_RESULTH EQU 36H ;存放12 bit A/D值
AD_RESULTL EQU 37H
; 存放通道CHX+的A/D值
CHXAdResultH EQU 38H
CHXAdResultL EQU 39H
; 存放通道CHY+的A/D值
CHYAdResultH EQU 3AH
CHYAdResultL EQU 3BH
; 采集通道CHX+的程序段(CHXAD)
CHXAD: MOV AD_CH,#CHX
LCALL AD_RUN
MOV CHXAdResultH,AD_RESULTH
MOV CHXAdResultL,AD_RESULTL
RET
; 采集通道CHY+的程序段(CHYAD)
CHYAD: MOV AD_CH,#CHY
LCALL AD_RUN
MOV CHYAdResultH,AD_RESULTH
MOV CHYAdResultL,AD_RESULTL
RET
; A/D转换子程序(AD_RUN)
; 输入: AD_CH-模式和通道选择命令字
; 输出: AD_RESULTH,L ;12 bit的A/D转换值
; 使用: R2 ;辅助工作寄存器
AD_RUN:
CLR CS ; 芯片允许
CLR DCLK
MOV R2,#8 ;先写8 bit命令字
MOV A,AD_CH
AD_LOOP:
MOV C, ACC.7
MOV DIN,C ;时钟上升沿锁存DIN
SETB DCLK ;开始发送命令字
CLR DCLK ;时钟脉冲,一共24个
RL A
DJNZ R2,AD_LOOP
NOP
NOP
NOP
NOP
ADW0: JNB BUSY,AD_WAIT ;等待转换完成
SJMP ADW1
AD_WAIT:
LCALL WATCHDOG
NOP
SJMP ADW0
CLR DIN
ADW1: MOV R2,#12 ;开始读取12bit结果
SETB DCLK
CLR DCLK
AD_READ:
SETB DCLK
CLR DCLK ;用时钟的下降沿读取
MOV A,AD_RESULTL
MOV C,DOUT
RLC A
MOV AD_RESULTL,A
MOV A,AD_RESULTH
RLC A
MOV AD_RESULTH,A
DJNZ R2,AD_READ
MOV R2,#4 ;最后是没用的4个时钟
IGNORE:
SETB DCLK
CLR DCLK
DJNZ R2,IGNORE
SETB CS ;禁止芯片
ANL AD_RESULTH,#0FH ;屏蔽高4 bit
RET
2.5 A/D转换结果的数据格式
ADS7843转换结果为二进制格式。需要说明的是,在进行公式计算时,参考电压在两种输入模式中是不一样的。而且,如果选取8位的转换精度,1LSB=VREF/256,一次转换完成时间可以提前4个时钟周期,此时串口时钟速率也可以提高一倍。
[b]结束语[/b]
在许多嵌入式系统中,CPU提供专门的模块来支持液晶显示和触摸屏的输入,使得接口非常简单。比如,MOTOROLA的MC68VZ328(称为Dragon Ball)就提供专门的引脚来支持8位和4位的液晶显示,对触摸屏的支持通过SPI2借助ADS7843也很容易完成。