在笔者的应用中,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<
}
/*==================================================
// 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的太阳能电池板光源控制系统设计方案
下一篇:步进电机驱动器的关键技术研究
推荐阅读最新更新时间:2024-03-16 13:42
设计资源 培训 开发板 精华推荐
- 直播已结束【通过集成隔离数据和电源 IC 降低辐射】
- 有奖直播:万物互联 -世健公司携手Microchip专家,共同探讨IoT解决方案
- 发帖赢好礼 | MPS 工程师为您解决DC-DC设计难题
- 预约有礼:2020年最新KEE课程
- 【传感器,开玩啦】第一关:免费申请评测运动和环境传感器开发板
- 直播已结束【英飞凌智能门锁解决方案】
- 深入剖析恩智浦LPC1000处理器
- Follow me第2期来袭,与得捷电子一起解锁开源硬件 Adafruit ESP32-S3 TFT Feather!
- 有奖直播|高速总线PCIe5.0技术发展与测试分享
- 《美光2022台北国际电脑展主题演讲精选:数据中心专辑》,关注、评论赢固态硬盘等好礼!