单片机扩展触摸屏人机接口的应用实例

技术分类: 微处理器与DSP  | 2007-08-16
来源:电子产品世界 | 作者:杭州电子科技大学 王爱华

  以上所需要的加参考电压断开A/D转换等工作都是ADS7843直接完成的,只需要将相应的命令传输到ADS7843即可,等待转换周期完成,检测到BUSY信号不再忙,即可以获得相应电压的数据。

  此外PENIRQ一般需要一个上拉电阻,因为ADS7843是一个OC门输出结构,本系统中直接使用Atmega 128内部的上拉电阻。单片机中断系统中将INT0分配给触摸屏控制器,并且设定成低电平触发,这样可以检测按键时间,可以用按键长短处理不同的功能。

  触摸屏控制器驱动程序

  驱动程序的编写与硬件的设计是直接相关,驱动程序是以上面所设计的硬件为基础的。

表1 ADS7843的控制字及数据传输格式

ADS7843的控制字及数据传输格式

  根据ADS7843的Datasheet,ADS7843的控制字及数据传输格式如表1。其中S为数据传输起始标志位,该位必为“1”。A2~A0进行通道选择。MODE用来选择A/D转换的精度,“1”选择8位,“0”选择12位。SER/选择参考电压的输入模式。PD1、PD0选择省电模式:“00”省电模式允许,在两次A/D转换之间掉电,且中断允许;“01”同“00”,只是不允许中断;“10”保留;“11”禁止省电模式。

  为了完成一次电极电压切换和A/D转换,需要先通过串口往ADS7843发送控制字,转换完成后再通过串口读出电压转换值。标准的一次转换需要24个时钟周期。由于串口支持双向同时进行传送,并且在一次读数与下一次发控制字之间可以重叠,所以转换速率可以提高到每次16个时钟周期。如果条件允许,CPU可以产生15个CLK的话(比如FPGA和ASIC),转换速率还可以提高到每次15个时钟周期。

  所以我们选择控制字 :

  0x94-----X+输入得到Y AD值    0xe4----Y+输入得到X AD值
SPI初始化程序:
void spi_init(void)
{
 SPCR = 0x53; //setup SPI
 SPSR = 0x00; //setup SPI
}
SPI主机传输函数:
void SPI_MasterTransmit(char cData)
{
SPDR = cData; /* 启动数据传输 */
while(!(SPSR & (1<  结束*/
}
读取ADS7843的模拟量值;
unsigned int Get_Touch_Ad(unsigned char
  channel)
{
unsigned int ad_tem;            
SPI_MasterTransmit(channel);//发送控制字
if(PING&&0x08==0)  ;      //判断busy
delayms(1);
SPI_MasterTransmit(0);
delayms(1);              //等待发送完毕 
ad_tem=SPDR;
ad_tem=ad_tem<<8;
SPI_MasterTransmit(0);       //启动spi传送
delayms(1);    //等待发送完毕  
 ad_tem|=SPDR;
ad_tem=ad_tem>>4;
return(ad_tem);  //返回的参数
}

  不同的用户还需根据自己设计的系统,做一个简单的四点校正程序,这样可以获得一个精确度较高的触摸屏坐标体系。

  结语

  本系统已经在国家重点建设项目扬州二电厂工程2×600MW发电机组的自动化设备中得到应用,共使用了64套,运行一年以来使用情况良好。

  参考文献:

  1.  金春林等编著,AVR单片机C语言编程实例,清华大学出版社

  2.  BBADS7843 Datasheet,www.ti.com

1】【2
加载中

对文章的评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销