原创 使用AVR内部ADC做的Touch Panel

2011-12-8 18:50 2517 5 5 分类: MCU/ 嵌入式

好长时间没在EDN写博客了,上一次还是准备毕业找工作的时候,现在已经工作5个月了, 转眼就快一年了。中间好多东西都没有整理,留着慢慢整理吧,先来个最近的。

 

img_20111208_172658.jpg

言归正传,这个是用ATMega8L做的,5V供电,使用内部2.56V的ADC参考电压,晶振24M。测了一下四线的电阻屏的电阻大约为400R,所以串了一个470R的电阻,通过电阻接到ADC接口,这样经过电阻分压就可以使ADC的输入在0-2.56V的范围内。LCD接到SPI接口上。电路就这么简单,做的时候没画原理图,现在补一个示意图:

 

图像 2.gif
首先,判断是否有触摸发生,配置PC0输出为0,PC2输出为1,这样就给触摸屏的X方向加上了电压,配置PC3为弱上拉输出,PC1为高阻输入。在没有触摸时,由于PC3的上拉,在PC1读到的电压值为ADC的最大值。当有触摸时,PC1上的电压会受到X方向的电压的影响而发生改变(变小),这就可以作为触摸开始的信号。
 
然后,将PC3设置为高阻输入,这样PC1上的电压就是触摸点处的X方向的电压,经过计算就可以确定X坐标。

接着,配置PC1输出为0,PC3输出为1,PC2为高阻输入(这里就不用上拉的步骤了,因为已经触摸了,输入的电压是确定的,不容易受干扰的),PC0为高阻输入。读出PC0上的电压值,经过计算就可以确定Y坐标了。

最后,将各端口设置为开始的状态,等待下一次触摸就可以了。

使用内部ADC做的触屏精度和反应速度都是不错的,而且电路简单、节约美金。但是触屏和按键一样也会有抖动,需要通过软件过滤掉,不然会有噪点。

 

img_20111208_125422.jpg
 
 

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条