打印
[技术讨论]

【RA生态开发板-RA-Eco-RA4M2】2.RA4M2开发板CTSU使用

[复制链接]
128|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

RA4M2带有CTSU外设用于触摸应用。

ra4m2-block-diagram_0.png

RAEco-RA4M2开发板带有两个触摸按键,可以用于CTSU外设的应用。

CTSU 原理简介

原理上,触摸按键电路中的触摸部分在未接触和接触时的电容会发生变化。

CTSU_theory.png

通过检测测量电流的变化间接计算出触摸电容的变化,来判断触摸按键是否被按下。瑞萨的CTSU外设集成上述的功能,用户只需要完成简单的外部电路设计,配合官方提供的工具即可实现触摸功能。

CTSU_electric_circuit.png

开发板上提供两个触摸按键,按键的原理图如下。

CTSU_TS.png

CTSU_TSCAP.png

查看芯片的数据手册,两个触摸按键连接到芯片的TS11和TS12

CTSU_TSpins.png

CTSU 应用开发

在官网的QE帮助页面,可以下载到《Using QE and FSP to develop Capacitive Touch Applications》的文档用于CTSU的开发。

QE_For_CTSU_Guide.png

文档介绍如何使用e2studio中的QE for Capacitve来配置触摸按键类型、校准触摸硬件和生成CTSU应用代码等。

CapTouch Workflow(QE)设计

创建R7FA4M2AD3CFP的工程,在工程的FSP界面对工程进行配置。在BSP选项卡中,修改堆大小,用于字符函数处理

FSP_BSP_Settings.png

在Pins选项卡中,设定CTSU外设需要的引脚TSCAP-P207、TS11引脚P415,TS12引脚P708

FSP_Pins_CTSU_Setting.png

在Stacks选项卡中管理相应的软件组件,添加CTSU驱动以及相应的中间件。

FSP_Stacks_Touch_add.png

FSP_Stacks_Touch_add1.png

添加完成后,对其中的CTSU模块进行设置,使能DTC数据传输。

FSP_Stacks_Touch_Enable_DTC.png

同时添加相应的DTC驱动

FSP_Stacks_Touch_AddDTC_Driver.png

其余选项选择默认,这样完成简单的CTSU模块的设置。点击"生成工程"按钮,生成相应的代码。

瑞萨提供QE for Capactive配置工具供用户生成触摸相关的代码。在e2tudio的工具栏中进入瑞萨视图的Renensas QE,选择CapTouch Workfolw(QE),对触摸按键进行配置。

e2studio_Renesas_QE.png

根据页面上的提示,我们可以完成工程选择、触摸校准、代码生成以及按键监控功能。首先,选择需要添加CapTouch代码的工程。

QE_For_Cap_sel_proj.png

在“Prepare a Configuration”界面对工程中用到的触摸按键进行配置,包括按键的形式、引脚、参数等;

QE_For_Cap_config_touch.png

通过右侧的Touch I/F菜单添加对应硬件的触摸感应类型和按键形式。开发板的触摸按键是自容检测,按键形式为"button",添加后,点击左下的配置按钮,在对话框中设置名称、电阻和引脚信息。

QE_For_Cap_config_touch_button_setup.png

配置完成后点击create。

QE_For_Cap_config_touch_creat.png

对工程进行编译,保证工程编译正常,可以调试。接下来对触摸传感器进行校准。首先需要对调试选项进行配置。

QE_For_Cap_Tuning_Debug_conf.png

QE_For_Cap_Tuning_Debug_conf2.png

连接开发板和调试器,上电后,点击"Start Tuning"开始传感器校准过程。

alt text

校准过程中会提示用户按压触摸按键,完成触摸传感器的校准过程。

CapTouch_Tunning_1.png

CapTouch_Tunning_2.png

CapTouch_Tunning_result.png

完成校准过程后。输出工程文件,在工程中会添加qe_touch_define.h、qe_touch_config.h和qe_touch_config.c三个文件。

CapTouch_Output_Driver.png

project_qe_gen.png

在CapTouch Workflow(QE)选项卡中的“Implement Program”中,输出qe_touch_sample.c文件,提供CTSU外设的启动和状态监控的模板,用户根据需要,修改其中的代码满足应用需求。

project_qe_sample.png

project_qe_gen2.png

其中的qe_touch_main函数是按键处理的主程序。在hal_entry中调用该函数,用于进行触摸按键的检测,不过该函数是个死循环,触摸按键以外的功能在裸机上需要添加到函数中。

编译工程后,进行调试。在CapTouch Workflow(QE)界面有监视的功能,可以监控触摸按键的状态。

CapTouch_Monitor.png

CapTouch_Monitor_Status.png

触碰开发板上的TS1触摸案件后可以观察到数据的变化。借助Renesas QE工具调试触摸按键还是很方便的。

CapTouch_Monitor_Status1.png

触摸控制开发板上的LED

完成上述步骤后,触摸按键就可以作为输入设备实现人机交互。在此基础上添加控制功能,实现触摸应用的开发。板上有3个LED灯可以作为触摸按键的控制设备,当触摸按键检测到按下时,翻转对应的LED灯状态。LED2的控制引脚为P406,LED3的控制引脚为P002。

在FSP界面的Pins选项卡,将对应的引脚设置为输出模式

LED_Pin_Ouput.png

在qe_touch_sample.c中,添加引脚控制的代码,修改的代码如下

/***********************************************************************
*
* FILE : qe_touch_sample.c
* DESCRIPTION : Main Program for RA
*
* NOTE:THIS IS A TYPICAL EXAMPLE.
*
***********************************************************************/
#include "qe_touch_config.h"
#include "bsp_api.h"

#define TOUCH_SCAN_INTERVAL_EXAMPLE (20)    /* milliseconds */

/** Array of LED IOPORT pins. */
static const uint16_t g_bsp_prv_leds[] =
{
    (uint16_t) BSP_IO_PORT_04_PIN_04,  ///< LED2
    (uint16_t) BSP_IO_PORT_00_PIN_02,  ///< LED3
};

/** Information on how many LEDs and what pins they are on. */
typedef struct st_bsp_leds
{
    uint16_t         led_count;        ///< The number of LEDs on this board
    uint16_t const * p_leds;           ///< Pointer to an array of IOPORT pins for controlling LEDs
} bsp_leds_t;

const bsp_leds_t g_bsp_leds =
{
    .led_count = (uint16_t) ((sizeof(g_bsp_prv_leds) / sizeof(g_bsp_prv_leds[0]))),
    .p_leds    = &g_bsp_prv_leds[0]
};

typedef enum e_bsp_led
{
    BSP_LED_LED2,                      ///< LED2
    BSP_LED_LED3,                      ///< LED3
} bsp_led_t;

/* Holds level to set for pins */
bsp_io_level_t pin_level_led2 = BSP_IO_LEVEL_LOW;
bsp_io_level_t pin_level_led3 = BSP_IO_LEVEL_LOW;

void qe_touch_main(void);

uint64_t button_status;
#if (TOUCH_CFG_NUM_SLIDERS != 0)
uint16_t slider_position[TOUCH_CFG_NUM_SLIDERS];
#endif
#if (TOUCH_CFG_NUM_WHEELS != 0)
uint16_t wheel_position[TOUCH_CFG_NUM_WHEELS];
#endif

void qe_touch_main(void)
{
    fsp_err_t err;

    R_BSP_PinAccessEnable();
    R_BSP_PinWrite((bsp_io_port_pin_t) g_bsp_leds.p_leds[0], pin_level_led2);
    R_BSP_PinWrite((bsp_io_port_pin_t) g_bsp_leds.p_leds[1], pin_level_led3);

    /* Open Touch middleware */
    err = RM_TOUCH_Open(g_qe_touch_instance_config01.p_ctrl, g_qe_touch_instance_config01.p_cfg);
    if (FSP_SUCCESS != err)
    {
        while (true) {}
    }

    /* Main loop */
    while (true)
    {
        /* for [CONFIG01] configuration */
        err = RM_TOUCH_ScanStart(g_qe_touch_instance_config01.p_ctrl);
        if (FSP_SUCCESS != err)
        {
            while (true) {}
        }
        while (0 == g_qe_touch_flag) {}
        g_qe_touch_flag = 0;

        err = RM_TOUCH_DataGet(g_qe_touch_instance_config01.p_ctrl, &button_status, NULL, NULL);
        if (FSP_SUCCESS == err)
        {
            /* TODO: Add your own code here. */
        }

        switch(button_status)
        {
            case 1:
                /* Toggle level for next write */
                if (BSP_IO_LEVEL_LOW == pin_level_led2)
                {
                    pin_level_led2 = BSP_IO_LEVEL_HIGH;
                }
                else
                {
                    pin_level_led2 = BSP_IO_LEVEL_LOW;
                }
                R_BSP_PinWrite((bsp_io_port_pin_t) g_bsp_leds.p_leds[0], pin_level_led2);
                break;
            case 2:
                if (BSP_IO_LEVEL_LOW == pin_level_led3)
                {
                    pin_level_led3 = BSP_IO_LEVEL_HIGH;
                }
                else
                {
                    pin_level_led3 = BSP_IO_LEVEL_LOW;
                }
                R_BSP_PinWrite((bsp_io_port_pin_t) g_bsp_leds.p_leds[1], pin_level_led3);
                break;
            default:
                ;
        }

        /* FIXME: Since this is a temporary process, so re-create a waiting process yourself. */
        R_BSP_SoftwareDelay(TOUCH_SCAN_INTERVAL_EXAMPLE, BSP_DELAY_UNITS_MILLISECONDS);
    }
}

编译并烧录后,可以通过触摸按键改变LED2和LED3的状态。

2_TOUCH.gif

总结

Renesas的QE for CapTouch从硬件配置、触摸校准、软件驱动和调试监控提供方便使用的工具用于触摸应用的开发。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

448

帖子

3

粉丝