智能车制作

标题: 两路计数 求救 [打印本页]

作者: xin99    时间: 2013-4-26 13:50
标题: 两路计数 求救
用9s128一路累计计数 另一路用的是HCF4520  
问题是用4520计数的 数值跳变 比另一路大两倍近  同样的PWM
即使我试用两路 同时对一个编码器计数  可还是4520计数大 而且还会跳变  
求大神指导   都弄快一个星期了    谢谢

4520用B口读  程序如下  原理图在附件  求指导啊



void Port_init (void)
{
    //DDRA = 0x00;    //A口高四位输入?低四位输入  
    DDRB = 0X00;  //B口输入   左边8位计数器
    DDRM=0XFF;
    PTM_PTM7 = 0;  //PM0输出为0 左边计数器清零端 高有效
}
/**************ECT测速 PT7作为输入引脚*************/
void ECT_init(void)
{
    TIOS|=0x02;
    TSCR1=0x90;//定时器使能,定时器标志快速清除,[PRNT]bit3:0,预分频使能[TSCR2],
    TSCR2|=0x07;//禁止定时器溢出中断,禁止复位, 预分频系数为128
    PACNT=0;
    PACTL_PAEN=1; //16 位的脉冲累加器A 使能
    PACTL_PAMOD=0;//0 事件计数模式,1 门控计时累加模式
    PACTL_PEDGE=1;//PAMOD=0 时,0 下降沿触发,1 上升沿触发
    PACTL_CLK1=0;//0;//0:0 定时器时钟使用预分频因子定义的时钟
    PACTL_CLK0=0;//0:1PACLK,1:0PACLK/256,1:1PACLK/65536
    PACTL_PAOVI=0;//0 脉冲累加器A 溢出中断禁止,1 如果PAOVF 被置位则产生中断
    PACTL_PAI=0;//0 禁止输入中断,1 如果PAIF 被置位则产生中断
}
void GetMotorPulse()
{
      right_counter = PACNT;     //存储脉冲次数
      PACNT = 0; //脉冲计数器清零
      if(right_counter < 255)
      {
          left_counter = PORTB;
      }
       else
      {   
          left_counter = PORTB + 255;
      }
      PTM_PTM7 = 1;   
      PORTB=0;
      PTM_PTM7 = 0;
  
}

作者: huang91    时间: 2013-4-26 14:02
PORTB=0;
//后面加一句
while(PORTB);//等待PB口清“0" 完成

补充内容 (2013-4-28 13:01):
看错了,PB是读输入的。怎么可以设置为0呢?要用CLR使计数芯片复位。
作者: exiao    时间: 2013-4-26 14:13
学习下
作者: xin99    时间: 2013-4-26 16:08
huang91 发表于 2013-4-26 14:02
PORTB=0;
//后面加一句
while(PORTB);//等待PB口清“0" 完成

真的是大神啊   跪谢了……
作者: huang91    时间: 2013-4-26 16:13
本帖最后由 huang91 于 2013-4-26 16:17 编辑
xin99 发表于 2013-4-26 16:08
真的是大神啊   跪谢了……

问题解决了?
作者: xin99    时间: 2013-4-26 16:18
huang91 发表于 2013-4-26 16:13
问题解决了?

恩恩    谢谢

作者: huang91    时间: 2013-4-26 16:22
xin99 发表于 2013-4-26 16:18
恩恩    谢谢

不谢,不谢。希望你的车能快快跑起来。{:soso_e113:}

作者: xin99    时间: 2013-4-26 17:03
huang91 发表于 2013-4-26 16:22
不谢,不谢。希望你的车能快快跑起来。

恩恩 终于可以加速度控制了

作者: endlesshai    时间: 2013-4-29 21:47
xin99 发表于 2013-4-26 16:18
恩恩    谢谢

你们用了几个4520呢?读数与PT7大概一致吗
if(right_counter < 255)
{
left_counter = PORTB;
}
else
{
left_counter = PORTB + 255;
}
是啥意思啊


作者: 林JJ    时间: 2014-3-25 16:52
谢谢
作者: Orange_soda    时间: 2014-5-8 19:05
这个好
作者: lizhifei    时间: 2014-5-10 13:49
我按照你的程序和电路图为什么我测不到数呢  希望回复   小弟新手电磁
作者: 15737978539    时间: 2014-7-13 11:23
huang91 发表于 2013-4-26 14:02
PORTB=0;
//后面加一句
while(PORTB);//等待PB口清“0" 完成

顶,我们的问题也解决了





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2