【RTT&英飞凌PSoC6评估板】触摸滑条测试
[复制链接]
触摸滑条可是英飞凌最为推崇的功能,英飞凌触摸功能支持“自电容”和“互电容”两种方式,本次测试使用滑条块测试自电容模式和互电容模式,但是引脚和标准板子不一样需要调整。
首先还是创建keil项目,本次测试使用CAPSENSE Buttons and Slider模板,
还是先把debug为两线模式,将WCO去掉,CLK_LF转换源为ILO
修改CYBSP_DEBUG_UART_RX和CYBSP_DEBUG_UART_TX,P6.4和P6.5
依据原理图进行修改
注意调整各个引脚
CYBSP_CSD_SLD0, CYBSP_CS_SLD0 ——> P7[3]
CYBSP_CSD_SLD4, CYBSP_CS_SLD1 ——> P9[0]
CYBSP_CSD_SLD4, CYBSP_CS_SLD2 ——> P9[1]
CYBSP_CSD_SLD4, CYBSP_CS_SLD3 ——> P9[2]
CYBSP_CSD_SLD4, CYBSP_CS_SLD4 ——> P9[3]
滑条和按钮是在一起的,互电容的按钮使用P7[3]和P9[3]
所有要在这两个引脚上加入按钮的宏语句,
CYBSP_CSD_SLD0, CYBSP_CS_SLD0, CYBSP_CSD_BTN0, CYBSP_CS_BTN0 ——> P7[3]
CYBSP_CSD_SLD4, CYBSP_CS_SLD4, CYBSP_CSD_BTN1, CYBSP_CS_BTN1 ——> P9[3]
将互电容发生脚调整
CYBSP_CSD_RX, CYBSP_CS_RX, CYBSP_CS_TX_RX ——> P7[0]
修改后如下,
接着修改外设。
修改调整后保存save,
打开项目
将capsense_callback()修改为capsense_callback(cy_stc_active_scan_sns_t * ptrActiveScan);
去掉led的程序,//initialize_led();
主要的程序是process_touch()函数
/*******************************************************************************
* Function Name: process_touch
********************************************************************************
* Summary:
* Gets the details of touch position detected, processes the touch input
* and updates the LED status.
*
*******************************************************************************/
static void process_touch(void)
{
uint32_t button0_status;
uint32_t button1_status;
cy_stc_capsense_touch_t *slider_touch_info;
uint16_t slider_pos;
uint8_t slider_touch_status;
bool led_update_req = false;
static uint32_t button0_status_prev;
static uint32_t button1_status_prev;
static uint16_t slider_pos_prev;
static uint16_t slider_pos_value;
//static led_data_t led_data = {LED_ON, LED_MAX_BRIGHTNESS};
/* Get button 0 status */
button0_status = Cy_CapSense_IsSensorActive(
CY_CAPSENSE_BUTTON0_WDGT_ID,
CY_CAPSENSE_BUTTON0_SNS0_ID,
&cy_capsense_context);
/* Get button 1 status */
button1_status = Cy_CapSense_IsSensorActive(
CY_CAPSENSE_BUTTON1_WDGT_ID,
CY_CAPSENSE_BUTTON1_SNS0_ID,
&cy_capsense_context);
/* Get slider status */
slider_touch_info = Cy_CapSense_GetTouchInfo(
CY_CAPSENSE_LINEARSLIDER0_WDGT_ID, &cy_capsense_context);
slider_touch_status = slider_touch_info->numPosition;
slider_pos = slider_touch_info->ptrPosition->x;
/* Detect new touch on Button0 */
if ((0u != button0_status) &&
(0u == button0_status_prev))
{
// led_data.state = LED_ON;
led_update_req = true;
}
/* Detect new touch on Button1 */
if ((0u != button1_status) &&
(0u == button1_status_prev))
{
// led_data.state = LED_OFF;
led_update_req = true;
}
/* Detect the new touch on slider */
if ((0 != slider_touch_status) &&
(slider_pos != slider_pos_prev))
{
slider_pos_value = (slider_pos * 100)
/ cy_capsense_context.ptrWdConfig[CY_CAPSENSE_LINEARSLIDER0_WDGT_ID].xResolution;
led_update_req = true;
printf("%d \r\n",slider_pos_value);
}
/* Update the LED state if requested */
if (led_update_req)
{
//update_led_state(&led_data);
printf("Button\r\n");
}
/* Update previous touch status */
button0_status_prev = button0_status;
button1_status_prev = button1_status;
slider_pos_prev = slider_pos;
}
启动程序
用手触摸滑条
可以看到滑条的数值的变化。
总结:
这个测试花了一整天的时间将英飞凌的触摸的设置了解了个大概,测试中需要引脚的对应。
|