新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 通过ADS7846在PDA上实现个性化书法输入

通过ADS7846在PDA上实现个性化书法输入

作者: 时间:2012-10-22 来源:网络 收藏

触摸压力测量是指对指尖或笔尖触及触摸屏时产生的压力值进行测量。触摸压力不是直接测出来的,而是转换为测量触点处X工作面和Y工作面之间的接触电阻的大小来完成的。Rtouch的公式如下:

式中,Rtouch表示接触电阻;Rx是X+与X-两电极间的总电阻;Z1和Z2是触摸屏的内部参数,反映触点与X工作面和Y工作面间的关系。Z1和Z2两个参数及X的值可通过提供的指令采样得到。而Rx并不需要去测量,因为各个触摸屏的这个参数并不一样,但在同一个触摸屏上它却是个定值,每个点的Rtouch都要乘以这个定值Rx,所以这个参数可以不考虑。所得到的Rtouch值的大小反应了测量触点压力的大小。Rtouch越大,压力越小,可以通过实验测出不同压力的Rtouch值。如果发现压力值分布范围太宽,可以给Rtouch除以一个合适的参数;如果发现压力值分布太窄,可以给Rtouch乘以一个合适的参数。笔者针对自己的触摸屏,通过试验发现用

比较合适,不同的压力与Rtouch的比值分布在80~170之间,这样就有足够的间隔来把压力划分为不同的等级。

2 设计原理与具体实现

2.1 设计思路

微处理器首先利用SPI总线通过采样到笔尖在触摸屏上的触点坐标值及Z1值和Z2值;然后通过式(1)和式(2)计算出映射到LCD屏上的坐标值,用式(4)计算出Rtouch值;再利用GUI提供的API函数在LCD上画一条线段把前一个触点和当前触点连起来;最后在这条线段的两边扩展平行线,平行线的数量越多,这条线段越粗。平行线的数量由当前触点Rtouch的大小决定,即压力越大,线段越粗。这样就模拟出了用毛笔或钢笔书写时笔锋游转的效果。

2.2 电路设计

笔者以MOTOROLA公司的DRAGONBALL(龙珠)系列(ARM92T)作为硬件平台[2],利用提供的SPI总线对进行控制和数据传输。接口示意图如图1所示。

由图1可以看出,ADS7846与其前代产品ADS7843的接口电路完全相同。如果需要在原来使用ADS7843的设备上增加片内温度测量、触摸压力测量、外模拟量测量和电池电压测量四个功能,只需将板上的ADS7843替换为ADS7846,然后改写驱动程序即可。因为ADS7846与ADS7843的引脚封装完全一致,所以不用改动电路,这使更换工作非常方便。

2.3 驱动程序

在应用中,采用差动参考电压方式测量坐标模拟量,测量命令字的设置和模拟量选择参见表1和表2。

表1 ADS7846的测量命令字

Bit7(MSB)BIt6Bit5Bit4Bit3Bit2Bit1Bit0
SA2A1A0MODESER/DFRPD1PD0

表2 差动参考电压方式下的模拟量选择

A[2:0]参考电压(+REF,-REF)模拟量输入所测参数
001Y+,Y-X+Y
011Y+,X-X-Z1
100Y+,X-Y-Z2
101X+,X-Y+X

有关ADS7843驱动程序的资料很多,源代码也能很容易地找到。具有触摸压力测量功能的ADS7846的驱动程序,只需在原ADS7834驱动程序的合适位置加入采样Z1参数和Z2参数的代码就行了[4] .这部分的代码很简单,添加也很容易。笔者在上实现的源代码如下:

spi_tx_data(0xB0); //输入采样Z1值的命令//

zl_upper = REG_SPI_RXDATA;

spi_tx_data(0x00);

zl_upper = REG_SPI_RXDATA;

spi_tx_data(0xc0); //输人采样Z2值的命令//

zl_lower = REG_SPI_RXDATA;

spi_tx_data(0x00);

z2_upper = REG_SPI_RXDATA;

spi_tx_data(0x00);

z2_lower = REG_SPI_RXDATA;

spi_tx_data(0x00); //输入采样Y值的命令//

x_upper = REG_SPI_RXDATA;

spi_tx_data(0x00);

x_upper = REG_SPI_RXDATA;

spi_tx_data(0x90); //输入采样X值的命令//

x_lower = RE G_SPI_RXDATA;

spi_tx_data(0x00);

y_upper = REG_SPI_RXDATA;

spi_tx_data(0x00);

y_upper = REG_SPI_RXDATA;

然后,计算出X,Y,Z1和Z2的值:

X=(((x_upper5)0xFE0) ((x_lower>>3) 0x1F));

Y=(((y_upper5)0xFE0) ((y_lower>>3) 0x1F));

Z1=(((z1_upper5)0xFE0) ((z1_lower>>3) 0x1F));

Z2=(((z2_upper5)0xFE0) ((z2_lower>>3) 0x1F));

此外,还应注意触摸抖动和连击问题。可以采用延迟测量法来解决,即在接收到触摸屏笔中断时延迟一段时间(抖动时30ms)后再测量,可消除抖动;测量完后再次延迟一段时间(连击延时300ms)后打开笔中断,可避免连击现象的出现。驱动程序主要包括初始化SPI寄存器、可编程定时器中断和笔中断。在笔中断中主要完成关笔中断、设置笔中断标志和将定时计数值设置为抖动延时,在定时器中断程序中主要实现坐标值的测量、延时功能。

电能表相关文章:电能表原理


关键词: ADS7846 书法 MC9328MX1 PDA

评论


相关推荐

技术专区

关闭