打印

430捕获功能需要消抖吗

[复制链接]
503|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 | 只看该作者
你可以硬件进行消抖

使用特权

评论回复
5
lihuami| | 2016-8-17 22:25 | 只看该作者
一般软件可以延时消抖就行。

使用特权

评论回复
6
ayl439| | 2016-8-19 11:49 | 只看该作者
捕获本身的原理很简单,用在对时间准确性要求严格的地方,如果还要消抖的话,往往就不用捕获了,消抖根本无法保证时间的准确性,除非对准确性要求很低,往往这种情况也用不着捕获了

使用特权

评论回复
7
smilingangel| | 2016-8-19 21:48 | 只看该作者
这个还是需要的,防止误触发的。。

使用特权

评论回复
8
youtome| | 2016-8-19 22:22 | 只看该作者
需要,可以延时消抖

使用特权

评论回复
9
youtome| | 2016-8-19 22:23 | 只看该作者
如果觉得可以,直接硬件消抖。

使用特权

评论回复
10
火山LF| | 2016-8-20 11:49 | 只看该作者
Rollo 发表于 2016-8-17 21:42
在哪里加延时合适呢

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

                __delay_cycles(10000);
                if (key == 0)
                {
                        GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
                }
        }
        GPIO_clearInterrupt(GPIO_PORT_P1,GPIO_PIN1);

使用特权

评论回复
11
angerbird| | 2016-8-20 17:31 | 只看该作者
做捕获功能的是不能做消抖处理的啦

使用特权

评论回复
12
Brand2| | 2016-8-31 22:06 | 只看该作者
硬件进行消抖怎么做

使用特权

评论回复
13
jimmhu| | 2016-8-31 22:43 | 只看该作者
你是要软件实现还是硬件实现呢

使用特权

评论回复
14
jimmhu| | 2016-8-31 22:46 | 只看该作者
软件实现成本低一些的。

使用特权

评论回复
15
ghy19930904| | 2016-8-31 23:01 | 只看该作者
需要。。。。。。

使用特权

评论回复
16
51xlf| | 2016-9-1 17:04 | 只看该作者
这个需要消吗

使用特权

评论回复
17
51xlf| | 2016-9-1 17:07 | 只看该作者
前段电路做好吧。

使用特权

评论回复
18
selongli| | 2016-9-2 22:52 | 只看该作者
这个不需要消抖就行。

使用特权

评论回复
19
selongli| | 2016-9-2 22:53 | 只看该作者
看看你的信号是怎么样的

使用特权

评论回复
20
xinxi| | 2016-9-2 22:56 | 只看该作者
6楼正解,要消抖 就干脆 用查询,10ms查询一次,查询5次  取其3 ,保证什么抖动都没有

使用特权

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

本版积分规则

154

主题

763

帖子

0

粉丝