RTC时钟与触摸功能详解(下)

发布者:Leishan最新更新时间:2024-06-28 来源: elecfans关键字:RTC  时钟  触摸功能 手机看文章 扫描二维码
随时随地手机看文章

58.5 电阻式触摸控制器——XPT2046

为了方便测量触摸屏的坐标,芯片厂商设计了专门的触摸屏控制芯片,实现触摸点电压测量与转换功能。本文采用的XPT2046是一款4导线制触摸屏控制器,内含12位分辨率


125KHz 转换速率逐次逼近型A/D转换器。XPT2046通过执行两次A/D转换便可以计算出触摸点位置,该芯片兼容 ADS7843 触摸芯片,其电路原理图和引脚图如图8-6和表8-1、表8-2所示。

图片

图片

XPT2046的电源VCC的范围为2.7V~5.5V。A/D转换所需的参考电压可以选择通过VREF输入,范围是1V~VCC;也可以采用内部内部 2.5V参考电压,采用内部参考电压时VREF引脚应悬空。XPT2046除了作为触摸驱动芯片,还可以进行电池电压检测、温度测量,以及压力测量。作为触摸屏应用时,X+、X-、Y+、Y-分别连接电阻触摸屏的X+、X-、Y+、Y-引脚,测量时芯片会根据指令自动切换X、Y电极的电压,并采集触摸点的电压进行快速A/D转换。

XPT2046的ADC可以配置为单端或差分模式,具体如下:

单端模式是以外部参考电压VREF为参考,在采样过程完成后,进行A/D转换时可以关闭驱动开关,以降低功耗。但这种模式的缺点是精度直接受参考电压源的精度限制,同时由于内部驱动开关存在导通电阻,导通电阻与触摸屏电阻的分压作用,也会带来测量误差。因此该模式主要应用于电池监测、温度测量和压力测量。

差分工作模式是以X、Y电极两端的电压作为差分输入电压,可消除由于驱动开关的导通电阻引入的坐标测量误差。缺点是驱动开关一直接通,相对于单端输入模式而言,功耗变高了。作为触摸屏应用时,为了提高转换精度,应该配置为差分模式。

68.6 XPT2046通信接口及控制命令

XPT2046允许采用SPI,SSI,Microwire等串行接口通信,本文采用IO口模拟SPI方式通信。XPT2046一次完整的数据转换一般需要24个时钟周期,即通信时单片机必须提供24个时钟周期才能保证XPT2046完成一次数据转换,数据按照高位在前、低位在后的顺序传输,当CS为低电平时,数据在CLK的上升沿锁存,下降沿输出(即CPOL=0,CPHA=1的模式)通信时序如8-7所示。

图片

图8-7 XPT2046 24时钟周期转换时序图

结合时序图,操作步骤如下:

1、发送控制字命令。前8个时钟周期单片机通过DIN(MOSI)引脚发送控制字命令,用于配置XPT2046的工作模式。控制命令由8个数据位组成,包括起始位、通道选择位、分辨率选择位、输入方式和低功率模式,控制命令如表8-3所示。

图片

(1)起始位——第一位,即 S 位。控制字的起始位必须为 1,否则所有的输入将被忽略。

(2)通道选择位——A2、A1、A0用于选择对哪一个通道进行A/D转换。差分模式下:当A2=0,A1=0,A0=1时表示选择X+通道,即测量Y轴坐标;当A2=1,A1=0,A0=1时表示选择Y+通道,即测量X轴坐标。测量坐标时,要分别测量X+和Y+通道。

(3)MODE——模式选择位,用于设置 ADC 的分辨率。为0表示下一次的转换为 12 位模式;为1表示下一次的转换将是 8 位模式,默认设置选择12位模式。

(4)SER/DFR——输入模式选择位,单端输入方式/差分输入方式选择位。为1是单端输入方式,为0是差分输入方式,触摸测量时默认选择差分模式,即设置该位为0。

(5)PD1和PD0——模式选择位,其功能如表8-4所示。若为11,器件总处于全功耗模式;若为00,器件在A/D转换之间处于低功率模式。同时PD0位还控制是否产生PENIRQ中断,如果使能PENIRQ中断,当有触摸动作时,PENIRQ引脚会输出0,否则输出1,通过PENIRQ引脚可以判断是否有触摸动作,本教材默认设置PD1、PD0为00。

2、电压采样。当XPT2046接收到5个控制命令位时,即在接收到MODE位后,XPT2046内部就可以根据控制位信息设置输入多路选择器和参考源输入,并启动触摸面板驱动器,开始进入采样模式,该动作与SPI串行通信是同步的,并不影响剩余控制位的传输,如图8-7种的时序图所示;3个多时钟周期后,控制字接收完成,于此同时采样完毕,转换器进入转换状态,此时XPT2046会将BUSY引脚置高,表示数据正在转换。

3、转换结束后需要提供16个时钟信号,其中第1个时钟信号用于清除BUSY位,然后再发送12个时钟周期将输出转换后的12位有效数据。最后3个时钟信号用于输出剩余3个无效数据,默认为0。

4、注意当次读取的转换数据,是上一次的转换结果,而当次的时钟提供的转换数据,下一次读取,因此第一次读取的数据是无效数据。

78.7 触摸屏校准

计算触摸点位置时需要引入两个概念——物理坐标和逻辑坐标。物理坐标就是触摸点在液晶屏上的实际位置,通常以液晶上像素的个数来度量。本文采用的TFT-LCD的X和Y轴坐标范围分别为0239和0319。逻辑坐标指的是触摸点的电压值经ADC转换后得到的坐标值,由ADC精度决定,12位ADC模式下其范围为0~4095。实际使用时需要通过逻辑坐标计算相应的实际物理坐标。

触摸屏是由液晶显示屏(TFT-LCD)叠加一层触摸层构成一个矩形的实际物理平面。一方面由于存在误差,这两个平面并不是完全重合;另一方面由于 A/D转换器的前端电路具有高输入阻抗,因此特别容易受到电气噪声的干扰;触摸屏本身电阻材料的均匀性以及模拟电子开关的内阻和 A/D转换器自身的转换精度都会影响转换后的逻辑坐标值。基于以上两方面原因导致实际的物理坐标与软件通过逻辑坐标所计算的物理坐标有所偏差。校准的作用就是要将逻辑平面映射到物理平面上,即得到触点在液晶屏上的位置坐标。

由于电阻式触摸屏的电压成线性均匀分布,那么A/D转换后的坐标值也成线性。首先假定物理平面和逻辑平面之间的误差是线性误差,如果已知触摸屏上一点A,其物理坐标为(X a ,Y a ),相应的逻辑坐标为(X b ,Y b ),根据假定的线性关系,可以得到:

Xa = K ~x ~ * X ~b ~ + D x ;

Ya = K ~y ~ * X ~b ~ + D y ;

其中Kx、Ky分别为触摸屏X方向和Y方向的缩放比例系数,D x 、Dy为偏差常数,它们由校准点计算而来。根据触摸屏的Kx、Ky、D x 、D y ,就可以通过逻辑坐标计算出相对准确的物理坐标。

触摸屏的校准方法大致有两点校准、三点校准、四点校准、五点校准等。其中校准的点数越多,触摸屏的校准相对越精确。本文采用五点校正法。五点校正法优势在于可以更加精确的计算出X和Y方向的比例缩放系数,同时提供了中心基准点,对于一些线性电阻系数比较差的电阻式触摸屏有很好的校正作用。

首先在液晶屏的4个角取4个固定物理坐标作为测量点,并且在液晶屏中心位置取一个基准点,然后依次显示各个校准点,并读取该点的触摸坐标,最后计算Kx、Ky、D x 、D y ,校准点如图8-8所示。

图片

8-8 五点校准示意图

校准流程如下所示:

1、依次显示并触摸5个校准点,并读取触摸坐标;

2、根据坐标计算S1、S2、S3、S4、S5、S6五条线段的长度,并比较S1和S2,S3和 S4,S5和S6的距离,当二者的距离小于一定范围时,默认校准有效,否则无效,重新 校准。当距离差越小时,校准越准确。

3、根据所得的校准点的逻辑坐标计算缩放比例系数K x 、K y ,和偏差D x 、Dy公式如下:

Kx = ((X2-X1)/ S1+(X4-X3)/ S2)/2

Ky = ((Y3-Y1)/ S3+(Y4-Y2)/ S4)/2

D ~x ~ = (S1- K x *(X1+X2))/2

D ~y ~ = (S1- Ky*(Y1+Y2))/2

4、通过K x 、K y 、D x 、Dy以及中心基点的逻辑坐标计算相应的物理坐标,如果计算后的坐标与实际坐标误差小于一定范围,比如5个像素时认为校准成功,否则校准失败,需要重新校准。

88.8 触摸画板实验

根据液晶屏的触摸功能设计了一款简易的触摸画板实验。触摸画板分为两部分,功能区和绘画区,功能区用来选择画笔颜色和清除画板,然后通过触摸笔在绘画区绘制图案。

首先将触摸事件分为按下、滑动、抬起三种事件,不同事件对应不同的动作。当滑动事件触发时,如果触摸点的坐标位于绘画区,则在对应位置通过画点函数画一个2*2的点。当抬起动作触发时,如果抬起时的坐标是否位于功能区,则触发相应的功能。

具体代码如下:

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片


关键字:RTC  时钟  触摸功能 引用地址:RTC时钟与触摸功能详解(下)

上一篇:C语言基础知识点
下一篇:ADC简介及功能框图讲解

推荐阅读最新更新时间:2026-03-25 01:31

基于STM32F103C8T6单片机的RTC实时时钟原理及配置代码
学习STM32的RTC之前先了解一下UNIX时间戳 UNIX时间戳 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数(不进位为时、天、月),不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间 优点 1)使用秒数可以简化硬件电路,直接弄一个很大的秒寄存器,不需要再考虑年月日寄存器以及进位 2)计算时间间隔很方便,直接用两个秒数相减 3)存储方便,用一个很大的变量来就可以了 秒计数器以及伦敦时间和北京时间的对用关系如下所示: 直接搜索可以找到在线
[单片机]
基于STM32F103C8T6单片机的<font color='red'>RTC</font>实时<font color='red'>时钟</font>原理及配置代码
RTC时钟和BKP的配置stm32
RTC和后备寄存器通过一个开关供电,在VDD有效的时候选择VDD供电,否则选择VBAT引脚供电. 后备寄存器(10个16位的寄存器),可以用于在关闭VDD时,保存20个字节的用户应用数据(中容量和小容量产品,大容量和互联性产品有84字节). RTC和后备寄存器不会被系统或电源复位源复位;当从待机模式唤醒时,也不会被复位. RTC的作用: 日历时钟功能; 闹钟中断; 阶段性中断; RTC时钟源: 外部晶体32.768kHz振荡器;内部低功耗RC振荡器; 高速的外部时钟经128分频. 复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护,以防止可能存在的意外的操作. 执行下面操作,可以是能对备份寄存器和RTC的访问: 打
[单片机]
<font color='red'>RTC</font><font color='red'>时钟</font>和BKP的配置stm32
STM32 RTC实时时钟(一)
STM32处理器内部集成了实时时钟控制器(RTC),因此在实现实时时钟功能时,无须外扩时钟芯片即可构建实时时钟系统。 实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模式的自动唤醒单元。 两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31天。并且还可以进行夏令时补偿。其它 32 位寄存器还包含可编程的闹钟亚秒、秒、分钟、小时
[单片机]
STM32 <font color='red'>RTC</font>实时<font color='red'>时钟</font>(一)
【STM32】HAL库-RTC实时时钟
简介 实时时钟是一个独立的定时器 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变 系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问: 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。 时钟源 通过设置备份域控制寄存器(RCC_BDCR)里的RTCSEL 位,RTCCLK时钟源可以由HSE/128、LSE或LSI时钟提供。 除非备份域复位,此选择不能被改变。
[单片机]
【STM32】HAL库-<font color='red'>RTC</font>实时<font color='red'>时钟</font>
STM32再学习——实时时钟RTC
RTC,是RealTimeCounter的缩写。在MCU中,其实是一组连续计数的计数器,各个产品及系列各不相同。因此,在相应的软件配置下,可提供时钟日历的功能。当然,修改这个计数器的值也就重新设置了系统当前的时间和日期。 本文引用地址:http://www.eepw.com.cn/article/182407.htm RTC只是一个时钟,但与RTC相连的有两个系统时钟,一个是APB1接口的PCLK1另一个是RTC时钟 。这样,RTC功能也就分为两个部分:第一部分,APB1接口部分,与APB1总线相连,MCU也就是通过这条总线对其进行读写操作。另一部,RTC核,由一系列可编程计数器组成,这部分又再细分为两个组件:预分频模块与
[单片机]
STM32再学习——实时<font color='red'>时钟</font>(<font color='red'>RTC</font>)
纠结的STM32 RTC时钟源LSE
一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题。直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题。 这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻,手册上要求使用6pf,这个规格的晶振市场上太少,鱼龙混杂,中招的高手菜鸟不在少数。我们自己的板也是如此,几经波折,反反复复尝试使用不同的规格的晶振,替换外部的电容,电阻都没有能让这个32.768K的LSE起振。但是又需要有RTC来提供时间,考虑的方法主要有2种,第一采用外部RTC时钟芯片,如DS1302。第二是使用内部其它的时钟源来提供RTC时钟。毫无疑问,目前板已经制好,添加时钟芯片肯定造成板上布局更改,还得重新打板,这里采用
[单片机]
STM8L探索套件学习笔记-RTC实时时钟(六)
RTC的时钟可以选择四种时钟HSE/HIS/LSE/LSI,如下图所示。相比STM32的RTC需要相关软件配合才能RTC功能。STM8L更加灵活,相关寄存器就有33个,而且是硬件实现的,缺点是没有独立的RTC供电的电源。 实时时钟的主要代码: void main(void) { u8 temp=0; /* Infinite loop */ /* Select LSE (32.768 KHz) as RTC clock source */ CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1); CLK_PeripheralClockConfig(CLK_Perip
[单片机]
S3C2440 RTC实时时钟 驱动分析以及使用(三十)
RTC驱动分析总结: driversrtcrtc-s3c.c s3c_rtc_init platform_driver_register s3c_rtc_probe rtc_device_register( s3c , &pdev- dev, &s3c_rtcops, THIS_MODULE) rtc_dev_prepare cdev_init(&rtc- char_dev, &rtc_dev_fops); rtc_dev_add_device cdev_add linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24XX为主,所以它的RTC驱
[单片机]
S3C2440 <font color='red'>RTC</font>实时<font color='red'>时钟</font> 驱动分析以及使用(三十)
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved