430捕获功能需要消抖吗

[复制链接]
740|19
 楼主| Rangar 发表于 2016-8-17 21:15 | 显示全部楼层 |阅读模式
最近做了msp430定时捕获的实验,想用计算一个下降沿脉冲的时间间隔,发现能捕获到但是每来一个下降沿的时候,捕获到多个是什么原因啊,用信号发生器给了一个1s周期的方波,采集到情况是每秒采集到2个,不知道哪里有问题
#include <msp430x14x.h>
unsigned char overflow,value;
void main (void)
{
WDTCTL = WDTPW+WDTHOLD;                    //关闭看门狗定时器
P1DIR = BIT0+BIT4;                         //设置P1.0方向为输出
P1SEL = BIT2;                              //设置P1.2端口为功能模块使用
TACTL = TASSEL0+TACLR+TAIE+MC_2;            //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式
CCTL1 = CM_2+SCS+CAP+CCIE;                  //下降沿捕获,CCI0A为捕获信号源
_EINT();                                   //中断允许
while(1);                                  //LOOP
}
#pragma vector=TIMERA1_VECTOR               //定时器A中断处理
__interrupt void timer_a(void)
{
switch(TAIV)                               //向量查询
  { case 2:                                 //捕获中断
      
        if (CCTL1&CM1)                  //下降沿
        {  
           value++
       }   
       break;
    case 10:                                //定时器溢出中断
       overflow++;
       break;                               //溢出计数加1
    default:break;
  }
}
Thor9 发表于 2016-8-17 21:30 | 显示全部楼层
建议加延时
Rollo 发表于 2016-8-17 21:42 | 显示全部楼层
在哪里加延时合适呢
lihuami 发表于 2016-8-17 22:22 | 显示全部楼层
你可以硬件进行消抖
lihuami 发表于 2016-8-17 22:25 | 显示全部楼层
一般软件可以延时消抖就行。
ayl439 发表于 2016-8-19 11:49 | 显示全部楼层
捕获本身的原理很简单,用在对时间准确性要求严格的地方,如果还要消抖的话,往往就不用捕获了,消抖根本无法保证时间的准确性,除非对准确性要求很低,往往这种情况也用不着捕获了
smilingangel 发表于 2016-8-19 21:48 | 显示全部楼层
这个还是需要的,防止误触发的。。
youtome 发表于 2016-8-19 22:22 | 显示全部楼层
需要,可以延时消抖
youtome 发表于 2016-8-19 22:23 | 显示全部楼层
如果觉得可以,直接硬件消抖。
火山LF 发表于 2016-8-20 11:49 | 显示全部楼层
Rollo 发表于 2016-8-17 21:42
在哪里加延时合适呢

你可以参考一下以下的代码,下降沿触发中断,消抖可以在中断里面消抖。
  1. #pragma vector = PORT1_VECTOR;
  2. __interrupt void PORT1_ISR(void)
  3. {
  4.         unsigned int key = 0;
  5.         key = GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1);
  6.         if (key == 0)
  7.         {

  8.                 __delay_cycles(10000);
  9.                 if (key == 0)
  10.                 {
  11.                         GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
  12.                 }
  13.         }
  14.         GPIO_clearInterrupt(GPIO_PORT_P1,GPIO_PIN1);
angerbird 发表于 2016-8-20 17:31 | 显示全部楼层
做捕获功能的是不能做消抖处理的啦
Brand2 发表于 2016-8-31 22:06 | 显示全部楼层
硬件进行消抖怎么做
jimmhu 发表于 2016-8-31 22:43 | 显示全部楼层
你是要软件实现还是硬件实现呢
jimmhu 发表于 2016-8-31 22:46 | 显示全部楼层
软件实现成本低一些的。
ghy19930904 发表于 2016-8-31 23:01 | 显示全部楼层
需要。。。。。。
51xlf 发表于 2016-9-1 17:04 | 显示全部楼层
这个需要消吗
51xlf 发表于 2016-9-1 17:07 | 显示全部楼层
前段电路做好吧。
selongli 发表于 2016-9-2 22:52 | 显示全部楼层
这个不需要消抖就行。
selongli 发表于 2016-9-2 22:53 | 显示全部楼层
看看你的信号是怎么样的
xinxi 发表于 2016-9-2 22:56 | 显示全部楼层
6楼正解,要消抖 就干脆 用查询,10ms查询一次,查询5次  取其3 ,保证什么抖动都没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

154

主题

763

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部