garfield

【原创】使用飞思卡尔pe工具开发freedom触摸功能

0
阅读(5451)


图1,飞思卡尔开发平台上的触摸板滑块区域(红色线条圈中的部分)。

Processor Expert这款组件既可以简化触摸感应接口(TSI)模块开发,也可以让你获得所有这些十分繁琐的功能。本篇博文中,我会介绍Processor Expert的触摸感应软件(TSS)库组件。在此不会再重复利用面向MCUs v10.3的CodeWarrior创建Processor Expert项目的详细情况。

添加TSS_Library Processor Expert组件

首先基于KL25Z MCU创建CodeWarrior项目,并激活Processor Expert工具。通过Components Library(组件库)视图,我将TSS_Library组件添加到我的项目中。这一操作可以右击组件,并选择快捷菜单中的Add to project(添加至项目)(图2)完成,或者使用视图中的+图标,或者双击TSS_Library组件完成。

图2,添加TSS_Library组件。

由于我们已经添加了软件,现在开始配置这一界面。这意味着我们需要了解有哪些端口及其引脚需要连接到运用触摸板的电极。线路图原理示意图揭示出两个电极连接到了PTB16/Channel9PTB17/Channel10(图3)。


图3,电极线路 (TSI_CH09和TSI_CH10)连接到端口B、引脚PTB16和PTB17。

首先,这一组件需要支持两个电极。为了达到这一目的,我在项目中选择了TSS_Library_Component。在Component Inspector(组件检查器)视图中,我点击Number of Electrodes(电极数目)属性项目中的+符号,将电极数量增加到了两个(图4)。
提示1:如果Component Inspector(组件检查器)视图不可见:右击TSS_Library图标选择Inspector(检查器)
提示2:为了显示+按钮,更改以下截图中所示的电极数量,我需要在画面中点击选择选项。

图4,采用Number of Electrodes(电极数量)属性添加电极。

在配置了组件用来支持两个电极之后,我继续开心地打开Properties(属性)视图将通道接线连接(图5)到适合的端口。这些元素都在图中用黄色标识出来。


图5,指定电极/通道连接线。

配置控制组件
该Processor Expert组件的出色功能可以为所有人机界面控制组件提供单击式支持,并且指定它们如何产生价值,以及如何应对用户事件。因此我添加了滑动控制,现在我采用了它的默认设置(图6):

图6,配置人机界面控制组件的类型的输出范围。

正如截图显示的一样,控制组件已经配置为ASLIDER (模拟滑块)控制。我对它如此配置,使它的范围为0到64,范围值存储在名称为TSS1_cKey0的结构中。该结构名称和值范围都会在TSS库检测到触摸时使用到。

添加LED
在我的代码中,我希望采用线路板的RGB LED显示滑块的状态(即触摸的滑块以及位置)。我不会解释如何将LED组件添加到我的项目中,这在LED指导教程中提供了详细说明。

提示:我可以从我其他的指导教程项目中复制-粘贴LED组件。这只需要几秒钟时间便可以添加到我的新项目中。

当完成之后,Components(组件)视图与图7所示类似。


图7,添加LED组件的项目。

生成Processor Expert驱动程序代码
现在我可以基于设置生成驱动程序代码。最简单的方式就是选择项目,并且点击Generate Processor Expert Code(生成Processor Expert代码)(图8):

图8,生成Processor Expert代码。

Processor Expert工具将它产生的代码放置在文件TSS1.c和TSS1.h之中,这两个文件位于Generated_Code项目文件夹下(图9)。


图9,利用TSS文件生成的TSS驱动程序代码。

TSS库初始化
由于我已经拥有了项目的代码,现在可以使用它。为了让TSS库API正确运行,我必须对它进行初始化。关于这个任务,我需要调用Configure()。提供这个函数的简洁方式可以采用拖拽式操作,应用到我的源代码中(图10):

图10,通过拖拽式操作配置TSS库。

利用这个初始化的库,为了捕捉用户事件,我需要采用TSS_Task()定期调用TSS库。因此在main()中,我需要将这一函数调用添加到事件循环中,如下所示:

int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
/* Write your local variable definition here */
/*** PE internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
/*** End of PE internal initialization. ***/
Configure(); /* initialize TSS library */
for(;;) {
TSS_Task(); /* call TSS library to process touches */
}
/*** Don't write any code pass this line ***/
/*** RTOS startup code. ***/
#ifdef PEX_RTOS_START
PEX_RTOS_START(); /* Startup of the selected RTOS. */
#endif
/*** End of RTOS startup code. ***/
/*** PE end of main routine. DON'T MODIFY THIS CODE!!! ***/
for(;;){}
/*** PE end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

函数TSS_Task()可以检测滑块是否被触摸,并且会调用回调函数处理这一事件。这个回调函数被称为fcallBack()。这是我在系统中第一次(也是仅有的一次)控制,这个函数是TSS1_fCallback0()如图11中所示。

图11,当触摸滑块时被调用的回调函数。

双击回调事件打开面向用户回调函数代码的编辑器视图。这个代码位于源文件Events.c之中(图12)。


图12,滑块回调函数的占位符存根。

还记得我们在配置控制组件时定义的范围和结构名称吗?现在可以在这里使用这些项目,并且打开LED。LED显示哪种颜色取决于范围值。这个功能由以下代码执行:

void TSS1_fCallBack0(TSS_CONTROL_ID u8ControlId)
{
(void)u8ControlId; /* avoid warning */
LED1_Put(TSS1_cKey0.Position<=20);
LED2_Put(TSS1_cKey0.Position>20 && TSS1_cKey0.Position<=40);
LED3_Put(TSS1_cKey0.Position>40 && TSS1_cKey0.Position<=64);
}

此处的库提供TSS1_cKey0中的值,它的扩展范围是0到64。你不必了解将滑块电容读数转换为范围值(它代表滑块的位置)的算法详细内容。

触摸
经过所有这些设置工作之后,剩余的任务十分轻松:编译、下载并且运行线路板的代码。采用我的值排列,如果我触摸左侧的滑块,则LED1打开(图13);如果我触摸中间的滑块,则LED2打开(图14);如果我触摸右侧的滑块,则LED3打开(图15)。

图13,触摸左侧滑块:红色LED灯亮起。


图14,触摸中间滑块,打开绿色LED灯。

图15,触摸右侧滑块:蓝色LED灯亮起。

总结
应用设备的电容触摸功能通常并不轻松。但是,采用基于Eclipse的CodeWarrrior IDE for MCU 10.3交付的TSS 库Processor Expert组件可以大幅简化工作量。正如本指导教程显示的一样,在数分钟之内你便可以将触摸滑块配置在飞思卡尔Freedom开发平台上,只需单击操作就可以使用,并且添加少数代码。当然,还需要大量的设置需要你进行微调(灵敏度、分辨率、控制程度),但我希望这可以为你在极短时间内完成任务提供一个思路。除此之外,关于TSS库访问此处还可以获得许多相关的文档。

在本指导教程中讨论的项目源代码可以访问此处获取。

祝你触摸编程顺利!

Baidu
map