ATmega16与触摸屏的连接

发布者:火箭飞人最新更新时间:2014-09-23 来源: eefocus关键字:Atmega16  触摸屏  ADS7846 手机看文章 扫描二维码
随时随地手机看文章
       触摸屏是四线电阻式的,驱动芯片采用了很常见的ADS7846。ADS7846的典型应用电路图如下图所示。


        在笔者的应用中,pin7和pin8都直接连接到GND,即不使用辅助输入通道,pin9和pin10连接在一起,即使用了VCC做为ADS7846的模数转换参考电压源。pin11所接的上拉电阻可以不要,但要设置相应的AVR输入端口上拉电阻使能。pin13做为转换结束指示,可以通过判断此脚电平来决定是否可以读出转换数据,也可以简单的使用延时的方法来留够转换时间。pin16、pin15、pin14、pin12做为一个标准的SPI从机接口与mega16芯片相连接。

       ADS7846支持8位精度和12位精度,即触摸分辨率可以达到1/256或者1/4096,根据不同分辨率的LCD来选择相应的触摸精度。比如128×64的LCD可以采用8位精度,320×240的LCD需要采用12位精度。采集后的数据分两次读出,8位精度的先得到前7位再得到最后一位,12位精度的先得到前7位再得到后5位。

程序段如下:(编译器使用ICCAVR)



/*************************************************
SPI Interface file
crystal: 8MHz
write by han, hanembed@126.com, http://embed.hanyuer.net
***************************************************/

#include
#include

/*====================================================
// function: initialize spi interface
// in: void
// retun: void
// date: 2005/8/10
=================================================*/
void spiinit(void)
{
DDRB = (1 << PB4) | (1 << PB5) | (1 << PB7); // MOSI and SCK port out
PORTB |= (1 << PB4);
SPCR = (1 << SPE) | (1 << MSTR) | (0 << SPR0); // enable spi,master mode, MCLK/4,spi 0 mode
}

/*====================================================
// function: send data form spi interface
// in: unsigned char real data
// retun: void
// date: 2005/8/10
==================================================*/
void sendspi(unsigned char data)
{
SPDR = data; // send data
while( !(SPSR & (1 << SPIF)) ); // wait data transfer end
}

/*=====================================================
// function: receive data form spi interface
// in: void
// retun: unsigned char
// date: 2005/8/10
===================================================*/
unsigned char readspi(void)
{
return SPDR;
}

 

/****************************************************
touch data read file
crystal: 8MHz
write by han, hanembed@126.com, http://embed.hanyuer.net
*******************************************************/

#include
#include
#include "..incspi.h"

unsigned int positionx;
unsigned int positiony;
unsigned char flgtouch;

/*========================Extern Interrupt==========================*/
#pragma interrupt_handler keydown: iv_INT1

/*==============================================
// function: initialize all used port
// in: void
// retun: void
// date: 2005/8/10
=======================================================*/
void portini(void)
{
spiinit();
endspi();
DDRD &= ~(1 << PD3); // port input
PORTD |= (1 << PD3); // pull-up resistance
//MCUCR |= 1<GICR |= 1<flgtouch = 0;
}

/*==================================================
// function: small delay
// in: unsigned char delay times
// retun: void
// date: 2005/8/10
===================================================*/
void smalldelay(unsigned char tmp)
{
unsigned char i;
while(tmp--)
{
for(i = 0; i < 250; i++)
{
NOP();
}
}
}

/*================================================
// function: read touch data
// in: void
// retun: void
// date: 2005/8/10
===================================================*/
void keydown(void)
{
unsigned char tmp; // temporary data
smalldelay(20); // delay wait tranquilization
startspi(); // begin data transfer
smalldelay(1);
sendspi(0x90); // difference conversion, x data
smalldelay(2); // delay wait x conversion
sendspi(0x00);
tmp = readspi(); // first 7 bit x data
if(tmp == 0x7F) // error read
return;
positionx = tmp;
positionx <<= 5; // left shift 5 bit
sendspi(0xD0); // difference conversion, y data
tmp = readspi(); // last 5 bit x data
tmp >>= 3; // right shift 3 bit
positionx += tmp; // real x data
smalldelay(2); // delay wait y conversion
sendspi(0x00);
tmp = readspi(); // first 7 bit y data
positiony = tmp;
positiony <<= 5;
sendspi(0x00); // only for read last y data
tmp = readspi();
tmp >>= 3;
positiony += tmp; // real y data
endspi();
}

经过简单调试,笔者编写了一个PC端软件以显示在触摸屏上滑过的字符,一块8×5cm的触摸屏上约可以写四行汉字,如下图所示:



       图中的若干零散点是由于硬件并没有做抗干扰滤波,mcu程序中也没有对接触点进行重复读取所致,一般可使用读取两次,重复数据为正确数据的方法来排除干扰。
关键字:Atmega16  触摸屏  ADS7846 引用地址:ATmega16与触摸屏的连接

上一篇:基于Atmega16的太阳能电池板光源控制系统设计方案
下一篇:步进电机驱动器的关键技术研究

推荐阅读最新更新时间:2024-03-16 13:42

基于DSP和触摸屏的串行通信系统设计
  在现代工业控制中,最常用的人机接口界面依然采用的是键盘和液晶相结合的方式,要让 触摸屏 取代以前的人机接口界面,还存在一定的问题。在实际应用中, 触摸屏 一般是针对可编程控制器PLC 设计的,所以 DSP 与 触摸屏 不能直接通信,必须根据触摸屏的通信协议开发相应的通信程序。本文研究基于MODBUS 协议的触摸屏和 DSP 的通信方法,其中 DSP 使用TI公司的TMS320F2812,触摸屏使用维控科技的LEVI700L。   1 DSP 与触摸屏的硬件电路连接   TI 公司的TMS320F2812 芯片有两组SCI 模块,SCIA 和SCIB。根据不同的需要,可以将这两个串口分别设计转换成RS2
[嵌入式]
基于DSP和<font color='red'>触摸屏</font>的串行通信系统设计
赛普拉斯TrueTouch® 解决方案助力宏基ICONIA TAB A100平板电脑的触摸屏
2011 年 10 月 24 日,北京讯,加州圣何塞讯——赛普拉斯半导体公司(纳斯达克股票代码:CY)日前宣布其面向大尺寸多点触摸屏的 TrueTouch® 解决方案已应用于宏基的 ICONIA TAB A100 平板电脑(业界首款 7 英寸 Android 3.2 蜂巢平台的平板电脑)的独特触摸屏显示。 该款平板电脑不仅设计时尚而且非常轻便,配备了色彩明亮的 7 英寸多点触摸显示屏,分辨率为 1024 x 600,并支持高彩对比和 70 度视角。该产品重量为 0.92 磅,厚度为 0.5 英寸。多功能 A100 可用于游戏、上网,同时也可用于诸如日历和电子邮件等效率型应用。此外,集成蓝牙技术能够帮助消费者连接耳机和键盘等设备。
[手机便携]
AVR单片机ATmega16之初识PWM模式
书本上开篇关于这部分的描述是这样讲的:相对于一般的8位单片机而言,AVR不仅配备了更多的定时/计数器接口,而且还是增强型的例如通过定时/计数器与比较匹配寄存器相互配合,生成占空比可调的方波信号,即脉冲宽度调制输出的PWM信号,用于D/A转换,电机无极调速控制、变频控制等(这样一段书上的导语其实已经很好地概括了PWM的产生原理,和用途),下面说说具体的实现方式吧(都是以T/C0定时器为例来实现的)。按照我自己的粗略总结大致分为三大类(下面会逐条详细解释):1.CTC模式产生(50%占空比的方波信号) 2.快速PWM模式 3.相位可调PWM模式 (因为是初学如有不对,还望朋友们指正!!!) 先来看看这东西对应的输出引脚吧: (根据
[单片机]
AVR单片机<font color='red'>ATmega16</font>之初识PWM模式
嵌入式操作系统Nucleus下触摸屏驱动的开发
Nucleus 是一款优秀的 嵌入式 实时操作系统(RTOS),具有抢占式和时间片轮转任务调度方式,主要用在时间苛刻的 嵌入式 应用当中。大约95%的Nucleus用ANSI C 写成,作为一个库加载到应用代码当中。目前 手机 行业有很多使用Nucleus。 1. 触摸屏 控制 电路 的硬件结构 触摸屏控制电路主要有一下四部分组成:进行数据处理、控制功能的MCU,一个四线 电阻 式触摸屏和控制芯片ADS7846, 以及显示触摸点坐标的显示部分。 在这里主要对触摸屏的硬件电路和 驱动 设计做一个较详细的介绍 ADS7846是美国TI公司推出的一款四线制电阻式触摸屏控制器,通过 机械 式触摸,可以迅速得到触摸点位置信号。它
[模拟电子]
S3C2440触摸屏控制总结
触摸屏控制原理,其实与ADC读取一个滑动变阻器中间触点电压的原理一样。只不过,读取触摸屏的X、Y方向上的电压需要两次,而且需要设置其工作模式以实现一个ADC读取两个通道的电压。 S3C2440的ADC控制是很简单的,与普通单片机控制ADC的方法没有多大区别。大概的操作步骤都是如下所示。 (1)设置控制寄存器ADCCON (2)启动ADC转换 (3)等待转换结束 (4)读取转换结果 但是,S3C2440的触摸屏控制有什么工作模式,如等待中断模式,分离的x/y轴坐标转换模式,自动(连续)x/y轴坐标转换模式,普通转换模式。通过官方芯片资料理解这些模式,似乎还是一头雾水。经过测试,我对这些模式有了初步的认识。 (一) ADC&TC模式分
[单片机]
爱特梅尔maXTouch 助力联想IdeaPad TabletK1触摸屏
微控制器及触摸解决方案的领导厂商爱特梅尔公司(Atmel® Corporation)宣布联想已选择maXTouch® mXT1386控制器助力联想IdeaPad TabletK1平板电脑。新型联想IdeaPad TabletK1平板电脑运行Android 3.1版本操作系统,搭载双核1GHz NVIDIA Tegra 2处理器和1GB内存,并配置带有黑色边框的10.1英寸1280x800分辨率显示屏。爱特梅尔maXTouch mXT1386这款突破性全新触摸屏控制器具有出色的电池寿命和更快的响应速度,因而获联想选择使用。 外形时尚的联想IdeaPad TabletK1平板电脑含有一个位于显示屏上方中心位置的200万象素前向摄像
[电源管理]
嵌入式Linux系统中触摸屏驱动的研究
引言 随着计算机相关技术的发展,嵌入式系统的应用越来越广泛,与人们生活紧密结合。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,不占额外的空间,可靠性高,是最常用的便携式系统的输入设备。特别是电阻式触摸屏结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度,高速传输反应,一次校正,稳定性高,不漂移等特点,因而广泛用于工业控制领域及在室内使用。 1 硬件平台 S3C241
[嵌入式]
AVR单片机(学习ing)—(十)、ATMEGA16的同步串行接口SPI—02
1)那就是在之前的介绍中说过,在说一遍~~ 主机和从机的两个移位寄存器可以被认为是一个公开的16位环形移位寄存器,当数据从主机移向从机时,同时从机饿数据也向相反的放向移向主机。这就意味着在一个以为周期内,主机和从机的数据进行了交换。(不过这个例子里没有用到这个,下个会用到~~呵呵~~),早知道对谁都好~~ 2)配置为SPI主机时,SPI接口不自动控制SS引脚,必须由用户软件来处理。还有配置为从机时,只要SS引脚为高,SPI接口将一直保持睡眠状态,并保持MISO为三态。(这个章节的第一篇文章有详细的介绍~~自己可以看看~~) 3)SPI系统的发送方向只有一个缓冲器,而接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束
[单片机]
AVR单片机(学习ing)—(十)、<font color='red'>ATMEGA16</font>的同步串行接口SPI—02
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved