为了将电阻式触控式萤幕上的触控点坐标读入微控制器,需要使用一个专用的触控式萤幕控制器晶片,或者利用复杂的外部开关网路来连接微控制器的片上类比数位转换器。本文以夏普公司具有内建片上ADC的LH754xx系列和LH7A404微控制器为例,详细介绍这种用于电阻式触控式萤幕的类比数位转换器介面与编程特性。
LH75400/01/10/11系列和LH7A404等微控制器具有一个内含触控式萤幕偏置电路的片上类比数位转换器,它是一种逐次逼近暂存器型转换器。这些控制器可以在触控式萤幕感测器和微控制器之间进行直接联系,无需CPU介入即可控制所有触控式萤幕偏置电压,并记录全部测量结果。
此主题相关图片如下:1.gif
其中的ADC模组由ADC核心、测量结果FIFO、正输入多工器、负输入多工器、正参考多工器、负参考多工器、测量序列产生器和偏置与控制网路组成。除了LH7A404外,所有ADC模组的I/O接脚都穿过GPI MUX,这个多工器可由用户将每个接脚配置为通用数位输入或类比接脚。将ADC模组I/O接脚配置为数位输入时,GPI MUX会把一个数位输入缓冲器连接到这个接脚;而将其配置为类比接脚时,GPI MUX则把它与数位输入缓冲器断开,同时将缓冲器接地。在低功耗应用中,为了尽量减少漏电流,可以将所有未使用的ADC I/O接脚都接地,或者将未使用的ADC I/O接脚编程为类比接脚。本文假设ADC模组中所有需要的I/O接脚都已被设置为类比接脚。
对于LH75400/01/10/11系列元件,ADC的正输入多工器可以对所有8个ADC接脚(AN0~AN4、AN6、AN8和AN9)中的任何一个进行采样;对于LH7A404,ADC的正输入多工器可以对所有10个ADC接脚的任何一个进行采样。为了节省LH75400/01/10/11的接脚,制造商只引出了10个接脚中的8个,因此LH75400/01/10/11系列的类比接脚序号不是完全连续的。在所有的晶片上,负输入多工器可以选择负参考输入或VSSA_ADC作为ADC的负输入,正参考多工器可以选择片上参考或三个外部接脚之一作为正参考,负参考多工器则可选择VSSA_ADC或三个其它外部接脚作为负参考。这些多工器将类比输入连接到SAR ADC的核心。图1为ADC的方框图,需要注意的是,LH7A404的11到1多工器还有另外两个类比输入。
透过低阻类比开关,ADC的偏置与控制网路可以将类比接脚切换到VDDA_ADC或VSSA_ADC。另外,偏置与控制网路也可以将弱上拉电阻切换到AN0和AN4接脚。图2为偏置与控制网路结构图。启动测量后,测量序列产生器将控制整个过程,包括需要启动哪些类比开关来偏置触控式萤幕、什么时候启动这些开关、使用哪些接脚作为ADC核心的类比输入、采样间隔为多长等等。测量序列产生器的功能很强,但也比较复杂。
A2DCLK时脉讯号决定序列产生器和ADC核心的时基,A2DCLK频率透过电源配置暂存器进行编程。测量序列产生器是一个状态机,它向偏置与控制网路、多工器和类比核心发送资讯。序列产生器发送的资讯称为控制字元(Control Word),长度为32位元。由于ADC的片内数据汇流排只有16位元,所以控制字被分开保存在控制高位字暂存器和控制低位字暂存器中。要查看序列产生器发送给ADC其余部份讯号的目前状态,可以让程式读取控制高位字暂存器和控制低位字暂存器。控制高位字暂存器中包含了正负输入多工器、正参考多工器和测量设立时间的目前设置,控制低位字暂存器中则含有负参考多工器和偏置与控制网路的控制位目前状态。
测量序列产生器状态机在开始时为IDLE(空闲)状态。在空闲状态期间,控制高位字包含了空闲高位元组值,控制低字包含空闲低位元组值,这意味着空闲低位元组设置的是偏置与控制网路中的开关状态。当触控式萤幕被触控而触发测量时,状态机将等待空闲高位字暂存器中空闲时间字段所设定的A2DCLK周期数。之后,如果ADC仍然检测到触控式萤幕上有触控动作,序列产生器将前进到GET_DATA状态。在GET_DATA状态,测量序列产生器从控制区数组中取出控制字,控制区是一个包含16个控制高位字数值和16个控制低位字数值的数组。序列产生器使用索引号0到15来存取控制区。电源配置暂存器的NOC字段设定为序列产生器将要从控制区读取的总次数减1。
序列产生器进入GET_DATA状态时,控制区索引号为0。序列产生器从控制区高位字加载控制高位字,并从控制区低位字加载控制低位字,控制低位字中的新值使偏置与控制网路中的开关切换到编程设定的状态。新的控制字加载完成之后,序列产生器进入WAIT_CONV状态。在WAIT_CONV状态,序列产生器将等待控制区高位字设立时间字段中编程设定的A2DCLK周期数,这给触控式萤幕的电压、偏置和控制开关设置提供了稳定时间。随后,ADC核心执行一次测量作业,测量结束时,ADC核心发出讯号,示意测量序列产生器读取转换结果。测量序列产生器前进到END_OF_SEQ状态,读取转换结果,保存到结果FIFO,并将控制区索引号加1。
这个以读出新控制字为开始、保存测量结果为结束的过程重覆执行,直到序列产生器进行了电源配置暂存器NOC字段所设定的测量次数为止。当序列所有测量完成之后,序列产生器将设置中断状态暂存器中的EOSINTR_UM位。测量序列产生器可以编程为检测到触控式萤幕被触控时触发,在这种模式下,只要萤幕上检测到触控动作,序列产生器便会自动重新触发。测量序列产生器也可以设定为由软体命令触发或连续触发。
基本ADC设置
此主题相关图片如下:2.gif
无论要测量哪一种类型的触控式萤幕,都应当配置测量序列产生器执行下列步骤:
1.执行触控检测;
2.测量X;
3.测量Y;
4.继续进行触控检测。
其中有一个假设,即如果测量序列开始时你正摸着萤幕,测量序列结束时还在触控,那它就认为测量X和Y的整个期间都在触控萤幕。
为了测量是否触控了萤幕,需要对偏置与控制网路进行编程,将一个弱上拉电阻连接到AN0接脚,并将一个强下拉电阻连接到AN4接脚(对五线和七线触控式萤幕)或AN3接脚(对四线和八线触控式萤幕),将参考输入多工器设为使用片上的2.0V参考。
将正输入多工器编程为测量AN0,负输入与负参考相同。例如,如果选择的测量阈值为三分之一满量程,那么当AN0上的电压为2.0V÷3=0.66V时将会检测到一次触控。在3.3V范围内,它有足够的噪音余量。上拉电阻将触控式萤幕上拉到VDDA_ADC的过程可能非常缓慢,解决的方法是,在测量触控状态之前,用偏置与控制网路中的强上拉位2对AN0接脚预先充电。此时如果触控面板受到触控,测量序列产生器在下一步骤中切换进来的强下拉将很快把AN0拉下来;如果没有触控面板,那么在触控检测测量期间,弱上拉将把AN0接脚保持在VDDA_ADC。