This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430FR4133内部自带触摸功能,没有可以调节灵敏度的寄存器?

Other Parts Discussed in Thread: MSP430FR4133

请技术支持回答。我用的单片机是msp430fr4133  ,它内部自带了 触摸功能的模块。我按照官网的例程烧写进去,感觉灵敏度不够。可是没有调节灵敏度的寄存器啊。我的触摸屏串了一个电阻直接接到单片机的触摸引脚了。


while (1)
{
j = KEY_LVL;
key_pressed = 0; // Assume no keys are pressed
measure_count(); // Measure all sensors

for (i = 0; i<NUM_SEN; i++)
{
delta_cnt[i] = base_cnt[i] - meas_cnt[i]; // Calculate delta: c_change

/* Handle baseline measurment for a base C decrease*/
if (delta_cnt[i] < 0) // If negative: result increased
{ // beyond baseline, i.e. cap dec
base_cnt[i] = (base_cnt[i]+meas_cnt[i]) >> 1; // Re-average quickly
delta_cnt[i] = 0; // Zero out for pos determination
}
if (delta_cnt[i] > j) // Determine if each key is pressed
{ // per a preset threshold
key_press[i] = 1; // Specific key pressed
j = delta_cnt[i];
key_pressed = i+1; // key pressed
}
else
key_press[i] = 0;
}

/* Delay to next sample */
WDTCTL = WDT_delay_setting; // WDT, ACLK, interval timer

/* Handle baseline measurment for a base C increase*/
if (!key_pressed) // Only adjust baseline down
{ // if no keys are touched
for (i = 0; i<NUM_SEN; i++)
base_cnt[i] = base_cnt[i] - 1; // Adjust baseline down, should be
} // slow to accomodate for genuine
pulse_LED(); // changes in sensor C

__bis_SR_register(LPM3_bits);
}

void measure_count(void)
{
unsigned char i;
TA0CTL = TASSEL_3 + MC_2; // TACLK, cont mode
TA0CCTL1 = CM_3 + CCIS_2 + CAP; // Pos&Neg,GND,Cap

for (i = 0; i<NUM_SEN; i++)
{
/*Configure Ports for relaxation oscillator*/
pinosc_channel_select(5, electrode_bit[i]);

/*Setup Gate Timer*/
WDTCTL = WDT_meas_setting; // WDT, ACLK, interval timer
TA0CTL |= TACLR; // Clear Timer_A TAR
__bis_SR_register(LPM0_bits+GIE); // Wait for WDT interrupt
TA0CCTL1 ^= CCIS0; // Create SW capture of CCR1
meas_cnt[i] = TA0CCR1; // Save result
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
CAPSIO0CTL = 0;
}
}

以上是官网的例子,也请解释下。

  • 这个是属于电容触摸检测,通过人手触摸按键,改变电容值,通过检测电容值的变化来检测按键动作。

    具体到检测电容值变化,在MSP430FR4133上的实现是:

    1. 芯片的IO引脚可以配置成Capcitive Touch IO模式,结合外部电容、施密特触发器以及上下拉电阻切换,对电容充放电,形成一个振荡器,产生方波,如图1。

    2. 振荡器的方波频率即和引脚相连的电容值有关,通过将方波信号输入给内部计时器TimerA模块,就可以测量方波的周期和宽度。

    3. 将当前的计数值和按键常态未被触摸时的计数值做比较,来判断按键是否被触摸,当然常态无触摸情形下,计数值也会受噪声和环境影响有一定变化,所以需要结合一定的滤波算法来判定。

    4. 计数值的 变化超出一定阈值,则判断为触摸,此阈值在上面的代码中体现为 j = KEY_LVL;用此来调节灵敏度,不是特定寄存器。

    5. MSP430FR4133只是带Capcitive Touch IO, 并不带CapTIvate Module,所以脉宽计数和滤波判定等需要软件算法,没有寄存器。MSP430FR2xx系列芯片自带CapTIvate Module,只需配置寄存器,即可实现电容触摸检测。

    6. 上面的资料来源于TI官方芯片文档http://www.ti.com/product/MSP430FR4133/technicaldocuments,需要了解更对信息,也请参考官网TI.com。


    如果您认为此问题已被解答,请在“这是否解答您的问题” 后,点击“”按钮。 感谢您对TI的大力支持!